diff options
1015 files changed, 38904 insertions, 26241 deletions
diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt index e46cc6f3f4..da60213038 100644 --- a/COPYRIGHT.txt +++ b/COPYRIGHT.txt @@ -1379,7 +1379,7 @@ License: HarfBuzz Copyright (C) 2009 Keith Stribley Copyright (C) 2009 Martin Hosken and SIL International Copyright (C) 2007 Chris Wilson - Copyright (C) 2006 Behdad Esfahbod + Copyright (C) 2005,2006,2020,2021 Behdad Esfahbod Copyright (C) 2005 David Turner Copyright (C) 2004,2007,2008,2009,2010 Red Hat, Inc. Copyright (C) 1998-2004 David Turner and Werner Lemberg diff --git a/core/config/project_settings.cpp b/core/config/project_settings.cpp index 03892d1d4f..09f9f84728 100644 --- a/core/config/project_settings.cpp +++ b/core/config/project_settings.cpp @@ -55,11 +55,7 @@ String ProjectSettings::get_resource_path() const { const String ProjectSettings::IMPORTED_FILES_PATH("res://.godot/imported"); String ProjectSettings::localize_path(const String &p_path) const { - if (resource_path == "") { - return p_path; //not initialized yet - } - - if (p_path.begins_with("res://") || p_path.begins_with("user://") || + if (resource_path.is_empty() || p_path.begins_with("res://") || p_path.begins_with("user://") || (p_path.is_absolute_path() && !p_path.begins_with(resource_path))) { return p_path.simplify_path(); } diff --git a/core/input/input_map.cpp b/core/input/input_map.cpp index c6db7be53a..8bec80a99e 100644 --- a/core/input/input_map.cpp +++ b/core/input/input_map.cpp @@ -33,6 +33,7 @@ #include "core/config/project_settings.h" #include "core/input/input.h" #include "core/os/keyboard.h" +#include "core/os/os.h" InputMap *InputMap::singleton = nullptr; @@ -699,34 +700,57 @@ const OrderedHashMap<String, List<Ref<InputEvent>>> &InputMap::get_builtins() { return default_builtin_cache; } -void InputMap::load_default() { +const OrderedHashMap<String, List<Ref<InputEvent>>> &InputMap::get_builtins_with_feature_overrides_applied() { + if (default_builtin_with_overrides_cache.size() > 0) { + return default_builtin_with_overrides_cache; + } + OrderedHashMap<String, List<Ref<InputEvent>>> builtins = get_builtins(); - // List of Builtins which have an override for macOS. - Vector<String> macos_builtins; + // Get a list of all built in inputs which are valid overrides for the OS + // Key = builtin name (e.g. ui_accept) + // Value = override/feature names (e.g. macos, if it was defined as "ui_accept.macos" and the platform supports that feature) + Map<String, Vector<String>> builtins_with_overrides; for (OrderedHashMap<String, List<Ref<InputEvent>>>::Element E = builtins.front(); E; E = E.next()) { - if (String(E.key()).ends_with(".macos")) { - // Strip .macos from name: some_input_name.macos -> some_input_name - macos_builtins.push_back(String(E.key()).split(".")[0]); + String fullname = E.key(); + + Vector<String> split = fullname.split("."); + String name = split[0]; + String override_for = split.size() > 1 ? split[1] : String(); + + if (override_for != String() && OS::get_singleton()->has_feature(override_for)) { + builtins_with_overrides[name].push_back(override_for); } } for (OrderedHashMap<String, List<Ref<InputEvent>>>::Element E = builtins.front(); E; E = E.next()) { String fullname = E.key(); - String name = fullname.split(".")[0]; - String override_for = fullname.split(".").size() > 1 ? fullname.split(".")[1] : ""; -#ifdef APPLE_STYLE_KEYS - if (macos_builtins.has(name) && override_for != "macos") { - // Name has `macos` builtin but this particular one is for non-macOS systems - so skip. + Vector<String> split = fullname.split("."); + String name = split[0]; + String override_for = split.size() > 1 ? split[1] : String(); + + if (builtins_with_overrides.has(name) && override_for == String()) { + // Builtin has an override but this particular one is not an override, so skip. continue; } -#else - if (override_for == "macos") { - // Override for macOS - not needed on non-macOS platforms. + + if (override_for != String() && !OS::get_singleton()->has_feature(override_for)) { + // OS does not support this override - skip. continue; } -#endif + + default_builtin_with_overrides_cache.insert(name, E.value()); + } + + return default_builtin_with_overrides_cache; +} + +void InputMap::load_default() { + OrderedHashMap<String, List<Ref<InputEvent>>> builtins = get_builtins_with_feature_overrides_applied(); + + for (OrderedHashMap<String, List<Ref<InputEvent>>>::Element E = builtins.front(); E; E = E.next()) { + String name = E.key(); add_action(name); diff --git a/core/input/input_map.h b/core/input/input_map.h index c724fdb142..8bef722089 100644 --- a/core/input/input_map.h +++ b/core/input/input_map.h @@ -56,6 +56,7 @@ private: mutable OrderedHashMap<StringName, Action> input_map; OrderedHashMap<String, List<Ref<InputEvent>>> default_builtin_cache; + OrderedHashMap<String, List<Ref<InputEvent>>> default_builtin_with_overrides_cache; List<Ref<InputEvent>>::Element *_find_event(Action &p_action, const Ref<InputEvent> &p_event, bool p_exact_match = false, bool *p_pressed = nullptr, float *p_strength = nullptr, float *p_raw_strength = nullptr) const; @@ -93,6 +94,7 @@ public: String get_builtin_display_name(const String &p_name) const; // Use an Ordered Map so insertion order is preserved. We want the elements to be 'grouped' somewhat. const OrderedHashMap<String, List<Ref<InputEvent>>> &get_builtins(); + const OrderedHashMap<String, List<Ref<InputEvent>>> &get_builtins_with_feature_overrides_applied(); InputMap(); ~InputMap(); diff --git a/core/math/transform_2d.cpp b/core/math/transform_2d.cpp index 16934d67df..060b619892 100644 --- a/core/math/transform_2d.cpp +++ b/core/math/transform_2d.cpp @@ -63,7 +63,7 @@ Transform2D Transform2D::affine_inverse() const { return inv; } -void Transform2D::rotate(real_t p_phi) { +void Transform2D::rotate(const real_t p_phi) { *this = Transform2D(p_phi, Vector2()) * (*this); } @@ -72,7 +72,7 @@ real_t Transform2D::get_skew() const { return Math::acos(elements[0].normalized().dot(SGN(det) * elements[1].normalized())) - Math_PI * 0.5; } -void Transform2D::set_skew(float p_angle) { +void Transform2D::set_skew(const real_t p_angle) { real_t det = basis_determinant(); elements[1] = SGN(det) * elements[0].rotated((Math_PI * 0.5 + p_angle)).normalized() * elements[1].length(); } @@ -81,7 +81,7 @@ real_t Transform2D::get_rotation() const { return Math::atan2(elements[0].y, elements[0].x); } -void Transform2D::set_rotation(real_t p_rot) { +void Transform2D::set_rotation(const real_t p_rot) { Size2 scale = get_scale(); real_t cr = Math::cos(p_rot); real_t sr = Math::sin(p_rot); @@ -92,7 +92,7 @@ void Transform2D::set_rotation(real_t p_rot) { set_scale(scale); } -Transform2D::Transform2D(real_t p_rot, const Vector2 &p_pos) { +Transform2D::Transform2D(const real_t p_rot, const Vector2 &p_pos) { real_t cr = Math::cos(p_rot); real_t sr = Math::sin(p_rot); elements[0][0] = cr; @@ -102,6 +102,14 @@ Transform2D::Transform2D(real_t p_rot, const Vector2 &p_pos) { elements[2] = p_pos; } +Transform2D::Transform2D(const real_t p_rot, const Size2 &p_scale, const real_t p_skew, const Vector2 &p_pos) { + elements[0][0] = Math::cos(p_rot) * p_scale.x; + elements[1][1] = Math::cos(p_rot + p_skew) * p_scale.y; + elements[1][0] = -Math::sin(p_rot + p_skew) * p_scale.y; + elements[0][1] = Math::sin(p_rot) * p_scale.x; + elements[2] = p_pos; +} + Size2 Transform2D::get_scale() const { real_t det_sign = SGN(basis_determinant()); return Size2(elements[0].length(), det_sign * elements[1].length()); @@ -126,7 +134,7 @@ void Transform2D::scale_basis(const Size2 &p_scale) { elements[1][1] *= p_scale.y; } -void Transform2D::translate(real_t p_tx, real_t p_ty) { +void Transform2D::translate(const real_t p_tx, const real_t p_ty) { translate(Vector2(p_tx, p_ty)); } @@ -231,7 +239,7 @@ Transform2D Transform2D::translated(const Vector2 &p_offset) const { return copy; } -Transform2D Transform2D::rotated(real_t p_phi) const { +Transform2D Transform2D::rotated(const real_t p_phi) const { Transform2D copy = *this; copy.rotate(p_phi); return copy; @@ -241,7 +249,7 @@ real_t Transform2D::basis_determinant() const { return elements[0].x * elements[1].y - elements[0].y * elements[1].x; } -Transform2D Transform2D::interpolate_with(const Transform2D &p_transform, real_t p_c) const { +Transform2D Transform2D::interpolate_with(const Transform2D &p_transform, const real_t p_c) const { //extract parameters Vector2 p1 = get_origin(); Vector2 p2 = p_transform.get_origin(); diff --git a/core/math/transform_2d.h b/core/math/transform_2d.h index 34cfd0c1a9..6ed3af2ba7 100644 --- a/core/math/transform_2d.h +++ b/core/math/transform_2d.h @@ -68,17 +68,17 @@ struct Transform2D { void affine_invert(); Transform2D affine_inverse() const; - void set_rotation(real_t p_rot); + void set_rotation(const real_t p_rot); real_t get_rotation() const; real_t get_skew() const; - void set_skew(float p_angle); - _FORCE_INLINE_ void set_rotation_and_scale(real_t p_rot, const Size2 &p_scale); - _FORCE_INLINE_ void set_rotation_scale_and_skew(real_t p_rot, const Size2 &p_scale, float p_skew); - void rotate(real_t p_phi); + void set_skew(const real_t p_angle); + _FORCE_INLINE_ void set_rotation_and_scale(const real_t p_rot, const Size2 &p_scale); + _FORCE_INLINE_ void set_rotation_scale_and_skew(const real_t p_rot, const Size2 &p_scale, const real_t p_skew); + void rotate(const real_t p_phi); void scale(const Size2 &p_scale); void scale_basis(const Size2 &p_scale); - void translate(real_t p_tx, real_t p_ty); + void translate(const real_t p_tx, const real_t p_ty); void translate(const Vector2 &p_translation); real_t basis_determinant() const; @@ -92,7 +92,7 @@ struct Transform2D { Transform2D scaled(const Size2 &p_scale) const; Transform2D basis_scaled(const Size2 &p_scale) const; Transform2D translated(const Vector2 &p_offset) const; - Transform2D rotated(real_t p_phi) const; + Transform2D rotated(const real_t p_phi) const; Transform2D untranslated() const; @@ -110,7 +110,7 @@ struct Transform2D { void operator*=(const real_t p_val); Transform2D operator*(const real_t p_val) const; - Transform2D interpolate_with(const Transform2D &p_transform, real_t p_c) const; + Transform2D interpolate_with(const Transform2D &p_transform, const real_t p_c) const; _FORCE_INLINE_ Vector2 basis_xform(const Vector2 &p_vec) const; _FORCE_INLINE_ Vector2 basis_xform_inv(const Vector2 &p_vec) const; @@ -123,7 +123,7 @@ struct Transform2D { operator String() const; - Transform2D(real_t xx, real_t xy, real_t yx, real_t yy, real_t ox, real_t oy) { + Transform2D(const real_t xx, const real_t xy, const real_t yx, const real_t yy, const real_t ox, const real_t oy) { elements[0][0] = xx; elements[0][1] = xy; elements[1][0] = yx; @@ -138,7 +138,10 @@ struct Transform2D { elements[2] = p_origin; } - Transform2D(real_t p_rot, const Vector2 &p_pos); + Transform2D(const real_t p_rot, const Vector2 &p_pos); + + Transform2D(const real_t p_rot, const Size2 &p_scale, const real_t p_skew, const Vector2 &p_pos); + Transform2D() { elements[0][0] = 1.0; elements[1][1] = 1.0; @@ -185,14 +188,14 @@ Rect2 Transform2D::xform(const Rect2 &p_rect) const { return new_rect; } -void Transform2D::set_rotation_and_scale(real_t p_rot, const Size2 &p_scale) { +void Transform2D::set_rotation_and_scale(const real_t p_rot, const Size2 &p_scale) { elements[0][0] = Math::cos(p_rot) * p_scale.x; elements[1][1] = Math::cos(p_rot) * p_scale.y; elements[1][0] = -Math::sin(p_rot) * p_scale.y; elements[0][1] = Math::sin(p_rot) * p_scale.x; } -void Transform2D::set_rotation_scale_and_skew(real_t p_rot, const Size2 &p_scale, float p_skew) { +void Transform2D::set_rotation_scale_and_skew(const real_t p_rot, const Size2 &p_scale, const real_t p_skew) { elements[0][0] = Math::cos(p_rot) * p_scale.x; elements[1][1] = Math::cos(p_rot + p_skew) * p_scale.y; elements[1][0] = -Math::sin(p_rot + p_skew) * p_scale.y; diff --git a/core/variant/variant_call.cpp b/core/variant/variant_call.cpp index 7bce060044..c3fe4117ac 100644 --- a/core/variant/variant_call.cpp +++ b/core/variant/variant_call.cpp @@ -1704,6 +1704,7 @@ static void _register_variant_builtin_methods() { bind_method(Transform2D, get_rotation, sarray(), varray()); bind_method(Transform2D, get_origin, sarray(), varray()); bind_method(Transform2D, get_scale, sarray(), varray()); + bind_method(Transform2D, get_skew, sarray(), varray()); bind_method(Transform2D, orthonormalized, sarray(), varray()); bind_method(Transform2D, rotated, sarray("phi"), varray()); bind_method(Transform2D, scaled, sarray("scale"), varray()); @@ -1713,6 +1714,8 @@ static void _register_variant_builtin_methods() { bind_method(Transform2D, interpolate_with, sarray("xform", "weight"), varray()); bind_method(Transform2D, is_equal_approx, sarray("xform"), varray()); bind_method(Transform2D, set_rotation, sarray("rotation"), varray()); + bind_method(Transform2D, set_scale, sarray("scale"), varray()); + bind_method(Transform2D, set_skew, sarray("skew"), varray()); bind_method(Transform2D, looking_at, sarray("target"), varray(Vector2())); /* Basis */ diff --git a/core/variant/variant_construct.cpp b/core/variant/variant_construct.cpp index a1a2bec369..4317b9dc98 100644 --- a/core/variant/variant_construct.cpp +++ b/core/variant/variant_construct.cpp @@ -114,6 +114,7 @@ void Variant::_register_variant_constructors() { add_constructor<VariantConstructNoArgs<Transform2D>>(sarray()); add_constructor<VariantConstructor<Transform2D, Transform2D>>(sarray("from")); add_constructor<VariantConstructor<Transform2D, float, Vector2>>(sarray("rotation", "position")); + add_constructor<VariantConstructor<Transform2D, float, Size2, float, Vector2>>(sarray("rotation", "scale", "skew", "position")); add_constructor<VariantConstructor<Transform2D, Vector2, Vector2, Vector2>>(sarray("x_axis", "y_axis", "origin")); add_constructor<VariantConstructNoArgs<Plane>>(sarray()); diff --git a/core/variant/variant_utility.cpp b/core/variant/variant_utility.cpp index 232054d0ca..55c1376031 100644 --- a/core/variant/variant_utility.cpp +++ b/core/variant/variant_utility.cpp @@ -487,10 +487,6 @@ struct VariantUtilityFunctions { } static inline void print(const Variant **p_args, int p_arg_count, Callable::CallError &r_error) { - if (p_arg_count < 1) { - r_error.error = Callable::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS; - r_error.argument = 1; - } String str; for (int i = 0; i < p_arg_count; i++) { String os = p_args[i]->operator String(); @@ -506,11 +502,29 @@ struct VariantUtilityFunctions { r_error.error = Callable::CallError::CALL_OK; } - static inline void printerr(const Variant **p_args, int p_arg_count, Callable::CallError &r_error) { - if (p_arg_count < 1) { - r_error.error = Callable::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS; - r_error.argument = 1; + static inline void print_verbose(const Variant **p_args, int p_arg_count, Callable::CallError &r_error) { + if (OS::get_singleton()->is_stdout_verbose()) { + String str; + for (int i = 0; i < p_arg_count; i++) { + String os = p_args[i]->operator String(); + + if (i == 0) { + str = os; + } else { + str += os; + } + } + + // No need to use `print_verbose()` as this call already only happens + // when verbose mode is enabled. This avoids performing string argument concatenation + // when not needed. + print_line(str); } + + r_error.error = Callable::CallError::CALL_OK; + } + + static inline void printerr(const Variant **p_args, int p_arg_count, Callable::CallError &r_error) { String str; for (int i = 0; i < p_arg_count; i++) { String os = p_args[i]->operator String(); @@ -527,10 +541,6 @@ struct VariantUtilityFunctions { } static inline void printt(const Variant **p_args, int p_arg_count, Callable::CallError &r_error) { - if (p_arg_count < 1) { - r_error.error = Callable::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS; - r_error.argument = 1; - } String str; for (int i = 0; i < p_arg_count; i++) { if (i) { @@ -544,10 +554,6 @@ struct VariantUtilityFunctions { } static inline void prints(const Variant **p_args, int p_arg_count, Callable::CallError &r_error) { - if (p_arg_count < 1) { - r_error.error = Callable::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS; - r_error.argument = 1; - } String str; for (int i = 0; i < p_arg_count; i++) { if (i) { @@ -561,10 +567,6 @@ struct VariantUtilityFunctions { } static inline void printraw(const Variant **p_args, int p_arg_count, Callable::CallError &r_error) { - if (p_arg_count < 1) { - r_error.error = Callable::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS; - r_error.argument = 1; - } String str; for (int i = 0; i < p_arg_count; i++) { String os = p_args[i]->operator String(); @@ -1246,6 +1248,7 @@ void Variant::_register_variant_utility_functions() { FUNCBINDVARARGV(printt, sarray(), Variant::UTILITY_FUNC_TYPE_GENERAL); FUNCBINDVARARGV(prints, sarray(), Variant::UTILITY_FUNC_TYPE_GENERAL); FUNCBINDVARARGV(printraw, sarray(), Variant::UTILITY_FUNC_TYPE_GENERAL); + FUNCBINDVARARGV(print_verbose, sarray(), Variant::UTILITY_FUNC_TYPE_GENERAL); FUNCBINDVARARGV(push_error, sarray(), Variant::UTILITY_FUNC_TYPE_GENERAL); FUNCBINDVARARGV(push_warning, sarray(), Variant::UTILITY_FUNC_TYPE_GENERAL); diff --git a/doc/classes/@GlobalScope.xml b/doc/classes/@GlobalScope.xml index c47ce81651..0334bab32a 100644 --- a/doc/classes/@GlobalScope.xml +++ b/doc/classes/@GlobalScope.xml @@ -556,6 +556,11 @@ [b]Note:[/b] Consider using [method push_error] and [method push_warning] to print error and warning messages instead of [method print]. This distinguishes them from print messages used for debugging purposes, while also displaying a stack trace when an error or warning is printed. </description> </method> + <method name="print_verbose" qualifiers="vararg"> + <description> + If verbose mode is enabled ([method OS.is_stdout_verbose] returning [code]true[/code]), converts one or more arguments of any type to string in the best way possible and prints them to the console. + </description> + </method> <method name="printerr" qualifiers="vararg"> <description> Prints one or more arguments to strings in the best way possible to standard error line. diff --git a/doc/classes/AABB.xml b/doc/classes/AABB.xml index 818d159d36..5d18f69409 100644 --- a/doc/classes/AABB.xml +++ b/doc/classes/AABB.xml @@ -234,6 +234,4 @@ If the size is negative, you can use [method abs] to fix it. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/AStar.xml b/doc/classes/AStar.xml index 3e91184a65..11c0fc33b8 100644 --- a/doc/classes/AStar.xml +++ b/doc/classes/AStar.xml @@ -326,6 +326,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/AStar2D.xml b/doc/classes/AStar2D.xml index 453e8b6315..43e7d59665 100644 --- a/doc/classes/AStar2D.xml +++ b/doc/classes/AStar2D.xml @@ -297,6 +297,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/AcceptDialog.xml b/doc/classes/AcceptDialog.xml index 077c062d6b..c753b341d2 100644 --- a/doc/classes/AcceptDialog.xml +++ b/doc/classes/AcceptDialog.xml @@ -90,8 +90,6 @@ </description> </signal> </signals> - <constants> - </constants> <theme_items> <theme_item name="panel" data_type="style" type="StyleBox"> Panel that fills up the background of the window. diff --git a/doc/classes/AnimatableBody2D.xml b/doc/classes/AnimatableBody2D.xml index 731c702549..e58f4bd692 100644 --- a/doc/classes/AnimatableBody2D.xml +++ b/doc/classes/AnimatableBody2D.xml @@ -10,13 +10,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="sync_to_physics" type="bool" setter="set_sync_to_physics" getter="is_sync_to_physics_enabled" default="false"> If [code]true[/code], the body's movement will be synchronized to the physics frame. This is useful when animating movement via [AnimationPlayer], for example on moving platforms. Do [b]not[/b] use together with [method PhysicsBody2D.move_and_collide]. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/AnimatableBody3D.xml b/doc/classes/AnimatableBody3D.xml index 8192f26057..71a48a5aa6 100644 --- a/doc/classes/AnimatableBody3D.xml +++ b/doc/classes/AnimatableBody3D.xml @@ -13,13 +13,9 @@ <link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link> <link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link> </tutorials> - <methods> - </methods> <members> <member name="sync_to_physics" type="bool" setter="set_sync_to_physics" getter="is_sync_to_physics_enabled" default="false"> If [code]true[/code], the body's movement will be synchronized to the physics frame. This is useful when animating movement via [AnimationPlayer], for example on moving platforms. Do [b]not[/b] use together with [method PhysicsBody3D.move_and_collide]. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/AnimatedSprite2D.xml b/doc/classes/AnimatedSprite2D.xml index 14e19b4c9a..b468e1d109 100644 --- a/doc/classes/AnimatedSprite2D.xml +++ b/doc/classes/AnimatedSprite2D.xml @@ -74,6 +74,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/AnimatedSprite3D.xml b/doc/classes/AnimatedSprite3D.xml index 6b3d426cef..59d7553ef4 100644 --- a/doc/classes/AnimatedSprite3D.xml +++ b/doc/classes/AnimatedSprite3D.xml @@ -56,6 +56,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/AnimationNodeAdd2.xml b/doc/classes/AnimationNodeAdd2.xml index 63127ade9a..20ee33209b 100644 --- a/doc/classes/AnimationNodeAdd2.xml +++ b/doc/classes/AnimationNodeAdd2.xml @@ -9,13 +9,9 @@ <tutorials> <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link> </tutorials> - <methods> - </methods> <members> <member name="sync" type="bool" setter="set_use_sync" getter="is_using_sync" default="false"> If [code]true[/code], sets the [code]optimization[/code] to [code]false[/code] when calling [method AnimationNode.blend_input], forcing the blended animations to update every frame. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/AnimationNodeAdd3.xml b/doc/classes/AnimationNodeAdd3.xml index 0e49ac7bbf..26738499bb 100644 --- a/doc/classes/AnimationNodeAdd3.xml +++ b/doc/classes/AnimationNodeAdd3.xml @@ -14,13 +14,9 @@ <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link> <link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link> </tutorials> - <methods> - </methods> <members> <member name="sync" type="bool" setter="set_use_sync" getter="is_using_sync" default="false"> If [code]true[/code], sets the [code]optimization[/code] to [code]false[/code] when calling [method AnimationNode.blend_input], forcing the blended animations to update every frame. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/AnimationNodeAnimation.xml b/doc/classes/AnimationNodeAnimation.xml index 75dae6a48e..668a35226f 100644 --- a/doc/classes/AnimationNodeAnimation.xml +++ b/doc/classes/AnimationNodeAnimation.xml @@ -11,13 +11,9 @@ <link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link> <link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link> </tutorials> - <methods> - </methods> <members> <member name="animation" type="StringName" setter="set_animation" getter="get_animation" default="&"""> Animation to use as an output. It is one of the animations provided by [member AnimationTree.anim_player]. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/AnimationNodeBlend2.xml b/doc/classes/AnimationNodeBlend2.xml index e509a2df6c..1f7a4c91c8 100644 --- a/doc/classes/AnimationNodeBlend2.xml +++ b/doc/classes/AnimationNodeBlend2.xml @@ -11,13 +11,9 @@ <link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link> <link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link> </tutorials> - <methods> - </methods> <members> <member name="sync" type="bool" setter="set_use_sync" getter="is_using_sync" default="false"> If [code]true[/code], sets the [code]optimization[/code] to [code]false[/code] when calling [method AnimationNode.blend_input], forcing the blended animations to update every frame. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/AnimationNodeBlend3.xml b/doc/classes/AnimationNodeBlend3.xml index 7c81b37663..ed827e2535 100644 --- a/doc/classes/AnimationNodeBlend3.xml +++ b/doc/classes/AnimationNodeBlend3.xml @@ -13,13 +13,9 @@ <tutorials> <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link> </tutorials> - <methods> - </methods> <members> <member name="sync" type="bool" setter="set_use_sync" getter="is_using_sync" default="false"> If [code]true[/code], sets the [code]optimization[/code] to [code]false[/code] when calling [method AnimationNode.blend_input], forcing the blended animations to update every frame. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/AnimationNodeBlendSpace1D.xml b/doc/classes/AnimationNodeBlendSpace1D.xml index c47d84fe37..6e55a79fd2 100644 --- a/doc/classes/AnimationNodeBlendSpace1D.xml +++ b/doc/classes/AnimationNodeBlendSpace1D.xml @@ -80,6 +80,4 @@ Label of the virtual axis of the blend space. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/AnimationNodeOutput.xml b/doc/classes/AnimationNodeOutput.xml index c4150d7e82..34c96d13ea 100644 --- a/doc/classes/AnimationNodeOutput.xml +++ b/doc/classes/AnimationNodeOutput.xml @@ -10,8 +10,4 @@ <link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link> <link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/AnimationNodeStateMachine.xml b/doc/classes/AnimationNodeStateMachine.xml index 9921e157f2..17ef565b3a 100644 --- a/doc/classes/AnimationNodeStateMachine.xml +++ b/doc/classes/AnimationNodeStateMachine.xml @@ -187,6 +187,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/AnimationNodeStateMachinePlayback.xml b/doc/classes/AnimationNodeStateMachinePlayback.xml index 5c11adfaf0..15c6c96302 100644 --- a/doc/classes/AnimationNodeStateMachinePlayback.xml +++ b/doc/classes/AnimationNodeStateMachinePlayback.xml @@ -74,6 +74,4 @@ <members> <member name="resource_local_to_scene" type="bool" setter="set_local_to_scene" getter="is_local_to_scene" override="true" default="true" /> </members> - <constants> - </constants> </class> diff --git a/doc/classes/AnimationNodeStateMachineTransition.xml b/doc/classes/AnimationNodeStateMachineTransition.xml index 7f07afecee..763bba6e93 100644 --- a/doc/classes/AnimationNodeStateMachineTransition.xml +++ b/doc/classes/AnimationNodeStateMachineTransition.xml @@ -7,8 +7,6 @@ <tutorials> <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link> </tutorials> - <methods> - </methods> <members> <member name="advance_condition" type="StringName" setter="set_advance_condition" getter="get_advance_condition" default="&"""> Turn on auto advance when this condition is set. The provided name will become a boolean parameter on the [AnimationTree] that can be controlled from code (see [url=https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html#controlling-from-code][/url]). For example, if [member AnimationTree.tree_root] is an [AnimationNodeStateMachine] and [member advance_condition] is set to [code]"idle"[/code]: diff --git a/doc/classes/AnimationNodeTimeScale.xml b/doc/classes/AnimationNodeTimeScale.xml index 2ce8309418..5b40b39bca 100644 --- a/doc/classes/AnimationNodeTimeScale.xml +++ b/doc/classes/AnimationNodeTimeScale.xml @@ -10,8 +10,4 @@ <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link> <link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/AnimationNodeTimeSeek.xml b/doc/classes/AnimationNodeTimeSeek.xml index 171d65fbe0..d927c663c8 100644 --- a/doc/classes/AnimationNodeTimeSeek.xml +++ b/doc/classes/AnimationNodeTimeSeek.xml @@ -29,8 +29,4 @@ <tutorials> <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/AnimationNodeTransition.xml b/doc/classes/AnimationNodeTransition.xml index 8c859e43be..b297832ac0 100644 --- a/doc/classes/AnimationNodeTransition.xml +++ b/doc/classes/AnimationNodeTransition.xml @@ -47,6 +47,4 @@ Cross-fading time (in seconds) between each animation connected to the inputs. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/AnimationRootNode.xml b/doc/classes/AnimationRootNode.xml index 46759b7f4d..056edbd230 100644 --- a/doc/classes/AnimationRootNode.xml +++ b/doc/classes/AnimationRootNode.xml @@ -6,8 +6,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/AnimationTrackEditPlugin.xml b/doc/classes/AnimationTrackEditPlugin.xml index 7b96808581..4a4c7157d2 100644 --- a/doc/classes/AnimationTrackEditPlugin.xml +++ b/doc/classes/AnimationTrackEditPlugin.xml @@ -6,8 +6,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/Array.xml b/doc/classes/Array.xml index 84e123d712..44e27643bb 100644 --- a/doc/classes/Array.xml +++ b/doc/classes/Array.xml @@ -550,6 +550,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/ArrayMesh.xml b/doc/classes/ArrayMesh.xml index 670a25ab83..49ce2588c5 100644 --- a/doc/classes/ArrayMesh.xml +++ b/doc/classes/ArrayMesh.xml @@ -203,6 +203,4 @@ <member name="shadow_mesh" type="ArrayMesh" setter="set_shadow_mesh" getter="get_shadow_mesh"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/AspectRatioContainer.xml b/doc/classes/AspectRatioContainer.xml index 7b41133139..4c0af0b997 100644 --- a/doc/classes/AspectRatioContainer.xml +++ b/doc/classes/AspectRatioContainer.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="alignment_horizontal" type="int" setter="set_alignment_horizontal" getter="get_alignment_horizontal" enum="AspectRatioContainer.AlignMode" default="1"> Specifies the horizontal relative position of child controls. diff --git a/doc/classes/AtlasTexture.xml b/doc/classes/AtlasTexture.xml index b49c0e4278..3435bbec59 100644 --- a/doc/classes/AtlasTexture.xml +++ b/doc/classes/AtlasTexture.xml @@ -9,8 +9,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="atlas" type="Texture2D" setter="set_atlas" getter="get_atlas"> The texture that contains the atlas. Can be any [Texture2D] subtype. @@ -25,6 +23,4 @@ The AtlasTexture's used region. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/AudioBusLayout.xml b/doc/classes/AudioBusLayout.xml index 09746913bd..b7e8d8932c 100644 --- a/doc/classes/AudioBusLayout.xml +++ b/doc/classes/AudioBusLayout.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/AudioEffect.xml b/doc/classes/AudioEffect.xml index 955285bd2e..fd2bab073f 100644 --- a/doc/classes/AudioEffect.xml +++ b/doc/classes/AudioEffect.xml @@ -9,8 +9,4 @@ <tutorials> <link title="Audio Mic Record Demo">https://godotengine.org/asset-library/asset/527</link> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/AudioEffectAmplify.xml b/doc/classes/AudioEffectAmplify.xml index 1334a81661..7fcfe24d97 100644 --- a/doc/classes/AudioEffectAmplify.xml +++ b/doc/classes/AudioEffectAmplify.xml @@ -9,13 +9,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="volume_db" type="float" setter="set_volume_db" getter="get_volume_db" default="0.0"> Amount of amplification in decibels. Positive values make the sound louder, negative values make it quieter. Value can range from -80 to 24. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/AudioEffectBandLimitFilter.xml b/doc/classes/AudioEffectBandLimitFilter.xml index e8b398c8f4..ed0a33deb1 100644 --- a/doc/classes/AudioEffectBandLimitFilter.xml +++ b/doc/classes/AudioEffectBandLimitFilter.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/AudioEffectBandPassFilter.xml b/doc/classes/AudioEffectBandPassFilter.xml index ad3dbc5256..642b70428e 100644 --- a/doc/classes/AudioEffectBandPassFilter.xml +++ b/doc/classes/AudioEffectBandPassFilter.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/AudioEffectCapture.xml b/doc/classes/AudioEffectCapture.xml index 8e46acbd07..6aecaa170a 100644 --- a/doc/classes/AudioEffectCapture.xml +++ b/doc/classes/AudioEffectCapture.xml @@ -61,6 +61,4 @@ Length of the internal ring buffer, in seconds. Setting the buffer length will have no effect if already initialized. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/AudioEffectChorus.xml b/doc/classes/AudioEffectChorus.xml index cc93a8fc03..e3ab141e3d 100644 --- a/doc/classes/AudioEffectChorus.xml +++ b/doc/classes/AudioEffectChorus.xml @@ -171,6 +171,4 @@ The effect's processed signal. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/AudioEffectCompressor.xml b/doc/classes/AudioEffectCompressor.xml index 4e924bcb65..28a5587377 100644 --- a/doc/classes/AudioEffectCompressor.xml +++ b/doc/classes/AudioEffectCompressor.xml @@ -14,8 +14,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="attack_us" type="float" setter="set_attack_us" getter="get_attack_us" default="20.0"> Compressor's reaction time when the signal exceeds the threshold, in microseconds. Value can range from 20 to 2000. @@ -39,6 +37,4 @@ The level above which compression is applied to the audio. Value can range from -60 to 0. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/AudioEffectDelay.xml b/doc/classes/AudioEffectDelay.xml index e55e0cb2ad..96bd43bc3b 100644 --- a/doc/classes/AudioEffectDelay.xml +++ b/doc/classes/AudioEffectDelay.xml @@ -9,8 +9,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="dry" type="float" setter="set_dry" getter="get_dry" default="1.0"> Output percent of original sound. At 0, only delayed sounds are output. Value can range from 0 to 1. @@ -52,6 +50,4 @@ Pan position for [code]tap2[/code]. Value can range from -1 (fully left) to 1 (fully right). </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/AudioEffectDistortion.xml b/doc/classes/AudioEffectDistortion.xml index 24a145b0f3..600ca93028 100644 --- a/doc/classes/AudioEffectDistortion.xml +++ b/doc/classes/AudioEffectDistortion.xml @@ -11,8 +11,6 @@ <tutorials> <link title="Audio buses">https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html</link> </tutorials> - <methods> - </methods> <members> <member name="drive" type="float" setter="set_drive" getter="get_drive" default="0.0"> Distortion power. Value can range from 0 to 1. diff --git a/doc/classes/AudioEffectEQ.xml b/doc/classes/AudioEffectEQ.xml index ddc1af0618..9d84f87cbe 100644 --- a/doc/classes/AudioEffectEQ.xml +++ b/doc/classes/AudioEffectEQ.xml @@ -32,6 +32,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/AudioEffectEQ10.xml b/doc/classes/AudioEffectEQ10.xml index c9fb03e23c..be89a0c4d6 100644 --- a/doc/classes/AudioEffectEQ10.xml +++ b/doc/classes/AudioEffectEQ10.xml @@ -20,8 +20,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/AudioEffectEQ21.xml b/doc/classes/AudioEffectEQ21.xml index 7ff8a1756e..0b1a8b2a1d 100644 --- a/doc/classes/AudioEffectEQ21.xml +++ b/doc/classes/AudioEffectEQ21.xml @@ -31,8 +31,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/AudioEffectEQ6.xml b/doc/classes/AudioEffectEQ6.xml index b47da5ed2a..9f7efad375 100644 --- a/doc/classes/AudioEffectEQ6.xml +++ b/doc/classes/AudioEffectEQ6.xml @@ -16,8 +16,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/AudioEffectFilter.xml b/doc/classes/AudioEffectFilter.xml index 293848d204..5b43646077 100644 --- a/doc/classes/AudioEffectFilter.xml +++ b/doc/classes/AudioEffectFilter.xml @@ -9,8 +9,6 @@ <tutorials> <link title="Audio buses">https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html</link> </tutorials> - <methods> - </methods> <members> <member name="cutoff_hz" type="float" setter="set_cutoff" getter="get_cutoff" default="2000.0"> Threshold frequency for the filter, in Hz. diff --git a/doc/classes/AudioEffectHighPassFilter.xml b/doc/classes/AudioEffectHighPassFilter.xml index 82a3c74941..e1bd7a3ff5 100644 --- a/doc/classes/AudioEffectHighPassFilter.xml +++ b/doc/classes/AudioEffectHighPassFilter.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/AudioEffectHighShelfFilter.xml b/doc/classes/AudioEffectHighShelfFilter.xml index 4ba31f9fc8..c572824448 100644 --- a/doc/classes/AudioEffectHighShelfFilter.xml +++ b/doc/classes/AudioEffectHighShelfFilter.xml @@ -8,8 +8,4 @@ <tutorials> <link title="Audio buses">https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html</link> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/AudioEffectInstance.xml b/doc/classes/AudioEffectInstance.xml index 9ab6028901..f9836226fc 100644 --- a/doc/classes/AudioEffectInstance.xml +++ b/doc/classes/AudioEffectInstance.xml @@ -6,8 +6,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/AudioEffectLimiter.xml b/doc/classes/AudioEffectLimiter.xml index 2fbea06aed..813429e42f 100644 --- a/doc/classes/AudioEffectLimiter.xml +++ b/doc/classes/AudioEffectLimiter.xml @@ -9,8 +9,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="ceiling_db" type="float" setter="set_ceiling_db" getter="get_ceiling_db" default="-0.1"> The waveform's maximum allowed value, in decibels. Value can range from -20 to -0.1. @@ -24,6 +22,4 @@ Threshold from which the limiter begins to be active, in decibels. Value can range from -30 to 0. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/AudioEffectLowPassFilter.xml b/doc/classes/AudioEffectLowPassFilter.xml index e7a66d03bd..ece2e57c96 100644 --- a/doc/classes/AudioEffectLowPassFilter.xml +++ b/doc/classes/AudioEffectLowPassFilter.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/AudioEffectLowShelfFilter.xml b/doc/classes/AudioEffectLowShelfFilter.xml index 078e7bf1a1..e78dbf9732 100644 --- a/doc/classes/AudioEffectLowShelfFilter.xml +++ b/doc/classes/AudioEffectLowShelfFilter.xml @@ -8,8 +8,4 @@ <tutorials> <link title="Audio buses">https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html</link> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/AudioEffectNotchFilter.xml b/doc/classes/AudioEffectNotchFilter.xml index 2393674a2e..f5e4abae96 100644 --- a/doc/classes/AudioEffectNotchFilter.xml +++ b/doc/classes/AudioEffectNotchFilter.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/AudioEffectPanner.xml b/doc/classes/AudioEffectPanner.xml index 19c4cd1457..858c48c3b6 100644 --- a/doc/classes/AudioEffectPanner.xml +++ b/doc/classes/AudioEffectPanner.xml @@ -8,13 +8,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="pan" type="float" setter="set_pan" getter="get_pan" default="0.0"> Pan position. Value can range from -1 (fully left) to 1 (fully right). </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/AudioEffectPhaser.xml b/doc/classes/AudioEffectPhaser.xml index b1d229e150..2855d12d51 100644 --- a/doc/classes/AudioEffectPhaser.xml +++ b/doc/classes/AudioEffectPhaser.xml @@ -9,8 +9,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="depth" type="float" setter="set_depth" getter="get_depth" default="1.0"> Governs how high the filter frequencies sweep. Low value will primarily affect bass frequencies. High value can sweep high into the treble. Value can range from 0.1 to 4. @@ -28,6 +26,4 @@ Adjusts the rate in Hz at which the effect sweeps up and down across the frequency range. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/AudioEffectPitchShift.xml b/doc/classes/AudioEffectPitchShift.xml index 9c28a01650..0c323fd85c 100644 --- a/doc/classes/AudioEffectPitchShift.xml +++ b/doc/classes/AudioEffectPitchShift.xml @@ -9,8 +9,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="fft_size" type="int" setter="set_fft_size" getter="get_fft_size" enum="AudioEffectPitchShift.FFTSize" default="3"> The size of the [url=https://en.wikipedia.org/wiki/Fast_Fourier_transform]Fast Fourier transform[/url] buffer. Higher values smooth out the effect over time, but have greater latency. The effects of this higher latency are especially noticeable on sounds that have sudden amplitude changes. diff --git a/doc/classes/AudioEffectRecord.xml b/doc/classes/AudioEffectRecord.xml index 9656718ee8..b32206726d 100644 --- a/doc/classes/AudioEffectRecord.xml +++ b/doc/classes/AudioEffectRecord.xml @@ -36,6 +36,4 @@ Specifies the format in which the sample will be recorded. See [enum AudioStreamSample.Format] for available formats. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/AudioEffectReverb.xml b/doc/classes/AudioEffectReverb.xml index fbe68cde0e..d931720e88 100644 --- a/doc/classes/AudioEffectReverb.xml +++ b/doc/classes/AudioEffectReverb.xml @@ -10,8 +10,6 @@ <tutorials> <link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link> </tutorials> - <methods> - </methods> <members> <member name="damping" type="float" setter="set_damping" getter="get_damping" default="0.5"> Defines how reflective the imaginary room's walls are. Value can range from 0 to 1. @@ -38,6 +36,4 @@ Output percent of modified sound. At 0, only original sound is outputted. Value can range from 0 to 1. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/AudioEffectSpectrumAnalyzer.xml b/doc/classes/AudioEffectSpectrumAnalyzer.xml index 10d29ff8ab..b2f2c55aa2 100644 --- a/doc/classes/AudioEffectSpectrumAnalyzer.xml +++ b/doc/classes/AudioEffectSpectrumAnalyzer.xml @@ -11,8 +11,6 @@ <link title="https://godotengine.org/asset-library/asset/528">Audio Spectrum Demo</link> <link title="https://godotengine.org/article/godot-32-will-get-new-audio-features">Godot 3.2 will get new audio features</link> </tutorials> - <methods> - </methods> <members> <member name="buffer_length" type="float" setter="set_buffer_length" getter="get_buffer_length" default="2.0"> The length of the buffer to keep (in seconds). Higher values keep data around for longer, but require more memory. diff --git a/doc/classes/AudioEffectStereoEnhance.xml b/doc/classes/AudioEffectStereoEnhance.xml index 663e3e982c..e82892f355 100644 --- a/doc/classes/AudioEffectStereoEnhance.xml +++ b/doc/classes/AudioEffectStereoEnhance.xml @@ -6,8 +6,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="pan_pullout" type="float" setter="set_pan_pullout" getter="get_pan_pullout" default="1.0"> </member> @@ -16,6 +14,4 @@ <member name="time_pullout_ms" type="float" setter="set_time_pullout" getter="get_time_pullout" default="0.0"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/AudioListener2D.xml b/doc/classes/AudioListener2D.xml index 86dc870926..a7cdd0348c 100644 --- a/doc/classes/AudioListener2D.xml +++ b/doc/classes/AudioListener2D.xml @@ -30,6 +30,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/AudioListener3D.xml b/doc/classes/AudioListener3D.xml index ed1f7fcc8f..4a56071b57 100644 --- a/doc/classes/AudioListener3D.xml +++ b/doc/classes/AudioListener3D.xml @@ -35,6 +35,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/AudioStream.xml b/doc/classes/AudioStream.xml index 32e51603ee..cff7199c4a 100644 --- a/doc/classes/AudioStream.xml +++ b/doc/classes/AudioStream.xml @@ -46,6 +46,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/AudioStreamGenerator.xml b/doc/classes/AudioStreamGenerator.xml index 8464bc8a85..05406846ce 100644 --- a/doc/classes/AudioStreamGenerator.xml +++ b/doc/classes/AudioStreamGenerator.xml @@ -12,8 +12,6 @@ <link title="Audio Generator Demo">https://godotengine.org/asset-library/asset/526</link> <link title="https://godotengine.org/article/godot-32-will-get-new-audio-features">Godot 3.2 will get new audio features</link> </tutorials> - <methods> - </methods> <members> <member name="buffer_length" type="float" setter="set_buffer_length" getter="get_buffer_length" default="0.5"> The length of the buffer to generate (in seconds). Lower values result in less latency, but require the script to generate audio data faster, resulting in increased CPU usage and more risk for audio cracking if the CPU can't keep up. @@ -24,6 +22,4 @@ According to the [url=https://en.wikipedia.org/wiki/Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], there is no quality difference to human hearing when going past 40,000 Hz (since most humans can only hear up to ~20,000 Hz, often less). If you are generating lower-pitched sounds such as voices, lower sample rates such as [code]32000[/code] or [code]22050[/code] may be usable with no loss in quality. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/AudioStreamGeneratorPlayback.xml b/doc/classes/AudioStreamGeneratorPlayback.xml index d99d041053..7520d5d97a 100644 --- a/doc/classes/AudioStreamGeneratorPlayback.xml +++ b/doc/classes/AudioStreamGeneratorPlayback.xml @@ -50,6 +50,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/AudioStreamMicrophone.xml b/doc/classes/AudioStreamMicrophone.xml index e73e50e3a9..13b0c2cd67 100644 --- a/doc/classes/AudioStreamMicrophone.xml +++ b/doc/classes/AudioStreamMicrophone.xml @@ -6,8 +6,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/AudioStreamPlayback.xml b/doc/classes/AudioStreamPlayback.xml index 25f3e076b4..bcf0b55b31 100644 --- a/doc/classes/AudioStreamPlayback.xml +++ b/doc/classes/AudioStreamPlayback.xml @@ -51,6 +51,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/AudioStreamPlaybackResampled.xml b/doc/classes/AudioStreamPlaybackResampled.xml index faa563fdd8..d60d1acb7a 100644 --- a/doc/classes/AudioStreamPlaybackResampled.xml +++ b/doc/classes/AudioStreamPlaybackResampled.xml @@ -6,8 +6,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/AudioStreamPlayer2D.xml b/doc/classes/AudioStreamPlayer2D.xml index e36a428499..9c76eefbf9 100644 --- a/doc/classes/AudioStreamPlayer2D.xml +++ b/doc/classes/AudioStreamPlayer2D.xml @@ -87,6 +87,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/AudioStreamRandomPitch.xml b/doc/classes/AudioStreamRandomPitch.xml index 7e93b3267c..0f580699e9 100644 --- a/doc/classes/AudioStreamRandomPitch.xml +++ b/doc/classes/AudioStreamRandomPitch.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="audio_stream" type="AudioStream" setter="set_audio_stream" getter="get_audio_stream"> The current [AudioStream]. @@ -18,6 +16,4 @@ The intensity of random pitch variation. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/BackBufferCopy.xml b/doc/classes/BackBufferCopy.xml index 55ee573811..6f1dd9fc76 100644 --- a/doc/classes/BackBufferCopy.xml +++ b/doc/classes/BackBufferCopy.xml @@ -9,8 +9,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="copy_mode" type="int" setter="set_copy_mode" getter="get_copy_mode" enum="BackBufferCopy.CopyMode" default="1"> Buffer mode. See [enum CopyMode] constants. diff --git a/doc/classes/BitMap.xml b/doc/classes/BitMap.xml index 9a349c957f..0997896260 100644 --- a/doc/classes/BitMap.xml +++ b/doc/classes/BitMap.xml @@ -81,6 +81,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/Bone2D.xml b/doc/classes/Bone2D.xml index f9f3ea21f1..ef0778682f 100644 --- a/doc/classes/Bone2D.xml +++ b/doc/classes/Bone2D.xml @@ -90,6 +90,4 @@ Rest transform of the bone. You can reset the node's transforms to this value using [method apply_rest]. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/BoneAttachment3D.xml b/doc/classes/BoneAttachment3D.xml index b493002c70..a1670430e6 100644 --- a/doc/classes/BoneAttachment3D.xml +++ b/doc/classes/BoneAttachment3D.xml @@ -78,6 +78,4 @@ The name of the attached bone. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/BoxMesh.xml b/doc/classes/BoxMesh.xml index dda5e2f1e5..af3365b6ea 100644 --- a/doc/classes/BoxMesh.xml +++ b/doc/classes/BoxMesh.xml @@ -10,8 +10,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="size" type="Vector3" setter="set_size" getter="get_size" default="Vector3(2, 2, 2)"> The box's width, height and depth. @@ -26,6 +24,4 @@ Number of extra edge loops inserted along the X axis. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/BoxShape3D.xml b/doc/classes/BoxShape3D.xml index 5704de905b..3bfded6512 100644 --- a/doc/classes/BoxShape3D.xml +++ b/doc/classes/BoxShape3D.xml @@ -11,13 +11,9 @@ <link title="3D Kinematic Character Demo">https://godotengine.org/asset-library/asset/126</link> <link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link> </tutorials> - <methods> - </methods> <members> <member name="size" type="Vector3" setter="set_size" getter="get_size" default="Vector3(2, 2, 2)"> The box's width, height and depth. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/ButtonGroup.xml b/doc/classes/ButtonGroup.xml index 302a213836..9229e69fa7 100644 --- a/doc/classes/ButtonGroup.xml +++ b/doc/classes/ButtonGroup.xml @@ -34,6 +34,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/Callable.xml b/doc/classes/Callable.xml index 5f5ef4f964..0a95836e96 100644 --- a/doc/classes/Callable.xml +++ b/doc/classes/Callable.xml @@ -168,6 +168,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/CallbackTweener.xml b/doc/classes/CallbackTweener.xml index fab5f06ba8..70709d269c 100644 --- a/doc/classes/CallbackTweener.xml +++ b/doc/classes/CallbackTweener.xml @@ -22,6 +22,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/CameraEffects.xml b/doc/classes/CameraEffects.xml index 7a874d31db..5cbd489143 100644 --- a/doc/classes/CameraEffects.xml +++ b/doc/classes/CameraEffects.xml @@ -9,8 +9,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="dof_blur_amount" type="float" setter="set_dof_blur_amount" getter="get_dof_blur_amount" default="0.1"> The amount of blur for both near and far depth-of-field effects. The amount of blur increases the radius of the blur effect, making the affected area blurrier. However, If the amount is too high, you might start to see lines appearing, especially when using a low quality blur. @@ -40,6 +38,4 @@ If [code]true[/code], overrides the manual or automatic exposure defined in the [Environment] with the value in [member override_exposure]. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/CameraTexture.xml b/doc/classes/CameraTexture.xml index c0730129a9..2030d3bb45 100644 --- a/doc/classes/CameraTexture.xml +++ b/doc/classes/CameraTexture.xml @@ -9,8 +9,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="camera_feed_id" type="int" setter="set_camera_feed_id" getter="get_camera_feed_id" default="0"> The ID of the [CameraFeed] for which we want to display the image. @@ -22,6 +20,4 @@ Which image within the [CameraFeed] we want access to, important if the camera image is split in a Y and CbCr component. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/CanvasGroup.xml b/doc/classes/CanvasGroup.xml index ceeda6c3f5..e9b2c9a915 100644 --- a/doc/classes/CanvasGroup.xml +++ b/doc/classes/CanvasGroup.xml @@ -6,8 +6,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="clear_margin" type="float" setter="set_clear_margin" getter="get_clear_margin" default="10.0"> </member> @@ -16,6 +14,4 @@ <member name="use_mipmaps" type="bool" setter="set_use_mipmaps" getter="is_using_mipmaps" default="false"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/CanvasItemMaterial.xml b/doc/classes/CanvasItemMaterial.xml index 780899bff7..3f9dd02e4c 100644 --- a/doc/classes/CanvasItemMaterial.xml +++ b/doc/classes/CanvasItemMaterial.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="blend_mode" type="int" setter="set_blend_mode" getter="get_blend_mode" enum="CanvasItemMaterial.BlendMode" default="0"> The manner in which a material's rendering is applied to underlying textures. diff --git a/doc/classes/CanvasLayer.xml b/doc/classes/CanvasLayer.xml index 616fb24a6f..2f99f94893 100644 --- a/doc/classes/CanvasLayer.xml +++ b/doc/classes/CanvasLayer.xml @@ -45,6 +45,4 @@ The layer's transform. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/CanvasModulate.xml b/doc/classes/CanvasModulate.xml index 3540fa423f..d5f85132a5 100644 --- a/doc/classes/CanvasModulate.xml +++ b/doc/classes/CanvasModulate.xml @@ -8,13 +8,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="color" type="Color" setter="set_color" getter="get_color" default="Color(1, 1, 1, 1)"> The tint color to apply. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/CanvasTexture.xml b/doc/classes/CanvasTexture.xml index f7147d9f0b..28a62ae1e1 100644 --- a/doc/classes/CanvasTexture.xml +++ b/doc/classes/CanvasTexture.xml @@ -6,8 +6,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="diffuse_texture" type="Texture2D" setter="set_diffuse_texture" getter="get_diffuse_texture"> </member> @@ -24,6 +22,4 @@ <member name="texture_repeat" type="int" setter="set_texture_repeat" getter="get_texture_repeat" enum="CanvasItem.TextureRepeat" default="0"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/CapsuleMesh.xml b/doc/classes/CapsuleMesh.xml index b8605ccaec..3b4e60ce93 100644 --- a/doc/classes/CapsuleMesh.xml +++ b/doc/classes/CapsuleMesh.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="height" type="float" setter="set_height" getter="get_height" default="3.0"> Total height of the capsule mesh (including the hemispherical ends). @@ -24,6 +22,4 @@ Number of rings along the height of the capsule. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/CapsuleShape2D.xml b/doc/classes/CapsuleShape2D.xml index 8ed7d56557..74db0da033 100644 --- a/doc/classes/CapsuleShape2D.xml +++ b/doc/classes/CapsuleShape2D.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="height" type="float" setter="set_height" getter="get_height" default="30.0"> The capsule's height. @@ -18,6 +16,4 @@ The capsule's radius. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/CapsuleShape3D.xml b/doc/classes/CapsuleShape3D.xml index c2b13224cf..8856ec3779 100644 --- a/doc/classes/CapsuleShape3D.xml +++ b/doc/classes/CapsuleShape3D.xml @@ -9,8 +9,6 @@ <tutorials> <link title="3D Physics Tests Demo">https://godotengine.org/asset-library/asset/675</link> </tutorials> - <methods> - </methods> <members> <member name="height" type="float" setter="set_height" getter="get_height" default="3.0"> The capsule's height. @@ -19,6 +17,4 @@ The capsule's radius. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/CenterContainer.xml b/doc/classes/CenterContainer.xml index 435f4eb06b..8f8a978f9e 100644 --- a/doc/classes/CenterContainer.xml +++ b/doc/classes/CenterContainer.xml @@ -8,13 +8,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="use_top_left" type="bool" setter="set_use_top_left" getter="is_using_top_left" default="false"> If [code]true[/code], centers children relative to the [CenterContainer]'s top left corner. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/CharFXTransform.xml b/doc/classes/CharFXTransform.xml index 1f63b530b1..b00031edf6 100644 --- a/doc/classes/CharFXTransform.xml +++ b/doc/classes/CharFXTransform.xml @@ -10,8 +10,6 @@ <link title="BBCode in RichTextLabel">https://docs.godotengine.org/en/latest/tutorials/gui/bbcode_in_richtextlabel.html</link> <link title="RichTextEffect test project (third-party)">https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project</link> </tutorials> - <methods> - </methods> <members> <member name="color" type="Color" setter="set_color" getter="get_color" default="Color(0, 0, 0, 1)"> The color the character will be drawn with. @@ -30,6 +28,12 @@ <member name="font" type="RID" setter="set_font" getter="get_font"> Font resource used to render glyph. </member> + <member name="glyph_count" type="int" setter="set_glyph_count" getter="get_glyph_count" default="0"> + Number of glyphs in the grapheme cluster. This value is set in the first glyph of a cluster. Setting this property won't affect drawing. + </member> + <member name="glyph_flags" type="int" setter="set_glyph_flags" getter="get_glyph_flags" default="0"> + Glyph flags. See [enum TextServer.GraphemeFlag] for more info. Setting this property won't affect drawing. + </member> <member name="glyph_index" type="int" setter="set_glyph_index" getter="get_glyph_index" default="0"> Font specific glyph index. </member> @@ -46,6 +50,4 @@ If [code]true[/code], the character will be drawn. If [code]false[/code], the character will be hidden. Characters around hidden characters will reflow to take the space of hidden characters. If this is not desired, set their [member color] to [code]Color(1, 1, 1, 0)[/code] instead. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/CharacterBody3D.xml b/doc/classes/CharacterBody3D.xml index f08a2cafea..fab845fea4 100644 --- a/doc/classes/CharacterBody3D.xml +++ b/doc/classes/CharacterBody3D.xml @@ -128,6 +128,4 @@ Direction vector used to determine what is a wall and what is a floor (or a ceiling), rather than a wall, when calling [method move_and_slide]. Defaults to [code]Vector3.UP[/code]. If set to [code]Vector3(0, 0, 0)[/code], everything is considered a wall. This is useful for topdown games. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/CheckBox.xml b/doc/classes/CheckBox.xml index f13a6ea34a..a674fa8339 100644 --- a/doc/classes/CheckBox.xml +++ b/doc/classes/CheckBox.xml @@ -9,14 +9,10 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="align" type="int" setter="set_text_align" getter="get_text_align" override="true" enum="Button.TextAlign" default="0" /> <member name="toggle_mode" type="bool" setter="set_toggle_mode" getter="is_toggle_mode" override="true" default="true" /> </members> - <constants> - </constants> <theme_items> <theme_item name="check_vadjust" data_type="constant" type="int" default="0"> The vertical offset used when rendering the check icons (in pixels). diff --git a/doc/classes/CheckButton.xml b/doc/classes/CheckButton.xml index a0a05bcb79..12bd493ae1 100644 --- a/doc/classes/CheckButton.xml +++ b/doc/classes/CheckButton.xml @@ -9,14 +9,10 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="align" type="int" setter="set_text_align" getter="get_text_align" override="true" enum="Button.TextAlign" default="0" /> <member name="toggle_mode" type="bool" setter="set_toggle_mode" getter="is_toggle_mode" override="true" default="true" /> </members> - <constants> - </constants> <theme_items> <theme_item name="check_vadjust" data_type="constant" type="int" default="0"> The vertical offset used when rendering the toggle icons (in pixels). diff --git a/doc/classes/CircleShape2D.xml b/doc/classes/CircleShape2D.xml index db889b0f1b..3969734d3f 100644 --- a/doc/classes/CircleShape2D.xml +++ b/doc/classes/CircleShape2D.xml @@ -8,13 +8,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="radius" type="float" setter="set_radius" getter="get_radius" default="10.0"> The circle's radius. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/ClassDB.xml b/doc/classes/ClassDB.xml index 62165a5fce..5f39fc48e0 100644 --- a/doc/classes/ClassDB.xml +++ b/doc/classes/ClassDB.xml @@ -199,6 +199,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/CodeHighlighter.xml b/doc/classes/CodeHighlighter.xml index 2b93188d10..064be0c29d 100644 --- a/doc/classes/CodeHighlighter.xml +++ b/doc/classes/CodeHighlighter.xml @@ -138,6 +138,4 @@ Sets the color for symbols. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/CollisionPolygon2D.xml b/doc/classes/CollisionPolygon2D.xml index 4607ab3fbd..cdaa0638ba 100644 --- a/doc/classes/CollisionPolygon2D.xml +++ b/doc/classes/CollisionPolygon2D.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="build_mode" type="int" setter="set_build_mode" getter="get_build_mode" enum="CollisionPolygon2D.BuildMode" default="0"> Collision build mode. Use one of the [enum BuildMode] constants. diff --git a/doc/classes/CollisionPolygon3D.xml b/doc/classes/CollisionPolygon3D.xml index cf0e55e712..b70f517da1 100644 --- a/doc/classes/CollisionPolygon3D.xml +++ b/doc/classes/CollisionPolygon3D.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="depth" type="float" setter="set_depth" getter="get_depth" default="1.0"> Length that the resulting collision extends in either direction perpendicular to its polygon. @@ -25,6 +23,4 @@ [b]Note:[/b] The returned value is a copy of the original. Methods which mutate the size or properties of the return value will not impact the original polygon. To change properties of the polygon, assign it to a temporary variable and make changes before reassigning the [code]polygon[/code] member. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/CollisionShape2D.xml b/doc/classes/CollisionShape2D.xml index c03eba82ff..5159b2b15b 100644 --- a/doc/classes/CollisionShape2D.xml +++ b/doc/classes/CollisionShape2D.xml @@ -12,8 +12,6 @@ <link title="2D Pong Demo">https://godotengine.org/asset-library/asset/121</link> <link title="2D Kinematic Character Demo">https://godotengine.org/asset-library/asset/113</link> </tutorials> - <methods> - </methods> <members> <member name="disabled" type="bool" setter="set_disabled" getter="is_disabled" default="false"> A disabled collision shape has no effect in the world. This property should be changed with [method Object.set_deferred]. @@ -28,6 +26,4 @@ The actual shape owned by this collision shape. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/CollisionShape3D.xml b/doc/classes/CollisionShape3D.xml index 9184b672ff..84e362c38b 100644 --- a/doc/classes/CollisionShape3D.xml +++ b/doc/classes/CollisionShape3D.xml @@ -35,6 +35,4 @@ The actual shape owned by this collision shape. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/ColorPickerButton.xml b/doc/classes/ColorPickerButton.xml index 6b5a9f2503..dcef1c55f7 100644 --- a/doc/classes/ColorPickerButton.xml +++ b/doc/classes/ColorPickerButton.xml @@ -52,8 +52,6 @@ </description> </signal> </signals> - <constants> - </constants> <theme_items> <theme_item name="bg" data_type="icon" type="Texture2D"> The background of the color preview rect on the button. diff --git a/doc/classes/ColorRect.xml b/doc/classes/ColorRect.xml index 84955fed8a..db0dfc705e 100644 --- a/doc/classes/ColorRect.xml +++ b/doc/classes/ColorRect.xml @@ -9,8 +9,6 @@ <tutorials> <link title="2D Dodge The Creeps Demo">https://godotengine.org/asset-library/asset/515</link> </tutorials> - <methods> - </methods> <members> <member name="color" type="Color" setter="set_color" getter="get_color" default="Color(1, 1, 1, 1)"> The fill color. @@ -24,6 +22,4 @@ [/codeblocks] </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/ConcavePolygonShape2D.xml b/doc/classes/ConcavePolygonShape2D.xml index 50632cd2c8..2ace8c72d7 100644 --- a/doc/classes/ConcavePolygonShape2D.xml +++ b/doc/classes/ConcavePolygonShape2D.xml @@ -9,13 +9,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="segments" type="PackedVector2Array" setter="set_segments" getter="get_segments" default="PackedVector2Array()"> The array of points that make up the [ConcavePolygonShape2D]'s line segments. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/ConcavePolygonShape3D.xml b/doc/classes/ConcavePolygonShape3D.xml index 907afa6367..ac569a8992 100644 --- a/doc/classes/ConcavePolygonShape3D.xml +++ b/doc/classes/ConcavePolygonShape3D.xml @@ -30,6 +30,4 @@ If set to [code]true[/code], collisions occur on both sides of the concave shape faces. Otherwise they occur only along the face normals. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/ConfigFile.xml b/doc/classes/ConfigFile.xml index ce976e3d8b..4f6f099ebd 100644 --- a/doc/classes/ConfigFile.xml +++ b/doc/classes/ConfigFile.xml @@ -222,6 +222,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/ConfirmationDialog.xml b/doc/classes/ConfirmationDialog.xml index 871082696c..352631da1d 100644 --- a/doc/classes/ConfirmationDialog.xml +++ b/doc/classes/ConfirmationDialog.xml @@ -30,6 +30,4 @@ <member name="size" type="Vector2i" setter="set_size" getter="get_size" override="true" default="Vector2i(200, 100)" /> <member name="title" type="String" setter="set_title" getter="get_title" override="true" default=""Please Confirm..."" /> </members> - <constants> - </constants> </class> diff --git a/doc/classes/ConvexPolygonShape2D.xml b/doc/classes/ConvexPolygonShape2D.xml index 243605e2b7..ec7583e68b 100644 --- a/doc/classes/ConvexPolygonShape2D.xml +++ b/doc/classes/ConvexPolygonShape2D.xml @@ -23,6 +23,4 @@ The polygon's list of vertices. Can be in either clockwise or counterclockwise order. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/ConvexPolygonShape3D.xml b/doc/classes/ConvexPolygonShape3D.xml index a5c86526b0..832e073665 100644 --- a/doc/classes/ConvexPolygonShape3D.xml +++ b/doc/classes/ConvexPolygonShape3D.xml @@ -9,13 +9,9 @@ <tutorials> <link title="3D Physics Tests Demo">https://godotengine.org/asset-library/asset/675</link> </tutorials> - <methods> - </methods> <members> <member name="points" type="PackedVector3Array" setter="set_points" getter="get_points" default="PackedVector3Array()"> The list of 3D points forming the convex polygon shape. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/Crypto.xml b/doc/classes/Crypto.xml index 3d7ca956da..a87c8bfab2 100644 --- a/doc/classes/Crypto.xml +++ b/doc/classes/Crypto.xml @@ -171,6 +171,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/CryptoKey.xml b/doc/classes/CryptoKey.xml index afe2c6b301..5665c629a8 100644 --- a/doc/classes/CryptoKey.xml +++ b/doc/classes/CryptoKey.xml @@ -51,6 +51,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/Cubemap.xml b/doc/classes/Cubemap.xml index 9e31ee8a92..886dc36bdf 100644 --- a/doc/classes/Cubemap.xml +++ b/doc/classes/Cubemap.xml @@ -10,8 +10,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/CubemapArray.xml b/doc/classes/CubemapArray.xml index 627baf79e0..9f2231886d 100644 --- a/doc/classes/CubemapArray.xml +++ b/doc/classes/CubemapArray.xml @@ -6,8 +6,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/Curve2D.xml b/doc/classes/Curve2D.xml index c02b0f7ead..8c5b39a895 100644 --- a/doc/classes/Curve2D.xml +++ b/doc/classes/Curve2D.xml @@ -156,6 +156,4 @@ The distance in pixels between two adjacent cached points. Changing it forces the cache to be recomputed the next time the [method get_baked_points] or [method get_baked_length] function is called. The smaller the distance, the more points in the cache and the more memory it will consume, so use with care. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/Curve3D.xml b/doc/classes/Curve3D.xml index 5839ccba02..30e9e2ac68 100644 --- a/doc/classes/Curve3D.xml +++ b/doc/classes/Curve3D.xml @@ -198,6 +198,4 @@ If [code]true[/code], the curve will bake up vectors used for orientation. This is used when [member PathFollow3D.rotation_mode] is set to [constant PathFollow3D.ROTATION_ORIENTED]. Changing it forces the cache to be recomputed. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/CurveTexture.xml b/doc/classes/CurveTexture.xml index 54065fe0f9..fe75f029f0 100644 --- a/doc/classes/CurveTexture.xml +++ b/doc/classes/CurveTexture.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="curve" type="Curve" setter="set_curve" getter="get_curve"> The [code]curve[/code] rendered onto the texture. diff --git a/doc/classes/CurveXYZTexture.xml b/doc/classes/CurveXYZTexture.xml index 9afeb58060..815653e987 100644 --- a/doc/classes/CurveXYZTexture.xml +++ b/doc/classes/CurveXYZTexture.xml @@ -6,8 +6,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="curve_x" type="Curve" setter="set_curve_x" getter="get_curve_x"> </member> @@ -18,6 +16,4 @@ <member name="width" type="int" setter="set_width" getter="get_width" default="2048"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/CylinderMesh.xml b/doc/classes/CylinderMesh.xml index 827fb5c10c..077435990b 100644 --- a/doc/classes/CylinderMesh.xml +++ b/doc/classes/CylinderMesh.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="bottom_radius" type="float" setter="set_bottom_radius" getter="get_bottom_radius" default="1.0"> Bottom radius of the cylinder. If set to [code]0.0[/code], the bottom faces will not be generated, resulting in a conic shape. @@ -27,6 +25,4 @@ Top radius of the cylinder. If set to [code]0.0[/code], the top faces will not be generated, resulting in a conic shape. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/CylinderShape3D.xml b/doc/classes/CylinderShape3D.xml index 99334ceae6..d40b96710b 100644 --- a/doc/classes/CylinderShape3D.xml +++ b/doc/classes/CylinderShape3D.xml @@ -11,8 +11,6 @@ <link title="3D Physics Tests Demo">https://godotengine.org/asset-library/asset/675</link> <link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link> </tutorials> - <methods> - </methods> <members> <member name="height" type="float" setter="set_height" getter="get_height" default="2.0"> The cylinder's height. @@ -21,6 +19,4 @@ The cylinder's radius. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/DTLSServer.xml b/doc/classes/DTLSServer.xml index 627a7a65a5..16e65eaadf 100644 --- a/doc/classes/DTLSServer.xml +++ b/doc/classes/DTLSServer.xml @@ -164,6 +164,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/DampedSpringJoint2D.xml b/doc/classes/DampedSpringJoint2D.xml index e1b6bb6866..76e38d5271 100644 --- a/doc/classes/DampedSpringJoint2D.xml +++ b/doc/classes/DampedSpringJoint2D.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="damping" type="float" setter="set_damping" getter="get_damping" default="1.0"> The spring joint's damping ratio. A value between [code]0[/code] and [code]1[/code]. When the two bodies move into different directions the system tries to align them to the spring axis again. A high [code]damping[/code] value forces the attached bodies to align faster. @@ -24,6 +22,4 @@ The higher the value, the less the bodies attached to the joint will deform it. The joint applies an opposing force to the bodies, the product of the stiffness multiplied by the size difference from its resting length. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/Dictionary.xml b/doc/classes/Dictionary.xml index a6b97f3a75..0575ea3eef 100644 --- a/doc/classes/Dictionary.xml +++ b/doc/classes/Dictionary.xml @@ -329,6 +329,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/DirectionalLight2D.xml b/doc/classes/DirectionalLight2D.xml index a6eb780159..317cf6e66c 100644 --- a/doc/classes/DirectionalLight2D.xml +++ b/doc/classes/DirectionalLight2D.xml @@ -6,8 +6,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="height" type="float" setter="set_height" getter="get_height" default="0.0"> The height of the light. Used with 2D normal mapping. @@ -15,6 +13,4 @@ <member name="max_distance" type="float" setter="set_max_distance" getter="get_max_distance" default="10000.0"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/DirectionalLight3D.xml b/doc/classes/DirectionalLight3D.xml index e3badea0f4..7c006ad3a6 100644 --- a/doc/classes/DirectionalLight3D.xml +++ b/doc/classes/DirectionalLight3D.xml @@ -9,8 +9,6 @@ <tutorials> <link title="Lights and shadows">https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html</link> </tutorials> - <methods> - </methods> <members> <member name="directional_shadow_blend_splits" type="bool" setter="set_blend_splits" getter="is_blend_splits_enabled" default="false"> If [code]true[/code], shadow detail is sacrificed in exchange for smoother transitions between splits. diff --git a/doc/classes/Directory.xml b/doc/classes/Directory.xml index e8e5a286b4..c8fda27989 100644 --- a/doc/classes/Directory.xml +++ b/doc/classes/Directory.xml @@ -192,6 +192,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/EditorCommandPalette.xml b/doc/classes/EditorCommandPalette.xml index 1d3b21255f..01b8593f89 100644 --- a/doc/classes/EditorCommandPalette.xml +++ b/doc/classes/EditorCommandPalette.xml @@ -51,6 +51,4 @@ <members> <member name="dialog_hide_on_ok" type="bool" setter="set_hide_on_ok" getter="get_hide_on_ok" override="true" default="false" /> </members> - <constants> - </constants> </class> diff --git a/doc/classes/EditorDebuggerPlugin.xml b/doc/classes/EditorDebuggerPlugin.xml index d67df8dfee..0773e176b3 100644 --- a/doc/classes/EditorDebuggerPlugin.xml +++ b/doc/classes/EditorDebuggerPlugin.xml @@ -84,6 +84,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/EditorExportPlugin.xml b/doc/classes/EditorExportPlugin.xml index 16c50b4d3e..fca7bb350d 100644 --- a/doc/classes/EditorExportPlugin.xml +++ b/doc/classes/EditorExportPlugin.xml @@ -110,6 +110,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/EditorFileSystem.xml b/doc/classes/EditorFileSystem.xml index 6befe32e7a..859480078b 100644 --- a/doc/classes/EditorFileSystem.xml +++ b/doc/classes/EditorFileSystem.xml @@ -93,6 +93,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/EditorFileSystemDirectory.xml b/doc/classes/EditorFileSystemDirectory.xml index a8f94101a7..6a0a94a4c4 100644 --- a/doc/classes/EditorFileSystemDirectory.xml +++ b/doc/classes/EditorFileSystemDirectory.xml @@ -103,6 +103,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/EditorImportPlugin.xml b/doc/classes/EditorImportPlugin.xml index da6738d6b7..f20f4adcdf 100644 --- a/doc/classes/EditorImportPlugin.xml +++ b/doc/classes/EditorImportPlugin.xml @@ -219,6 +219,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/EditorInspector.xml b/doc/classes/EditorInspector.xml index 515c4b4d32..0c47298180 100644 --- a/doc/classes/EditorInspector.xml +++ b/doc/classes/EditorInspector.xml @@ -9,8 +9,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="scroll_horizontal_enabled" type="bool" setter="set_enable_h_scroll" getter="is_h_scroll_enabled" override="true" default="false" /> </members> @@ -66,6 +64,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/EditorInspectorPlugin.xml b/doc/classes/EditorInspectorPlugin.xml index ee93379210..17397b80bf 100644 --- a/doc/classes/EditorInspectorPlugin.xml +++ b/doc/classes/EditorInspectorPlugin.xml @@ -80,6 +80,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/EditorInterface.xml b/doc/classes/EditorInterface.xml index 8558f4b9f7..ad878aad80 100644 --- a/doc/classes/EditorInterface.xml +++ b/doc/classes/EditorInterface.xml @@ -238,6 +238,4 @@ If [code]true[/code], enables distraction-free mode which hides side docks to increase the space available for the main view. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/EditorNode3DGizmo.xml b/doc/classes/EditorNode3DGizmo.xml index 91e024cc1c..a2eac01ae8 100644 --- a/doc/classes/EditorNode3DGizmo.xml +++ b/doc/classes/EditorNode3DGizmo.xml @@ -198,6 +198,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/EditorNode3DGizmoPlugin.xml b/doc/classes/EditorNode3DGizmoPlugin.xml index 4ba455a336..424d5dd310 100644 --- a/doc/classes/EditorNode3DGizmoPlugin.xml +++ b/doc/classes/EditorNode3DGizmoPlugin.xml @@ -195,6 +195,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/EditorPaths.xml b/doc/classes/EditorPaths.xml index 28a8314857..92a2cff27f 100644 --- a/doc/classes/EditorPaths.xml +++ b/doc/classes/EditorPaths.xml @@ -33,6 +33,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/EditorProperty.xml b/doc/classes/EditorProperty.xml index 822bcfd255..6af6507606 100644 --- a/doc/classes/EditorProperty.xml +++ b/doc/classes/EditorProperty.xml @@ -149,6 +149,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/EditorResourceConversionPlugin.xml b/doc/classes/EditorResourceConversionPlugin.xml index 8543afa4ae..820c7775f7 100644 --- a/doc/classes/EditorResourceConversionPlugin.xml +++ b/doc/classes/EditorResourceConversionPlugin.xml @@ -25,6 +25,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/EditorResourcePicker.xml b/doc/classes/EditorResourcePicker.xml index a0f2df1f0c..9c490cbb3e 100644 --- a/doc/classes/EditorResourcePicker.xml +++ b/doc/classes/EditorResourcePicker.xml @@ -67,6 +67,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/EditorResourcePreview.xml b/doc/classes/EditorResourcePreview.xml index c2693b4e1e..4dc46945cf 100644 --- a/doc/classes/EditorResourcePreview.xml +++ b/doc/classes/EditorResourcePreview.xml @@ -62,6 +62,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/EditorResourcePreviewGenerator.xml b/doc/classes/EditorResourcePreviewGenerator.xml index 033e03c5b5..53c692aad9 100644 --- a/doc/classes/EditorResourcePreviewGenerator.xml +++ b/doc/classes/EditorResourcePreviewGenerator.xml @@ -51,6 +51,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/EditorSceneImporterMesh.xml b/doc/classes/EditorSceneImporterMesh.xml index c0c53ff255..5d57a76d5f 100644 --- a/doc/classes/EditorSceneImporterMesh.xml +++ b/doc/classes/EditorSceneImporterMesh.xml @@ -181,6 +181,4 @@ <member name="_data" type="Dictionary" setter="_set_data" getter="_get_data" default="{"surfaces": []}"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/EditorSceneImporterMeshNode3D.xml b/doc/classes/EditorSceneImporterMeshNode3D.xml index 1e459c1cee..848448110e 100644 --- a/doc/classes/EditorSceneImporterMeshNode3D.xml +++ b/doc/classes/EditorSceneImporterMeshNode3D.xml @@ -6,8 +6,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="mesh" type="EditorSceneImporterMesh" setter="set_mesh" getter="get_mesh"> </member> @@ -16,6 +14,4 @@ <member name="skin" type="Skin" setter="set_skin" getter="get_skin"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/EditorScenePostImport.xml b/doc/classes/EditorScenePostImport.xml index 43ca3db5fa..241531c35f 100644 --- a/doc/classes/EditorScenePostImport.xml +++ b/doc/classes/EditorScenePostImport.xml @@ -69,6 +69,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/EditorScript.xml b/doc/classes/EditorScript.xml index 6d793fe961..a2508118c6 100644 --- a/doc/classes/EditorScript.xml +++ b/doc/classes/EditorScript.xml @@ -61,6 +61,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/EditorScriptPicker.xml b/doc/classes/EditorScriptPicker.xml index 8334676d92..6c0538a5ab 100644 --- a/doc/classes/EditorScriptPicker.xml +++ b/doc/classes/EditorScriptPicker.xml @@ -9,13 +9,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="script_owner" type="Node" setter="set_script_owner" getter="get_script_owner"> The owner [Node] of the script property that holds the edited resource. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/EditorSelection.xml b/doc/classes/EditorSelection.xml index 69ae865d5d..28c8ff7d7f 100644 --- a/doc/classes/EditorSelection.xml +++ b/doc/classes/EditorSelection.xml @@ -51,6 +51,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/EditorSpinSlider.xml b/doc/classes/EditorSpinSlider.xml index b86e5e5c6e..9341b514c7 100644 --- a/doc/classes/EditorSpinSlider.xml +++ b/doc/classes/EditorSpinSlider.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="flat" type="bool" setter="set_flat" getter="is_flat" default="false"> </member> @@ -22,6 +20,4 @@ The suffix to display after the value (in a faded color). This should generally be a plural word. You may have to use an abbreviation if the suffix is too long to be displayed. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/EditorSyntaxHighlighter.xml b/doc/classes/EditorSyntaxHighlighter.xml index 394a4ada46..8880ce4d44 100644 --- a/doc/classes/EditorSyntaxHighlighter.xml +++ b/doc/classes/EditorSyntaxHighlighter.xml @@ -23,6 +23,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/EditorTranslationParserPlugin.xml b/doc/classes/EditorTranslationParserPlugin.xml index 94e96e985f..de8204def3 100644 --- a/doc/classes/EditorTranslationParserPlugin.xml +++ b/doc/classes/EditorTranslationParserPlugin.xml @@ -118,6 +118,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/EditorVCSInterface.xml b/doc/classes/EditorVCSInterface.xml index 5dd4901e3e..bd932bede4 100644 --- a/doc/classes/EditorVCSInterface.xml +++ b/doc/classes/EditorVCSInterface.xml @@ -94,6 +94,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/EncodedObjectAsID.xml b/doc/classes/EncodedObjectAsID.xml index e3e36590a3..fb056f4631 100644 --- a/doc/classes/EncodedObjectAsID.xml +++ b/doc/classes/EncodedObjectAsID.xml @@ -9,13 +9,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="object_id" type="int" setter="set_object_id" getter="get_object_id" default="0"> The [Object] identifier stored in this [EncodedObjectAsID] instance. The object instance can be retrieved with [method @GlobalScope.instance_from_id]. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/Engine.xml b/doc/classes/Engine.xml index 36590093bd..6e22c58024 100644 --- a/doc/classes/Engine.xml +++ b/doc/classes/Engine.xml @@ -198,6 +198,4 @@ Controls how fast or slow the in-game clock ticks versus the real life one. It defaults to 1.0. A value of 2.0 means the game moves twice as fast as real life, whilst a value of 0.5 means the game moves at half the regular speed. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/EngineDebugger.xml b/doc/classes/EngineDebugger.xml index 30d5193384..861053b1c9 100644 --- a/doc/classes/EngineDebugger.xml +++ b/doc/classes/EngineDebugger.xml @@ -98,6 +98,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/Expression.xml b/doc/classes/Expression.xml index 809a5bb80c..f0b0775753 100644 --- a/doc/classes/Expression.xml +++ b/doc/classes/Expression.xml @@ -83,6 +83,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/FileSystemDock.xml b/doc/classes/FileSystemDock.xml index a164415245..b6e708cc03 100644 --- a/doc/classes/FileSystemDock.xml +++ b/doc/classes/FileSystemDock.xml @@ -52,6 +52,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/Font.xml b/doc/classes/Font.xml index aa70856e32..e8ff0f60ec 100644 --- a/doc/classes/Font.xml +++ b/doc/classes/Font.xml @@ -285,6 +285,4 @@ Default font [url=https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg]variation coordinates[/url]. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/FontData.xml b/doc/classes/FontData.xml index 384d7c81f4..a814685388 100644 --- a/doc/classes/FontData.xml +++ b/doc/classes/FontData.xml @@ -643,6 +643,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/GPUParticlesAttractor3D.xml b/doc/classes/GPUParticlesAttractor3D.xml index 111827d294..7de52eedd7 100644 --- a/doc/classes/GPUParticlesAttractor3D.xml +++ b/doc/classes/GPUParticlesAttractor3D.xml @@ -6,8 +6,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="attenuation" type="float" setter="set_attenuation" getter="get_attenuation" default="1.0"> </member> @@ -18,6 +16,4 @@ <member name="strength" type="float" setter="set_strength" getter="get_strength" default="1.0"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/GPUParticlesAttractorBox.xml b/doc/classes/GPUParticlesAttractorBox.xml index 49e6111c29..93fdc45e56 100644 --- a/doc/classes/GPUParticlesAttractorBox.xml +++ b/doc/classes/GPUParticlesAttractorBox.xml @@ -6,12 +6,8 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="extents" type="Vector3" setter="set_extents" getter="get_extents" default="Vector3(1, 1, 1)"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/GPUParticlesAttractorSphere.xml b/doc/classes/GPUParticlesAttractorSphere.xml index 6984427a96..4398de55e9 100644 --- a/doc/classes/GPUParticlesAttractorSphere.xml +++ b/doc/classes/GPUParticlesAttractorSphere.xml @@ -6,12 +6,8 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="radius" type="float" setter="set_radius" getter="get_radius" default="1.0"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/GPUParticlesAttractorVectorField.xml b/doc/classes/GPUParticlesAttractorVectorField.xml index 7364a4b09f..e164343528 100644 --- a/doc/classes/GPUParticlesAttractorVectorField.xml +++ b/doc/classes/GPUParticlesAttractorVectorField.xml @@ -6,14 +6,10 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="extents" type="Vector3" setter="set_extents" getter="get_extents" default="Vector3(1, 1, 1)"> </member> <member name="texture" type="Texture3D" setter="set_texture" getter="get_texture"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/GPUParticlesCollision3D.xml b/doc/classes/GPUParticlesCollision3D.xml index dce9a32fc4..1a7901839c 100644 --- a/doc/classes/GPUParticlesCollision3D.xml +++ b/doc/classes/GPUParticlesCollision3D.xml @@ -6,12 +6,8 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="cull_mask" type="int" setter="set_cull_mask" getter="get_cull_mask" default="4294967295"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/GPUParticlesCollisionBox.xml b/doc/classes/GPUParticlesCollisionBox.xml index 58de18556e..d2bf4ef538 100644 --- a/doc/classes/GPUParticlesCollisionBox.xml +++ b/doc/classes/GPUParticlesCollisionBox.xml @@ -6,12 +6,8 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="extents" type="Vector3" setter="set_extents" getter="get_extents" default="Vector3(1, 1, 1)"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/GPUParticlesCollisionHeightField.xml b/doc/classes/GPUParticlesCollisionHeightField.xml index 0ddddda8e4..99b2ad3ce0 100644 --- a/doc/classes/GPUParticlesCollisionHeightField.xml +++ b/doc/classes/GPUParticlesCollisionHeightField.xml @@ -6,8 +6,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="extents" type="Vector3" setter="set_extents" getter="get_extents" default="Vector3(1, 1, 1)"> </member> diff --git a/doc/classes/GPUParticlesCollisionSDF.xml b/doc/classes/GPUParticlesCollisionSDF.xml index 7ef6f5f3cd..8d798a9d28 100644 --- a/doc/classes/GPUParticlesCollisionSDF.xml +++ b/doc/classes/GPUParticlesCollisionSDF.xml @@ -6,8 +6,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="extents" type="Vector3" setter="set_extents" getter="get_extents" default="Vector3(1, 1, 1)"> </member> diff --git a/doc/classes/GPUParticlesCollisionSphere.xml b/doc/classes/GPUParticlesCollisionSphere.xml index 41150960d2..ddb2391fd9 100644 --- a/doc/classes/GPUParticlesCollisionSphere.xml +++ b/doc/classes/GPUParticlesCollisionSphere.xml @@ -6,12 +6,8 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="radius" type="float" setter="set_radius" getter="get_radius" default="1.0"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/Geometry3D.xml b/doc/classes/Geometry3D.xml index 9d0234529a..5b2e065d1a 100644 --- a/doc/classes/Geometry3D.xml +++ b/doc/classes/Geometry3D.xml @@ -125,6 +125,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/Gradient.xml b/doc/classes/Gradient.xml index a9577fda90..93cef07b79 100644 --- a/doc/classes/Gradient.xml +++ b/doc/classes/Gradient.xml @@ -76,6 +76,4 @@ Gradient's offsets returned as a [PackedFloat32Array]. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/GradientTexture.xml b/doc/classes/GradientTexture.xml index 44da042dd4..0f0f0b1a37 100644 --- a/doc/classes/GradientTexture.xml +++ b/doc/classes/GradientTexture.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="gradient" type="Gradient" setter="set_gradient" getter="get_gradient"> The [Gradient] that will be used to fill the texture. @@ -21,6 +19,4 @@ The number of color samples that will be obtained from the [Gradient]. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/GraphEdit.xml b/doc/classes/GraphEdit.xml index c870026d58..2213b9b8b2 100644 --- a/doc/classes/GraphEdit.xml +++ b/doc/classes/GraphEdit.xml @@ -287,8 +287,6 @@ </description> </signal> </signals> - <constants> - </constants> <theme_items> <theme_item name="activity" data_type="color" type="Color" default="Color(1, 1, 1, 1)"> </theme_item> diff --git a/doc/classes/GridContainer.xml b/doc/classes/GridContainer.xml index 34e7cbcd79..758bab465d 100644 --- a/doc/classes/GridContainer.xml +++ b/doc/classes/GridContainer.xml @@ -11,15 +11,11 @@ <tutorials> <link title="OS Test Demo">https://godotengine.org/asset-library/asset/677</link> </tutorials> - <methods> - </methods> <members> <member name="columns" type="int" setter="set_columns" getter="get_columns" default="1"> The number of columns in the [GridContainer]. If modified, [GridContainer] reorders its Control-derived children to accommodate the new layout. </member> </members> - <constants> - </constants> <theme_items> <theme_item name="hseparation" data_type="constant" type="int" default="4"> The horizontal separation of children nodes. diff --git a/doc/classes/GrooveJoint2D.xml b/doc/classes/GrooveJoint2D.xml index 643b7aefea..1683842d65 100644 --- a/doc/classes/GrooveJoint2D.xml +++ b/doc/classes/GrooveJoint2D.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="initial_offset" type="float" setter="set_initial_offset" getter="get_initial_offset" default="25.0"> The body B's initial anchor position defined by the joint's origin and a local offset [member initial_offset] along the joint's Y axis (along the groove). @@ -18,6 +16,4 @@ The groove's length. The groove is from the joint's origin towards [member length] along the joint's local Y axis. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/HBoxContainer.xml b/doc/classes/HBoxContainer.xml index 9c3efb384e..ce254d8a15 100644 --- a/doc/classes/HBoxContainer.xml +++ b/doc/classes/HBoxContainer.xml @@ -8,10 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> <theme_items> <theme_item name="separation" data_type="constant" type="int" default="4"> The horizontal space between the [HBoxContainer]'s elements. diff --git a/doc/classes/HMACContext.xml b/doc/classes/HMACContext.xml index 88d3c5e2f3..69ad194fe0 100644 --- a/doc/classes/HMACContext.xml +++ b/doc/classes/HMACContext.xml @@ -77,6 +77,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/HScrollBar.xml b/doc/classes/HScrollBar.xml index 36ff070a37..fa9961710f 100644 --- a/doc/classes/HScrollBar.xml +++ b/doc/classes/HScrollBar.xml @@ -8,10 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> <theme_items> <theme_item name="decrement" data_type="icon" type="Texture2D"> Icon used as a button to scroll the [ScrollBar] left. Supports custom step using the [member ScrollBar.custom_step] property. diff --git a/doc/classes/HSeparator.xml b/doc/classes/HSeparator.xml index 24495d208e..5a1011525c 100644 --- a/doc/classes/HSeparator.xml +++ b/doc/classes/HSeparator.xml @@ -8,10 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> <theme_items> <theme_item name="separation" data_type="constant" type="int" default="4"> The height of the area covered by the separator. Effectively works like a minimum height. diff --git a/doc/classes/HSlider.xml b/doc/classes/HSlider.xml index 37aa968161..fa88085a70 100644 --- a/doc/classes/HSlider.xml +++ b/doc/classes/HSlider.xml @@ -9,10 +9,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> <theme_items> <theme_item name="grabber" data_type="icon" type="Texture2D"> The texture for the grabber (the draggable element). diff --git a/doc/classes/HSplitContainer.xml b/doc/classes/HSplitContainer.xml index 6bc9913344..379d4cfbdb 100644 --- a/doc/classes/HSplitContainer.xml +++ b/doc/classes/HSplitContainer.xml @@ -8,10 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> <theme_items> <theme_item name="autohide" data_type="constant" type="int" default="1"> Boolean value. If 1 ([code]true[/code]), the grabber will hide automatically when it isn't under the cursor. If 0 ([code]false[/code]), it's always visible. diff --git a/doc/classes/HeightMapShape3D.xml b/doc/classes/HeightMapShape3D.xml index 9a9d3bf8f4..705415171f 100644 --- a/doc/classes/HeightMapShape3D.xml +++ b/doc/classes/HeightMapShape3D.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="map_data" type="PackedFloat32Array" setter="set_map_data" getter="get_map_data" default="PackedFloat32Array(0, 0, 0, 0)"> Height map data, pool array must be of [member map_width] * [member map_depth] size. @@ -21,6 +19,4 @@ Width of the height map data. Changing this will resize the [member map_data]. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/ImageTexture.xml b/doc/classes/ImageTexture.xml index 435fec6a50..af7178db95 100644 --- a/doc/classes/ImageTexture.xml +++ b/doc/classes/ImageTexture.xml @@ -61,6 +61,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/ImageTexture3D.xml b/doc/classes/ImageTexture3D.xml index 538a836c1c..ca4178f97a 100644 --- a/doc/classes/ImageTexture3D.xml +++ b/doc/classes/ImageTexture3D.xml @@ -25,6 +25,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/ImageTextureLayered.xml b/doc/classes/ImageTextureLayered.xml index 1b7400803d..f6ebc43d13 100644 --- a/doc/classes/ImageTextureLayered.xml +++ b/doc/classes/ImageTextureLayered.xml @@ -21,6 +21,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/ImmediateMesh.xml b/doc/classes/ImmediateMesh.xml index 69637d5bdd..75a3ec65c2 100644 --- a/doc/classes/ImmediateMesh.xml +++ b/doc/classes/ImmediateMesh.xml @@ -79,6 +79,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/InputEvent.xml b/doc/classes/InputEvent.xml index cd14965d1b..9dc8fbeffa 100644 --- a/doc/classes/InputEvent.xml +++ b/doc/classes/InputEvent.xml @@ -106,6 +106,4 @@ [b]Note:[/b] This device ID will always be [code]-1[/code] for emulated mouse input from a touchscreen. This can be used to distinguish emulated mouse input from physical mouse input. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/InputEventAction.xml b/doc/classes/InputEventAction.xml index 42326f344f..f09af1a34d 100644 --- a/doc/classes/InputEventAction.xml +++ b/doc/classes/InputEventAction.xml @@ -11,8 +11,6 @@ <link title="2D Dodge The Creeps Demo">https://godotengine.org/asset-library/asset/515</link> <link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link> </tutorials> - <methods> - </methods> <members> <member name="action" type="StringName" setter="set_action" getter="get_action" default="&"""> The action's name. Actions are accessed via this [String]. @@ -24,6 +22,4 @@ The action's strength between 0 and 1. This value is considered as equal to 0 if pressed is [code]false[/code]. The event strength allows faking analog joypad motion events, by specifying how strongly the joypad axis is bent or pressed. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/InputEventFromWindow.xml b/doc/classes/InputEventFromWindow.xml index 7cd5b7d179..0d897b9699 100644 --- a/doc/classes/InputEventFromWindow.xml +++ b/doc/classes/InputEventFromWindow.xml @@ -6,12 +6,8 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="window_id" type="int" setter="set_window_id" getter="get_window_id" default="0"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/InputEventGesture.xml b/doc/classes/InputEventGesture.xml index fbde318ada..2d57b84cc8 100644 --- a/doc/classes/InputEventGesture.xml +++ b/doc/classes/InputEventGesture.xml @@ -7,13 +7,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="position" type="Vector2" setter="set_position" getter="get_position" default="Vector2(0, 0)"> The local gesture position relative to the [Viewport]. If used in [method Control._gui_input], the position is relative to the current [Control] that received this gesture. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/InputEventJoypadButton.xml b/doc/classes/InputEventJoypadButton.xml index f9afe42a7a..ff82913385 100644 --- a/doc/classes/InputEventJoypadButton.xml +++ b/doc/classes/InputEventJoypadButton.xml @@ -9,8 +9,6 @@ <tutorials> <link title="InputEvent">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link> </tutorials> - <methods> - </methods> <members> <member name="button_index" type="int" setter="set_button_index" getter="get_button_index" enum="JoyButton" default="0"> Button identifier. One of the [enum JoyButton] button constants. @@ -22,6 +20,4 @@ Represents the pressure the user puts on the button with his finger, if the controller supports it. Ranges from [code]0[/code] to [code]1[/code]. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/InputEventJoypadMotion.xml b/doc/classes/InputEventJoypadMotion.xml index 398b9eb6f6..92161974ba 100644 --- a/doc/classes/InputEventJoypadMotion.xml +++ b/doc/classes/InputEventJoypadMotion.xml @@ -9,8 +9,6 @@ <tutorials> <link title="InputEvent">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link> </tutorials> - <methods> - </methods> <members> <member name="axis" type="int" setter="set_axis" getter="get_axis" enum="JoyAxis" default="0"> Axis identifier. Use one of the [enum JoyAxis] axis constants. @@ -19,6 +17,4 @@ Current position of the joystick on the given axis. The value ranges from [code]-1.0[/code] to [code]1.0[/code]. A value of [code]0[/code] means the axis is in its resting position. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/InputEventKey.xml b/doc/classes/InputEventKey.xml index f670d907fc..9cf6872655 100644 --- a/doc/classes/InputEventKey.xml +++ b/doc/classes/InputEventKey.xml @@ -44,6 +44,4 @@ The key Unicode identifier (when relevant). Unicode identifiers for the composite characters and complex scripts may not be available unless IME input mode is active. See [method Window.set_ime_active] for more information. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/InputEventMIDI.xml b/doc/classes/InputEventMIDI.xml index afc9d476da..040eee7b98 100644 --- a/doc/classes/InputEventMIDI.xml +++ b/doc/classes/InputEventMIDI.xml @@ -6,8 +6,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="channel" type="int" setter="set_channel" getter="get_channel" default="0"> </member> @@ -26,6 +24,4 @@ <member name="velocity" type="int" setter="set_velocity" getter="get_velocity" default="0"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/InputEventMagnifyGesture.xml b/doc/classes/InputEventMagnifyGesture.xml index 3e539b2f97..ed0860a63a 100644 --- a/doc/classes/InputEventMagnifyGesture.xml +++ b/doc/classes/InputEventMagnifyGesture.xml @@ -6,12 +6,8 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="factor" type="float" setter="set_factor" getter="get_factor" default="1.0"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/InputEventMouse.xml b/doc/classes/InputEventMouse.xml index b8043118b7..b06068aff3 100644 --- a/doc/classes/InputEventMouse.xml +++ b/doc/classes/InputEventMouse.xml @@ -9,8 +9,6 @@ <tutorials> <link title="InputEvent">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link> </tutorials> - <methods> - </methods> <members> <member name="button_mask" type="int" setter="set_button_mask" getter="get_button_mask" default="0"> The mouse button mask identifier, one of or a bitwise combination of the [enum MouseButton] button masks. @@ -22,6 +20,4 @@ The local mouse position relative to the [Viewport]. If used in [method Control._gui_input], the position is relative to the current [Control] which is under the mouse. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/InputEventMouseButton.xml b/doc/classes/InputEventMouseButton.xml index 7a6c7410ef..dcfe0d6c71 100644 --- a/doc/classes/InputEventMouseButton.xml +++ b/doc/classes/InputEventMouseButton.xml @@ -9,8 +9,6 @@ <tutorials> <link title="Mouse and input coordinates">https://docs.godotengine.org/en/latest/tutorials/inputs/mouse_and_input_coordinates.html</link> </tutorials> - <methods> - </methods> <members> <member name="button_index" type="int" setter="set_button_index" getter="get_button_index" enum="MouseButton" default="0"> The mouse button identifier, one of the [enum MouseButton] button or button wheel constants. @@ -25,6 +23,4 @@ If [code]true[/code], the mouse button's state is pressed. If [code]false[/code], the mouse button's state is released. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/InputEventMouseMotion.xml b/doc/classes/InputEventMouseMotion.xml index 881d74ac7b..9a0156510e 100644 --- a/doc/classes/InputEventMouseMotion.xml +++ b/doc/classes/InputEventMouseMotion.xml @@ -11,8 +11,6 @@ <link title="Mouse and input coordinates">https://docs.godotengine.org/en/latest/tutorials/inputs/mouse_and_input_coordinates.html</link> <link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link> </tutorials> - <methods> - </methods> <members> <member name="pressure" type="float" setter="set_pressure" getter="get_pressure" default="0.0"> Represents the pressure the user puts on the pen. Ranges from [code]0.0[/code] to [code]1.0[/code]. @@ -28,6 +26,4 @@ Represents the angles of tilt of the pen. Positive X-coordinate value indicates a tilt to the right. Positive Y-coordinate value indicates a tilt toward the user. Ranges from [code]-1.0[/code] to [code]1.0[/code] for both axes. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/InputEventPanGesture.xml b/doc/classes/InputEventPanGesture.xml index ffb1901dad..2de3459df7 100644 --- a/doc/classes/InputEventPanGesture.xml +++ b/doc/classes/InputEventPanGesture.xml @@ -6,12 +6,8 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="delta" type="Vector2" setter="set_delta" getter="get_delta" default="Vector2(0, 0)"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/InputEventScreenDrag.xml b/doc/classes/InputEventScreenDrag.xml index 079ac03f45..373936225b 100644 --- a/doc/classes/InputEventScreenDrag.xml +++ b/doc/classes/InputEventScreenDrag.xml @@ -9,8 +9,6 @@ <tutorials> <link title="InputEvent">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link> </tutorials> - <methods> - </methods> <members> <member name="index" type="int" setter="set_index" getter="get_index" default="0"> The drag event index in the case of a multi-drag event. @@ -25,6 +23,4 @@ The drag speed. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/InputEventScreenTouch.xml b/doc/classes/InputEventScreenTouch.xml index 7aa5f62b05..c731044c98 100644 --- a/doc/classes/InputEventScreenTouch.xml +++ b/doc/classes/InputEventScreenTouch.xml @@ -10,8 +10,6 @@ <tutorials> <link title="InputEvent">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link> </tutorials> - <methods> - </methods> <members> <member name="index" type="int" setter="set_index" getter="get_index" default="0"> The touch index in the case of a multi-touch event. One index = one finger. @@ -23,6 +21,4 @@ If [code]true[/code], the touch's state is pressed. If [code]false[/code], the touch's state is released. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/InputEventShortcut.xml b/doc/classes/InputEventShortcut.xml index 35cca02cf7..ea84db541c 100644 --- a/doc/classes/InputEventShortcut.xml +++ b/doc/classes/InputEventShortcut.xml @@ -6,12 +6,8 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="shortcut" type="Shortcut" setter="set_shortcut" getter="get_shortcut"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/InputEventWithModifiers.xml b/doc/classes/InputEventWithModifiers.xml index 3beea7f9a0..1b9212bf65 100644 --- a/doc/classes/InputEventWithModifiers.xml +++ b/doc/classes/InputEventWithModifiers.xml @@ -9,8 +9,6 @@ <tutorials> <link title="InputEvent">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link> </tutorials> - <methods> - </methods> <members> <member name="alt_pressed" type="bool" setter="set_alt_pressed" getter="is_alt_pressed" default="false"> State of the [kbd]Alt[/kbd] modifier. @@ -32,6 +30,4 @@ This aids with cross-platform compatibility when developing e.g. on Windows for macOS, or vice-versa. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/InputMap.xml b/doc/classes/InputMap.xml index 16c2695613..855d5b5d71 100644 --- a/doc/classes/InputMap.xml +++ b/doc/classes/InputMap.xml @@ -109,6 +109,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/InstancePlaceholder.xml b/doc/classes/InstancePlaceholder.xml index 75892895d7..e67232ebac 100644 --- a/doc/classes/InstancePlaceholder.xml +++ b/doc/classes/InstancePlaceholder.xml @@ -31,6 +31,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/IntervalTweener.xml b/doc/classes/IntervalTweener.xml index 1c59003c70..f2f58b4ca6 100644 --- a/doc/classes/IntervalTweener.xml +++ b/doc/classes/IntervalTweener.xml @@ -9,8 +9,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/JNISingleton.xml b/doc/classes/JNISingleton.xml index fbf18ddc03..ce39e1f567 100644 --- a/doc/classes/JNISingleton.xml +++ b/doc/classes/JNISingleton.xml @@ -9,8 +9,4 @@ <tutorials> <link title="Creating Android plugins">https://docs.godotengine.org/en/latest/tutorials/platform/android/android_plugin.html#doc-android-plugin</link> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/JSON.xml b/doc/classes/JSON.xml index cee7db08e9..63e6307b39 100644 --- a/doc/classes/JSON.xml +++ b/doc/classes/JSON.xml @@ -91,6 +91,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/JavaClass.xml b/doc/classes/JavaClass.xml index 0b6a44fe14..b024f0ccd4 100644 --- a/doc/classes/JavaClass.xml +++ b/doc/classes/JavaClass.xml @@ -6,8 +6,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/JavaClassWrapper.xml b/doc/classes/JavaClassWrapper.xml index 90d988f9bb..f532207f03 100644 --- a/doc/classes/JavaClassWrapper.xml +++ b/doc/classes/JavaClassWrapper.xml @@ -14,6 +14,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/JavaScript.xml b/doc/classes/JavaScript.xml index d68b4492c7..5865ad734e 100644 --- a/doc/classes/JavaScript.xml +++ b/doc/classes/JavaScript.xml @@ -54,6 +54,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/JavaScriptObject.xml b/doc/classes/JavaScriptObject.xml index 087fe163b4..5aa54a7d0c 100644 --- a/doc/classes/JavaScriptObject.xml +++ b/doc/classes/JavaScriptObject.xml @@ -35,8 +35,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/Joint2D.xml b/doc/classes/Joint2D.xml index b055293b9d..b003224ad4 100644 --- a/doc/classes/Joint2D.xml +++ b/doc/classes/Joint2D.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="bias" type="float" setter="set_bias" getter="get_bias" default="0.0"> When [member node_a] and [member node_b] move in different directions the [code]bias[/code] controls how fast the joint pulls them back to their original position. The lower the [code]bias[/code] the more the two bodies can pull on the joint. @@ -24,6 +22,4 @@ The second body attached to the joint. Must derive from [PhysicsBody2D]. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/Joint3D.xml b/doc/classes/Joint3D.xml index 94cdda586c..4b2c1ab4cb 100644 --- a/doc/classes/Joint3D.xml +++ b/doc/classes/Joint3D.xml @@ -9,8 +9,6 @@ <tutorials> <link title="3D Truck Town Demo">https://godotengine.org/asset-library/asset/524</link> </tutorials> - <methods> - </methods> <members> <member name="collision/exclude_nodes" type="bool" setter="set_exclude_nodes_from_collision" getter="get_exclude_nodes_from_collision" default="true"> If [code]true[/code], the two bodies of the nodes are not able to collide with each other. @@ -25,6 +23,4 @@ The priority used to define which solver is executed first for multiple joints. The lower the value, the higher the priority. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/KinematicCollision2D.xml b/doc/classes/KinematicCollision2D.xml index 721b840e99..c558c541ad 100644 --- a/doc/classes/KinematicCollision2D.xml +++ b/doc/classes/KinematicCollision2D.xml @@ -56,6 +56,4 @@ The distance the moving object traveled before collision. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/KinematicCollision3D.xml b/doc/classes/KinematicCollision3D.xml index 5477736c25..bc2d80218d 100644 --- a/doc/classes/KinematicCollision3D.xml +++ b/doc/classes/KinematicCollision3D.xml @@ -56,6 +56,4 @@ The distance the moving object traveled before collision. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/LightOccluder2D.xml b/doc/classes/LightOccluder2D.xml index 550daf9225..ba795a29a1 100644 --- a/doc/classes/LightOccluder2D.xml +++ b/doc/classes/LightOccluder2D.xml @@ -9,8 +9,6 @@ <tutorials> <link title="2D lights and shadows">https://docs.godotengine.org/en/latest/tutorials/2d/2d_lights_and_shadows.html</link> </tutorials> - <methods> - </methods> <members> <member name="occluder" type="OccluderPolygon2D" setter="set_occluder_polygon" getter="get_occluder_polygon"> The [OccluderPolygon2D] used to compute the shadow. @@ -21,6 +19,4 @@ <member name="sdf_collision" type="bool" setter="set_as_sdf_collision" getter="is_set_as_sdf_collision" default="true"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/LightmapGI.xml b/doc/classes/LightmapGI.xml index d7722a83b0..0cdf9f820f 100644 --- a/doc/classes/LightmapGI.xml +++ b/doc/classes/LightmapGI.xml @@ -6,8 +6,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="bias" type="float" setter="set_bias" getter="get_bias" default="0.0005"> </member> diff --git a/doc/classes/LightmapGIData.xml b/doc/classes/LightmapGIData.xml index c577439c8f..f678ae48d9 100644 --- a/doc/classes/LightmapGIData.xml +++ b/doc/classes/LightmapGIData.xml @@ -48,6 +48,4 @@ <member name="light_texture" type="TextureLayered" setter="set_light_texture" getter="get_light_texture"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/LightmapProbe.xml b/doc/classes/LightmapProbe.xml index 3af71f3774..465e645216 100644 --- a/doc/classes/LightmapProbe.xml +++ b/doc/classes/LightmapProbe.xml @@ -6,8 +6,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/Lightmapper.xml b/doc/classes/Lightmapper.xml index 79fae42d68..d9a9a55f6a 100644 --- a/doc/classes/Lightmapper.xml +++ b/doc/classes/Lightmapper.xml @@ -6,8 +6,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/LightmapperRD.xml b/doc/classes/LightmapperRD.xml index 0993b28f19..cfa9a4e2df 100644 --- a/doc/classes/LightmapperRD.xml +++ b/doc/classes/LightmapperRD.xml @@ -6,8 +6,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/MarginContainer.xml b/doc/classes/MarginContainer.xml index 419857c13f..2948e58f50 100644 --- a/doc/classes/MarginContainer.xml +++ b/doc/classes/MarginContainer.xml @@ -27,10 +27,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> <theme_items> <theme_item name="margin_bottom" data_type="constant" type="int" default="0"> All direct children of [MarginContainer] will have a bottom margin of [code]margin_bottom[/code] pixels. diff --git a/doc/classes/Marshalls.xml b/doc/classes/Marshalls.xml index 0f36dd11ca..eb6635f03f 100644 --- a/doc/classes/Marshalls.xml +++ b/doc/classes/Marshalls.xml @@ -55,6 +55,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/MenuButton.xml b/doc/classes/MenuButton.xml index 1c7e6f1f19..5bdc9cccd9 100644 --- a/doc/classes/MenuButton.xml +++ b/doc/classes/MenuButton.xml @@ -41,8 +41,6 @@ </description> </signal> </signals> - <constants> - </constants> <theme_items> <theme_item name="disabled" data_type="style" type="StyleBox"> [StyleBox] used when the [MenuButton] is disabled. diff --git a/doc/classes/MeshDataTool.xml b/doc/classes/MeshDataTool.xml index 338deed0be..35e4451918 100644 --- a/doc/classes/MeshDataTool.xml +++ b/doc/classes/MeshDataTool.xml @@ -332,6 +332,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/MeshInstance2D.xml b/doc/classes/MeshInstance2D.xml index 59b312f69a..c7b66c8ea3 100644 --- a/doc/classes/MeshInstance2D.xml +++ b/doc/classes/MeshInstance2D.xml @@ -9,8 +9,6 @@ <tutorials> <link title="2D meshes">https://docs.godotengine.org/en/latest/tutorials/2d/2d_meshes.html</link> </tutorials> - <methods> - </methods> <members> <member name="mesh" type="Mesh" setter="set_mesh" getter="get_mesh"> The [Mesh] that will be drawn by the [MeshInstance2D]. @@ -30,6 +28,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/MeshInstance3D.xml b/doc/classes/MeshInstance3D.xml index 665d5d3c77..507a76197a 100644 --- a/doc/classes/MeshInstance3D.xml +++ b/doc/classes/MeshInstance3D.xml @@ -81,6 +81,4 @@ Sets the skin to be used by this instance. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/MeshLibrary.xml b/doc/classes/MeshLibrary.xml index 1d07647ea7..9fde19588a 100644 --- a/doc/classes/MeshLibrary.xml +++ b/doc/classes/MeshLibrary.xml @@ -160,6 +160,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/MeshTexture.xml b/doc/classes/MeshTexture.xml index 57f2397874..eb0451fea6 100644 --- a/doc/classes/MeshTexture.xml +++ b/doc/classes/MeshTexture.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="base_texture" type="Texture2D" setter="set_base_texture" getter="get_base_texture"> Sets the base texture that the Mesh will use to draw. @@ -21,6 +19,4 @@ Sets the mesh used to draw. It must be a mesh using 2D vertices. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/MethodTweener.xml b/doc/classes/MethodTweener.xml index 1b93b20d9f..5780aa00d9 100644 --- a/doc/classes/MethodTweener.xml +++ b/doc/classes/MethodTweener.xml @@ -32,6 +32,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/MultiMeshInstance2D.xml b/doc/classes/MultiMeshInstance2D.xml index a461c8e056..328ddff0eb 100644 --- a/doc/classes/MultiMeshInstance2D.xml +++ b/doc/classes/MultiMeshInstance2D.xml @@ -9,8 +9,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="multimesh" type="MultiMesh" setter="set_multimesh" getter="get_multimesh"> The [MultiMesh] that will be drawn by the [MultiMeshInstance2D]. @@ -30,6 +28,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/MultiMeshInstance3D.xml b/doc/classes/MultiMeshInstance3D.xml index 7d8035ba77..7bf05d2d34 100644 --- a/doc/classes/MultiMeshInstance3D.xml +++ b/doc/classes/MultiMeshInstance3D.xml @@ -12,13 +12,9 @@ <link title="Using MultiMeshInstance">https://docs.godotengine.org/en/latest/tutorials/3d/using_multi_mesh_instance.html</link> <link title="Optimization using MultiMeshes">https://docs.godotengine.org/en/latest/tutorials/optimization/using_multimesh.html</link> </tutorials> - <methods> - </methods> <members> <member name="multimesh" type="MultiMesh" setter="set_multimesh" getter="get_multimesh"> The [MultiMesh] resource that will be used and shared among all instances of the [MultiMeshInstance3D]. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/MultiplayerAPI.xml b/doc/classes/MultiplayerAPI.xml index 647233f679..0da461dd61 100644 --- a/doc/classes/MultiplayerAPI.xml +++ b/doc/classes/MultiplayerAPI.xml @@ -121,6 +121,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/Mutex.xml b/doc/classes/Mutex.xml index 0e6b1e3e44..eb9bec1104 100644 --- a/doc/classes/Mutex.xml +++ b/doc/classes/Mutex.xml @@ -32,6 +32,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/NavigationAgent2D.xml b/doc/classes/NavigationAgent2D.xml index c05f7c2094..068854024c 100644 --- a/doc/classes/NavigationAgent2D.xml +++ b/doc/classes/NavigationAgent2D.xml @@ -129,6 +129,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/NavigationAgent3D.xml b/doc/classes/NavigationAgent3D.xml index af4a058489..f429134a71 100644 --- a/doc/classes/NavigationAgent3D.xml +++ b/doc/classes/NavigationAgent3D.xml @@ -135,6 +135,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/NavigationMeshGenerator.xml b/doc/classes/NavigationMeshGenerator.xml index 9931033260..ca285c030c 100644 --- a/doc/classes/NavigationMeshGenerator.xml +++ b/doc/classes/NavigationMeshGenerator.xml @@ -21,6 +21,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/NavigationObstacle2D.xml b/doc/classes/NavigationObstacle2D.xml index 2e94eb0bba..462532d49a 100644 --- a/doc/classes/NavigationObstacle2D.xml +++ b/doc/classes/NavigationObstacle2D.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/NavigationObstacle3D.xml b/doc/classes/NavigationObstacle3D.xml index d7454a7bea..c0cb7befef 100644 --- a/doc/classes/NavigationObstacle3D.xml +++ b/doc/classes/NavigationObstacle3D.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/NavigationPolygon.xml b/doc/classes/NavigationPolygon.xml index e1e2c34a63..5b5b7c42ef 100644 --- a/doc/classes/NavigationPolygon.xml +++ b/doc/classes/NavigationPolygon.xml @@ -141,6 +141,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/NavigationRegion2D.xml b/doc/classes/NavigationRegion2D.xml index 33a3f04c3d..6c78b25744 100644 --- a/doc/classes/NavigationRegion2D.xml +++ b/doc/classes/NavigationRegion2D.xml @@ -10,8 +10,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="enabled" type="bool" setter="set_enabled" getter="is_enabled" default="true"> Determines if the [NavigationRegion2D] is enabled or disabled. @@ -23,6 +21,4 @@ The [NavigationPolygon] resource to use. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/NavigationRegion3D.xml b/doc/classes/NavigationRegion3D.xml index da06641b48..f91069fa9d 100644 --- a/doc/classes/NavigationRegion3D.xml +++ b/doc/classes/NavigationRegion3D.xml @@ -40,6 +40,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/NavigationServer2D.xml b/doc/classes/NavigationServer2D.xml index 042ab06e6f..1740093eb2 100644 --- a/doc/classes/NavigationServer2D.xml +++ b/doc/classes/NavigationServer2D.xml @@ -272,6 +272,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/NavigationServer3D.xml b/doc/classes/NavigationServer3D.xml index 73ca18655a..3e10657838 100644 --- a/doc/classes/NavigationServer3D.xml +++ b/doc/classes/NavigationServer3D.xml @@ -329,6 +329,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/Node2D.xml b/doc/classes/Node2D.xml index 4f5c2bbd6e..ef5f9ee5c9 100644 --- a/doc/classes/Node2D.xml +++ b/doc/classes/Node2D.xml @@ -130,6 +130,4 @@ Z index. Controls the order in which the nodes render. A node with a higher Z index will display in front of others. Must be between [constant RenderingServer.CANVAS_ITEM_Z_MIN] and [constant RenderingServer.CANVAS_ITEM_Z_MAX] (inclusive). </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/Node3DGizmo.xml b/doc/classes/Node3DGizmo.xml index c561047332..00298976a8 100644 --- a/doc/classes/Node3DGizmo.xml +++ b/doc/classes/Node3DGizmo.xml @@ -6,8 +6,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/NodePath.xml b/doc/classes/NodePath.xml index 87b3e39f48..17c6ba38b7 100644 --- a/doc/classes/NodePath.xml +++ b/doc/classes/NodePath.xml @@ -189,6 +189,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/ORMMaterial3D.xml b/doc/classes/ORMMaterial3D.xml index d275f93196..7ca4f5d363 100644 --- a/doc/classes/ORMMaterial3D.xml +++ b/doc/classes/ORMMaterial3D.xml @@ -6,8 +6,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/OS.xml b/doc/classes/OS.xml index 305258c8c5..e2ac8568c9 100644 --- a/doc/classes/OS.xml +++ b/doc/classes/OS.xml @@ -55,14 +55,18 @@ <return type="void" /> <argument index="0" name="msec" type="int" /> <description> - Delay execution of the current thread by [code]msec[/code] milliseconds. [code]msec[/code] must be greater than or equal to [code]0[/code]. Otherwise, [method delay_msec] will do nothing and will print an error message. + Delays execution of the current thread by [code]msec[/code] milliseconds. [code]msec[/code] must be greater than or equal to [code]0[/code]. Otherwise, [method delay_msec] will do nothing and will print an error message. + [b]Note:[/b] [method delay_msec] is a [i]blocking[/i] way to delay code execution. To delay code execution in a non-blocking way, see [method SceneTree.create_timer]. Yielding with [method SceneTree.create_timer] will delay the execution of code placed below the [code]yield[/code] without affecting the rest of the project (or editor, for [EditorPlugin]s and [EditorScript]s). + [b]Note:[/b] When [method delay_msec] is called on the main thread, it will freeze the project and will prevent it from redrawing and registering input until the delay has passed. When using [method delay_msec] as part of an [EditorPlugin] or [EditorScript], it will freeze the editor but won't freeze the project if it is currently running (since the project is an independent child process). </description> </method> <method name="delay_usec" qualifiers="const"> <return type="void" /> <argument index="0" name="usec" type="int" /> <description> - Delay execution of the current thread by [code]usec[/code] microseconds. [code]usec[/code] must be greater than or equal to [code]0[/code]. Otherwise, [method delay_usec] will do nothing and will print an error message. + Delays execution of the current thread by [code]usec[/code] microseconds. [code]usec[/code] must be greater than or equal to [code]0[/code]. Otherwise, [method delay_usec] will do nothing and will print an error message. + [b]Note:[/b] [method delay_usec] is a [i]blocking[/i] way to delay code execution. To delay code execution in a non-blocking way, see [method SceneTree.create_timer]. Yielding with [method SceneTree.create_timer] will delay the execution of code placed below the [code]yield[/code] without affecting the rest of the project (or editor, for [EditorPlugin]s and [EditorScript]s). + [b]Note:[/b] When [method delay_usec] is called on the main thread, it will freeze the project and will prevent it from redrawing and registering input until the delay has passed. When using [method delay_usec] as part of an [EditorPlugin] or [EditorScript], it will freeze the editor but won't freeze the project if it is currently running (since the project is an independent child process). </description> </method> <method name="dump_memory_to_file"> @@ -338,7 +342,7 @@ <method name="is_stdout_verbose" qualifiers="const"> <return type="bool" /> <description> - Returns [code]true[/code] if the engine was executed with [code]-v[/code] (verbose stdout). + Returns [code]true[/code] if the engine was executed with the [code]--verbose[/code] or [code]-v[/code] command line argument, or if [member ProjectSettings.debug/settings/stdout/verbose_stdout] is [code]true[/code]. See also [method @GlobalScope.print_verbose]. </description> </method> <method name="is_userfs_persistent" qualifiers="const"> diff --git a/doc/classes/Occluder3D.xml b/doc/classes/Occluder3D.xml index 501c4a3ccf..69fb3002e3 100644 --- a/doc/classes/Occluder3D.xml +++ b/doc/classes/Occluder3D.xml @@ -6,14 +6,10 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="indices" type="PackedInt32Array" setter="set_indices" getter="get_indices" default="PackedInt32Array()"> </member> <member name="vertices" type="PackedVector3Array" setter="set_vertices" getter="get_vertices" default="PackedVector3Array()"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/OccluderInstance3D.xml b/doc/classes/OccluderInstance3D.xml index cc4bddc229..d97aa4312f 100644 --- a/doc/classes/OccluderInstance3D.xml +++ b/doc/classes/OccluderInstance3D.xml @@ -29,6 +29,4 @@ <member name="occluder" type="Occluder3D" setter="set_occluder" getter="get_occluder"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/OccluderPolygon2D.xml b/doc/classes/OccluderPolygon2D.xml index 28d3ed433a..e347888414 100644 --- a/doc/classes/OccluderPolygon2D.xml +++ b/doc/classes/OccluderPolygon2D.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="closed" type="bool" setter="set_closed" getter="is_closed" default="true"> If [code]true[/code], closes the polygon. A closed OccluderPolygon2D occludes the light coming from any direction. An opened OccluderPolygon2D occludes the light only at its outline's direction. diff --git a/doc/classes/OmniLight3D.xml b/doc/classes/OmniLight3D.xml index dfcb19a287..e8d5977199 100644 --- a/doc/classes/OmniLight3D.xml +++ b/doc/classes/OmniLight3D.xml @@ -9,8 +9,6 @@ <tutorials> <link title="3D lights and shadows">https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html</link> </tutorials> - <methods> - </methods> <members> <member name="omni_attenuation" type="float" setter="set_param" getter="get_param" default="1.0"> The light's attenuation (drop-off) curve. A number of presets are available in the [b]Inspector[/b] by right-clicking the curve. diff --git a/doc/classes/OptimizedTranslation.xml b/doc/classes/OptimizedTranslation.xml index 195fa28188..8302a564ed 100644 --- a/doc/classes/OptimizedTranslation.xml +++ b/doc/classes/OptimizedTranslation.xml @@ -17,6 +17,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/OptionButton.xml b/doc/classes/OptionButton.xml index 8aa0ad073d..264ef9975a 100644 --- a/doc/classes/OptionButton.xml +++ b/doc/classes/OptionButton.xml @@ -183,8 +183,6 @@ </description> </signal> </signals> - <constants> - </constants> <theme_items> <theme_item name="arrow" data_type="icon" type="Texture2D"> The arrow icon to be drawn on the right end of the button. diff --git a/doc/classes/PCKPacker.xml b/doc/classes/PCKPacker.xml index 0af329983d..28508c85e0 100644 --- a/doc/classes/PCKPacker.xml +++ b/doc/classes/PCKPacker.xml @@ -51,6 +51,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/PackedByteArray.xml b/doc/classes/PackedByteArray.xml index 9b8057d91a..8e94254a1f 100644 --- a/doc/classes/PackedByteArray.xml +++ b/doc/classes/PackedByteArray.xml @@ -436,6 +436,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/PackedColorArray.xml b/doc/classes/PackedColorArray.xml index fb744d7534..4bccdcd939 100644 --- a/doc/classes/PackedColorArray.xml +++ b/doc/classes/PackedColorArray.xml @@ -171,6 +171,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/PackedDataContainer.xml b/doc/classes/PackedDataContainer.xml index 0a765fcc75..2454e565e6 100644 --- a/doc/classes/PackedDataContainer.xml +++ b/doc/classes/PackedDataContainer.xml @@ -23,6 +23,4 @@ <member name="__data__" type="PackedByteArray" setter="_set_data" getter="_get_data" default="PackedByteArray()"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/PackedDataContainerRef.xml b/doc/classes/PackedDataContainerRef.xml index 5e42079b97..131a6be4e2 100644 --- a/doc/classes/PackedDataContainerRef.xml +++ b/doc/classes/PackedDataContainerRef.xml @@ -14,6 +14,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/PackedFloat32Array.xml b/doc/classes/PackedFloat32Array.xml index 0c05e8f3c2..51e14ea3d4 100644 --- a/doc/classes/PackedFloat32Array.xml +++ b/doc/classes/PackedFloat32Array.xml @@ -174,6 +174,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/PackedFloat64Array.xml b/doc/classes/PackedFloat64Array.xml index e55bc0e657..25c9c025f7 100644 --- a/doc/classes/PackedFloat64Array.xml +++ b/doc/classes/PackedFloat64Array.xml @@ -174,6 +174,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/PackedInt32Array.xml b/doc/classes/PackedInt32Array.xml index 887a7a1e51..1a61ce0ead 100644 --- a/doc/classes/PackedInt32Array.xml +++ b/doc/classes/PackedInt32Array.xml @@ -174,6 +174,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/PackedInt64Array.xml b/doc/classes/PackedInt64Array.xml index da661b12c3..06f7900237 100644 --- a/doc/classes/PackedInt64Array.xml +++ b/doc/classes/PackedInt64Array.xml @@ -174,6 +174,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/PackedStringArray.xml b/doc/classes/PackedStringArray.xml index 8f16abaf37..763ed0cc55 100644 --- a/doc/classes/PackedStringArray.xml +++ b/doc/classes/PackedStringArray.xml @@ -172,6 +172,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/PackedVector2Array.xml b/doc/classes/PackedVector2Array.xml index 3678222da4..3f0797bb59 100644 --- a/doc/classes/PackedVector2Array.xml +++ b/doc/classes/PackedVector2Array.xml @@ -178,6 +178,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/PackedVector3Array.xml b/doc/classes/PackedVector3Array.xml index 84d4297a3b..6b950cad61 100644 --- a/doc/classes/PackedVector3Array.xml +++ b/doc/classes/PackedVector3Array.xml @@ -177,6 +177,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/PacketPeer.xml b/doc/classes/PacketPeer.xml index 8d0aa89287..fb94209d72 100644 --- a/doc/classes/PacketPeer.xml +++ b/doc/classes/PacketPeer.xml @@ -57,6 +57,4 @@ The [method put_var] method allocates memory on the stack, and the buffer used will grow automatically to the closest power of two to match the size of the [Variant]. If the [Variant] is bigger than [code]encode_buffer_max_size[/code], the method will error out with [constant ERR_OUT_OF_MEMORY]. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/PacketPeerStream.xml b/doc/classes/PacketPeerStream.xml index ec1ee175f7..a92aaf037e 100644 --- a/doc/classes/PacketPeerStream.xml +++ b/doc/classes/PacketPeerStream.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="input_buffer_max_size" type="int" setter="set_input_buffer_max_size" getter="get_input_buffer_max_size" default="65532"> </member> @@ -19,6 +17,4 @@ The wrapped [StreamPeer] object. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/PacketPeerUDP.xml b/doc/classes/PacketPeerUDP.xml index e2acb91058..ecaddc5b9f 100644 --- a/doc/classes/PacketPeerUDP.xml +++ b/doc/classes/PacketPeerUDP.xml @@ -139,6 +139,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/Panel.xml b/doc/classes/Panel.xml index 9906abf895..21ac7dfac1 100644 --- a/doc/classes/Panel.xml +++ b/doc/classes/Panel.xml @@ -11,8 +11,6 @@ <link title="2D Finite State Machine Demo">https://godotengine.org/asset-library/asset/516</link> <link title="3D Inverse Kinematics Demo">https://godotengine.org/asset-library/asset/523</link> </tutorials> - <methods> - </methods> <members> <member name="mode" type="int" setter="set_mode" getter="get_mode" enum="Panel.Mode" default="0"> </member> diff --git a/doc/classes/PanelContainer.xml b/doc/classes/PanelContainer.xml index f3f2f6839a..95d038e2af 100644 --- a/doc/classes/PanelContainer.xml +++ b/doc/classes/PanelContainer.xml @@ -9,13 +9,9 @@ <tutorials> <link title="2D Role Playing Game Demo">https://godotengine.org/asset-library/asset/520</link> </tutorials> - <methods> - </methods> <members> <member name="mouse_filter" type="int" setter="set_mouse_filter" getter="get_mouse_filter" override="true" enum="Control.MouseFilter" default="0" /> </members> - <constants> - </constants> <theme_items> <theme_item name="panel" data_type="style" type="StyleBox"> The style of [PanelContainer]'s background. diff --git a/doc/classes/PanoramaSkyMaterial.xml b/doc/classes/PanoramaSkyMaterial.xml index 905a2dd506..6707c03fac 100644 --- a/doc/classes/PanoramaSkyMaterial.xml +++ b/doc/classes/PanoramaSkyMaterial.xml @@ -10,13 +10,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="panorama" type="Texture2D" setter="set_panorama" getter="get_panorama"> [Texture2D] to be applied to the [PanoramaSkyMaterial]. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/ParallaxBackground.xml b/doc/classes/ParallaxBackground.xml index b8097343f4..5670660d01 100644 --- a/doc/classes/ParallaxBackground.xml +++ b/doc/classes/ParallaxBackground.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="layer" type="int" setter="set_layer" getter="get_layer" override="true" default="-100" /> <member name="scroll_base_offset" type="Vector2" setter="set_scroll_base_offset" getter="get_scroll_base_offset" default="Vector2(0, 0)"> @@ -31,6 +29,4 @@ The ParallaxBackground's scroll value. Calculated automatically when using a [Camera2D], but can be used to manually manage scrolling when no camera is present. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/ParallaxLayer.xml b/doc/classes/ParallaxLayer.xml index 6b1e013851..459518ab1c 100644 --- a/doc/classes/ParallaxLayer.xml +++ b/doc/classes/ParallaxLayer.xml @@ -10,8 +10,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="motion_mirroring" type="Vector2" setter="set_mirroring" getter="get_mirroring" default="Vector2(0, 0)"> The ParallaxLayer's [Texture2D] mirroring. Useful for creating an infinite scrolling background. If an axis is set to [code]0[/code], the [Texture2D] will not be mirrored. @@ -23,6 +21,4 @@ Multiplies the ParallaxLayer's motion. If an axis is set to [code]0[/code], it will not scroll. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/Path2D.xml b/doc/classes/Path2D.xml index 57e2091268..297fe69986 100644 --- a/doc/classes/Path2D.xml +++ b/doc/classes/Path2D.xml @@ -9,13 +9,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="curve" type="Curve2D" setter="set_curve" getter="get_curve"> A [Curve2D] describing the path. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/Path3D.xml b/doc/classes/Path3D.xml index b97e7efd5d..ce5774acab 100644 --- a/doc/classes/Path3D.xml +++ b/doc/classes/Path3D.xml @@ -9,8 +9,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="curve" type="Curve3D" setter="set_curve" getter="get_curve"> A [Curve3D] describing the path. @@ -23,6 +21,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/PathFollow2D.xml b/doc/classes/PathFollow2D.xml index 4b55e7b781..98106fd580 100644 --- a/doc/classes/PathFollow2D.xml +++ b/doc/classes/PathFollow2D.xml @@ -9,8 +9,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="cubic_interp" type="bool" setter="set_cubic_interpolation" getter="get_cubic_interpolation" default="true"> If [code]true[/code], the position between two cached points is interpolated cubically, and linearly otherwise. @@ -39,6 +37,4 @@ The node's offset perpendicular to the curve. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/PathFollow3D.xml b/doc/classes/PathFollow3D.xml index f405bdedfc..781e861203 100644 --- a/doc/classes/PathFollow3D.xml +++ b/doc/classes/PathFollow3D.xml @@ -9,8 +9,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="cubic_interp" type="bool" setter="set_cubic_interpolation" getter="get_cubic_interpolation" default="true"> If [code]true[/code], the position between two cached points is interpolated cubically, and linearly otherwise. diff --git a/doc/classes/PhysicalBone2D.xml b/doc/classes/PhysicalBone2D.xml index 8fa42a9596..339739b267 100644 --- a/doc/classes/PhysicalBone2D.xml +++ b/doc/classes/PhysicalBone2D.xml @@ -42,6 +42,4 @@ [b]Note:[/b] To have the Bone2D nodes visually follow the [code]PhysicalBone2D[/code] node, use a [SkeletonModification2DPhysicalBones] modification on the [Skeleton2D] node with the [Bone2D] nodes. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/PhysicalSkyMaterial.xml b/doc/classes/PhysicalSkyMaterial.xml index 20ab998d35..b90f52a70d 100644 --- a/doc/classes/PhysicalSkyMaterial.xml +++ b/doc/classes/PhysicalSkyMaterial.xml @@ -10,8 +10,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="dither_strength" type="float" setter="set_dither_strength" getter="get_dither_strength" default="1.0"> Sets the amount of dithering to use. Dithering helps reduce banding that appears from the smooth changes in color in the sky. Use the lowest value possible, higher amounts may add fuzziness to the sky. @@ -47,6 +45,4 @@ Sets the thickness of the atmosphere. High turbidity creates a foggy looking atmosphere, while a low turbidity results in a clearer atmosphere. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/PhysicsBody2D.xml b/doc/classes/PhysicsBody2D.xml index e00c473bcd..ee28500838 100644 --- a/doc/classes/PhysicsBody2D.xml +++ b/doc/classes/PhysicsBody2D.xml @@ -57,6 +57,4 @@ <members> <member name="input_pickable" type="bool" setter="set_pickable" getter="is_pickable" override="true" default="false" /> </members> - <constants> - </constants> </class> diff --git a/doc/classes/PhysicsBody3D.xml b/doc/classes/PhysicsBody3D.xml index ea2553e28a..8b50bb7bd9 100644 --- a/doc/classes/PhysicsBody3D.xml +++ b/doc/classes/PhysicsBody3D.xml @@ -89,6 +89,4 @@ Lock the body's linear movement in the Z axis. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/PhysicsDirectBodyState2D.xml b/doc/classes/PhysicsDirectBodyState2D.xml index 56c34615ce..bbb708c9b4 100644 --- a/doc/classes/PhysicsDirectBodyState2D.xml +++ b/doc/classes/PhysicsDirectBodyState2D.xml @@ -187,6 +187,4 @@ The body's transformation matrix. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/PhysicsDirectBodyState3D.xml b/doc/classes/PhysicsDirectBodyState3D.xml index a7458ff495..9bc5dbd6b9 100644 --- a/doc/classes/PhysicsDirectBodyState3D.xml +++ b/doc/classes/PhysicsDirectBodyState3D.xml @@ -191,6 +191,4 @@ The body's transformation matrix. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/PhysicsDirectSpaceState2D.xml b/doc/classes/PhysicsDirectSpaceState2D.xml index 536c7e4e04..0264249dab 100644 --- a/doc/classes/PhysicsDirectSpaceState2D.xml +++ b/doc/classes/PhysicsDirectSpaceState2D.xml @@ -119,6 +119,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/PhysicsDirectSpaceState3D.xml b/doc/classes/PhysicsDirectSpaceState3D.xml index 4e6bd8456f..137e7bbf39 100644 --- a/doc/classes/PhysicsDirectSpaceState3D.xml +++ b/doc/classes/PhysicsDirectSpaceState3D.xml @@ -77,6 +77,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/PhysicsMaterial.xml b/doc/classes/PhysicsMaterial.xml index 0889c238dc..b557b083c7 100644 --- a/doc/classes/PhysicsMaterial.xml +++ b/doc/classes/PhysicsMaterial.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="absorbent" type="bool" setter="set_absorbent" getter="is_absorbent" default="false"> If [code]true[/code], subtracts the bounciness from the colliding object's bounciness instead of adding it. @@ -24,6 +22,4 @@ If [code]true[/code], the physics engine will use the friction of the object marked as "rough" when two objects collide. If [code]false[/code], the physics engine will use the lowest friction of all colliding objects instead. If [code]true[/code] for both colliding objects, the physics engine will use the highest friction. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/PhysicsShapeQueryParameters2D.xml b/doc/classes/PhysicsShapeQueryParameters2D.xml index b54de15d15..6035b662ea 100644 --- a/doc/classes/PhysicsShapeQueryParameters2D.xml +++ b/doc/classes/PhysicsShapeQueryParameters2D.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="collide_with_areas" type="bool" setter="set_collide_with_areas" getter="is_collide_with_areas_enabled" default="false"> If [code]true[/code], the query will take [Area2D]s into account. @@ -67,6 +65,4 @@ The queried shape's transform matrix. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/PhysicsShapeQueryParameters3D.xml b/doc/classes/PhysicsShapeQueryParameters3D.xml index f74d1b5e48..1a289ff9d0 100644 --- a/doc/classes/PhysicsShapeQueryParameters3D.xml +++ b/doc/classes/PhysicsShapeQueryParameters3D.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="collide_with_areas" type="bool" setter="set_collide_with_areas" getter="is_collide_with_areas_enabled" default="false"> If [code]true[/code], the query will take [Area3D]s into account. @@ -64,6 +62,4 @@ The queried shape's transform matrix. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/PhysicsTestMotionResult2D.xml b/doc/classes/PhysicsTestMotionResult2D.xml index 9c5d525f85..8d594af673 100644 --- a/doc/classes/PhysicsTestMotionResult2D.xml +++ b/doc/classes/PhysicsTestMotionResult2D.xml @@ -6,8 +6,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="collider" type="Object" setter="" getter="get_collider"> </member> @@ -34,6 +32,4 @@ <member name="travel" type="Vector2" setter="" getter="get_travel" default="Vector2(0, 0)"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/PhysicsTestMotionResult3D.xml b/doc/classes/PhysicsTestMotionResult3D.xml index 6c18a097a1..c2d6709412 100644 --- a/doc/classes/PhysicsTestMotionResult3D.xml +++ b/doc/classes/PhysicsTestMotionResult3D.xml @@ -6,8 +6,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="collider" type="Object" setter="" getter="get_collider"> </member> @@ -34,6 +32,4 @@ <member name="travel" type="Vector3" setter="" getter="get_travel" default="Vector3(0, 0, 0)"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/PinJoint2D.xml b/doc/classes/PinJoint2D.xml index ed45149cdf..d5890fe912 100644 --- a/doc/classes/PinJoint2D.xml +++ b/doc/classes/PinJoint2D.xml @@ -8,13 +8,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="softness" type="float" setter="set_softness" getter="get_softness" default="0.0"> The higher this value, the more the bond to the pinned partner can flex. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/PlaneMesh.xml b/doc/classes/PlaneMesh.xml index 56bf98772b..ff0385dbdb 100644 --- a/doc/classes/PlaneMesh.xml +++ b/doc/classes/PlaneMesh.xml @@ -9,8 +9,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="center_offset" type="Vector3" setter="set_center_offset" getter="get_center_offset" default="Vector3(0, 0, 0)"> Offset of the generated plane. Useful for particles. @@ -25,6 +23,4 @@ Number of subdivision along the X axis. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/PointLight2D.xml b/doc/classes/PointLight2D.xml index a7207a3c80..9c13179056 100644 --- a/doc/classes/PointLight2D.xml +++ b/doc/classes/PointLight2D.xml @@ -6,8 +6,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="height" type="float" setter="set_height" getter="get_height" default="0.0"> The height of the light. Used with 2D normal mapping. @@ -22,6 +20,4 @@ The [member texture]'s scale factor. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/PointMesh.xml b/doc/classes/PointMesh.xml index 266ab2a898..7d1fa6ac35 100644 --- a/doc/classes/PointMesh.xml +++ b/doc/classes/PointMesh.xml @@ -10,8 +10,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/Polygon2D.xml b/doc/classes/Polygon2D.xml index 23106cddf7..cbffd9e554 100644 --- a/doc/classes/Polygon2D.xml +++ b/doc/classes/Polygon2D.xml @@ -114,6 +114,4 @@ Color for each vertex. Colors are interpolated between vertices, resulting in smooth gradients. There should be one per polygon vertex. If there are fewer, undefined vertices will use [code]color[/code]. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/PolygonPathFinder.xml b/doc/classes/PolygonPathFinder.xml index f77912bafe..945849e4df 100644 --- a/doc/classes/PolygonPathFinder.xml +++ b/doc/classes/PolygonPathFinder.xml @@ -59,6 +59,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/Popup.xml b/doc/classes/Popup.xml index 89695989c8..a47f72b2b6 100644 --- a/doc/classes/Popup.xml +++ b/doc/classes/Popup.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="borderless" type="bool" setter="set_flag" getter="get_flag" override="true" default="true" /> <member name="close_on_parent_focus" type="bool" setter="set_close_on_parent_focus" getter="get_close_on_parent_focus" default="true"> @@ -27,6 +25,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/PopupMenu.xml b/doc/classes/PopupMenu.xml index 61b5aa89a6..2208c12e56 100644 --- a/doc/classes/PopupMenu.xml +++ b/doc/classes/PopupMenu.xml @@ -535,8 +535,6 @@ </description> </signal> </signals> - <constants> - </constants> <theme_items> <theme_item name="checked" data_type="icon" type="Texture2D"> [Texture2D] icon for the checked checkbox items. diff --git a/doc/classes/PopupPanel.xml b/doc/classes/PopupPanel.xml index 56833f3f79..71753ffcc6 100644 --- a/doc/classes/PopupPanel.xml +++ b/doc/classes/PopupPanel.xml @@ -8,10 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> <theme_items> <theme_item name="panel" data_type="style" type="StyleBox"> The background panel style of this [PopupPanel]. diff --git a/doc/classes/Position2D.xml b/doc/classes/Position2D.xml index 9fadb73a15..03d94b5db9 100644 --- a/doc/classes/Position2D.xml +++ b/doc/classes/Position2D.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/Position3D.xml b/doc/classes/Position3D.xml index ca61a57483..22dc261520 100644 --- a/doc/classes/Position3D.xml +++ b/doc/classes/Position3D.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/PrimitiveMesh.xml b/doc/classes/PrimitiveMesh.xml index 36bec3ff61..6d63f56f1c 100644 --- a/doc/classes/PrimitiveMesh.xml +++ b/doc/classes/PrimitiveMesh.xml @@ -40,6 +40,4 @@ The current [Material] of the primitive mesh. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/PrismMesh.xml b/doc/classes/PrismMesh.xml index 0e66281fd1..e369bfe1b2 100644 --- a/doc/classes/PrismMesh.xml +++ b/doc/classes/PrismMesh.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="left_to_right" type="float" setter="set_left_to_right" getter="get_left_to_right" default="0.5"> Displacement of the upper edge along the X axis. 0.0 positions edge straight above the bottom-left edge. @@ -27,6 +25,4 @@ Number of added edge loops along the X axis. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/ProceduralSkyMaterial.xml b/doc/classes/ProceduralSkyMaterial.xml index c598a2c266..02e6a2d9f8 100644 --- a/doc/classes/ProceduralSkyMaterial.xml +++ b/doc/classes/ProceduralSkyMaterial.xml @@ -10,8 +10,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="ground_bottom_color" type="Color" setter="set_ground_bottom_color" getter="get_ground_bottom_color" default="Color(0.12, 0.12, 0.13, 1)"> Color of the ground at the bottom. Blends with [member ground_horizon_color]. @@ -44,6 +42,4 @@ How quickly the sun fades away between the edge of the sun disk and [member sun_angle_max]. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/ProgressBar.xml b/doc/classes/ProgressBar.xml index 8bd013c86c..88132967a0 100644 --- a/doc/classes/ProgressBar.xml +++ b/doc/classes/ProgressBar.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="percent_visible" type="bool" setter="set_percent_visible" getter="is_percent_visible" default="true"> If [code]true[/code], the fill percentage is displayed on the bar. @@ -17,8 +15,6 @@ <member name="size_flags_vertical" type="int" setter="set_v_size_flags" getter="get_v_size_flags" override="true" default="0" /> <member name="step" type="float" setter="set_step" getter="get_step" override="true" default="0.01" /> </members> - <constants> - </constants> <theme_items> <theme_item name="bg" data_type="style" type="StyleBox"> The style of the background. diff --git a/doc/classes/ProjectSettings.xml b/doc/classes/ProjectSettings.xml index 22ed14743a..b3872121bf 100644 --- a/doc/classes/ProjectSettings.xml +++ b/doc/classes/ProjectSettings.xml @@ -432,7 +432,7 @@ <member name="debug/settings/stdout/print_gpu_profile" type="bool" setter="" getter="" default="false"> </member> <member name="debug/settings/stdout/verbose_stdout" type="bool" setter="" getter="" default="false"> - Print more information to standard output when running. It displays information such as memory leaks, which scenes and resources are being loaded, etc. + Print more information to standard output when running. It displays information such as memory leaks, which scenes and resources are being loaded, etc. This can also be enabled using the [code]--verbose[/code] or [code]-v[/code] command line argument, even on an exported project. See also [method OS.is_stdout_verbose] and [method @GlobalScope.print_verbose]. </member> <member name="debug/settings/visual_script/max_call_stack" type="int" setter="" getter="" default="1024"> Maximum call stack in visual scripting, to avoid infinite recursion. @@ -1778,6 +1778,4 @@ If [code]true[/code], XR support is enabled in Godot, this ensures required shaders are compiled. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/PropertyTweener.xml b/doc/classes/PropertyTweener.xml index 7914b26676..71f56690d5 100644 --- a/doc/classes/PropertyTweener.xml +++ b/doc/classes/PropertyTweener.xml @@ -63,6 +63,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/ProxyTexture.xml b/doc/classes/ProxyTexture.xml index 4f25fbcdf9..09a9efaa7a 100644 --- a/doc/classes/ProxyTexture.xml +++ b/doc/classes/ProxyTexture.xml @@ -6,12 +6,8 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="base" type="Texture2D" setter="set_base" getter="get_base"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/QuadMesh.xml b/doc/classes/QuadMesh.xml index 4209e3db14..da7e74537a 100644 --- a/doc/classes/QuadMesh.xml +++ b/doc/classes/QuadMesh.xml @@ -10,8 +10,6 @@ <link title="GUI in 3D Demo">https://godotengine.org/asset-library/asset/127</link> <link title="2D in 3D Demo">https://godotengine.org/asset-library/asset/129</link> </tutorials> - <methods> - </methods> <members> <member name="center_offset" type="Vector3" setter="set_center_offset" getter="get_center_offset" default="Vector3(0, 0, 0)"> Offset of the generated Quad. Useful for particles. @@ -20,6 +18,4 @@ Size on the X and Y axes. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/RDAttachmentFormat.xml b/doc/classes/RDAttachmentFormat.xml index b73377bf77..0dea57b4ce 100644 --- a/doc/classes/RDAttachmentFormat.xml +++ b/doc/classes/RDAttachmentFormat.xml @@ -6,8 +6,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="format" type="int" setter="set_format" getter="get_format" enum="RenderingDevice.DataFormat" default="36"> </member> @@ -16,6 +14,4 @@ <member name="usage_flags" type="int" setter="set_usage_flags" getter="get_usage_flags" default="0"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/RDFramebufferPass.xml b/doc/classes/RDFramebufferPass.xml index c26c41f93f..4469a5d447 100644 --- a/doc/classes/RDFramebufferPass.xml +++ b/doc/classes/RDFramebufferPass.xml @@ -9,8 +9,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="color_attachments" type="PackedInt32Array" setter="set_color_attachments" getter="get_color_attachments" default="PackedInt32Array()"> Color attachments in order starting from 0. If this attachment is not used by the shader, pass ATTACHMENT_UNUSED to skip. diff --git a/doc/classes/RDPipelineColorBlendState.xml b/doc/classes/RDPipelineColorBlendState.xml index b672a053c7..6c740fb672 100644 --- a/doc/classes/RDPipelineColorBlendState.xml +++ b/doc/classes/RDPipelineColorBlendState.xml @@ -6,8 +6,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="attachments" type="RDPipelineColorBlendStateAttachment[]" setter="set_attachments" getter="get_attachments" default="[]"> </member> @@ -18,6 +16,4 @@ <member name="logic_op" type="int" setter="set_logic_op" getter="get_logic_op" enum="RenderingDevice.LogicOperation" default="0"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/RDPipelineColorBlendStateAttachment.xml b/doc/classes/RDPipelineColorBlendStateAttachment.xml index 30430d6670..c81da31367 100644 --- a/doc/classes/RDPipelineColorBlendStateAttachment.xml +++ b/doc/classes/RDPipelineColorBlendStateAttachment.xml @@ -37,6 +37,4 @@ <member name="write_r" type="bool" setter="set_write_r" getter="get_write_r" default="true"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/RDPipelineDepthStencilState.xml b/doc/classes/RDPipelineDepthStencilState.xml index 76e0506bca..678b576dea 100644 --- a/doc/classes/RDPipelineDepthStencilState.xml +++ b/doc/classes/RDPipelineDepthStencilState.xml @@ -6,8 +6,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="back_op_compare" type="int" setter="set_back_op_compare" getter="get_back_op_compare" enum="RenderingDevice.CompareOperator" default="7"> </member> @@ -52,6 +50,4 @@ <member name="front_op_write_mask" type="int" setter="set_front_op_write_mask" getter="get_front_op_write_mask" default="0"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/RDPipelineMultisampleState.xml b/doc/classes/RDPipelineMultisampleState.xml index b4345f1f8b..fc9b617956 100644 --- a/doc/classes/RDPipelineMultisampleState.xml +++ b/doc/classes/RDPipelineMultisampleState.xml @@ -6,8 +6,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="enable_alpha_to_coverage" type="bool" setter="set_enable_alpha_to_coverage" getter="get_enable_alpha_to_coverage" default="false"> </member> @@ -22,6 +20,4 @@ <member name="sample_masks" type="int[]" setter="set_sample_masks" getter="get_sample_masks" default="[]"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/RDPipelineRasterizationState.xml b/doc/classes/RDPipelineRasterizationState.xml index 3f8c50cf42..54a6923f87 100644 --- a/doc/classes/RDPipelineRasterizationState.xml +++ b/doc/classes/RDPipelineRasterizationState.xml @@ -6,8 +6,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="cull_mode" type="int" setter="set_cull_mode" getter="get_cull_mode" enum="RenderingDevice.PolygonCullMode" default="0"> </member> @@ -32,6 +30,4 @@ <member name="wireframe" type="bool" setter="set_wireframe" getter="get_wireframe" default="false"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/RDPipelineSpecializationConstant.xml b/doc/classes/RDPipelineSpecializationConstant.xml index 4d9481b846..301a860f26 100644 --- a/doc/classes/RDPipelineSpecializationConstant.xml +++ b/doc/classes/RDPipelineSpecializationConstant.xml @@ -6,14 +6,10 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="constant_id" type="int" setter="set_constant_id" getter="get_constant_id" default="0"> </member> <member name="value" type="Variant" setter="set_value" getter="get_value"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/RDSamplerState.xml b/doc/classes/RDSamplerState.xml index 9a9d55948c..259bf159a3 100644 --- a/doc/classes/RDSamplerState.xml +++ b/doc/classes/RDSamplerState.xml @@ -6,8 +6,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="anisotropy_max" type="float" setter="set_anisotropy_max" getter="get_anisotropy_max" default="1.0"> </member> @@ -40,6 +38,4 @@ <member name="use_anisotropy" type="bool" setter="set_use_anisotropy" getter="get_use_anisotropy" default="false"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/RDShaderFile.xml b/doc/classes/RDShaderFile.xml index 22fcf9867c..c46ab55b57 100644 --- a/doc/classes/RDShaderFile.xml +++ b/doc/classes/RDShaderFile.xml @@ -30,6 +30,4 @@ <member name="base_error" type="String" setter="set_base_error" getter="get_base_error" default=""""> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/RDShaderSPIRV.xml b/doc/classes/RDShaderSPIRV.xml index 20de8230aa..434b09b188 100644 --- a/doc/classes/RDShaderSPIRV.xml +++ b/doc/classes/RDShaderSPIRV.xml @@ -56,6 +56,4 @@ <member name="compile_error_vertex" type="String" setter="set_stage_compile_error" getter="get_stage_compile_error" default=""""> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/RDShaderSource.xml b/doc/classes/RDShaderSource.xml index 2d37ce37f2..4788bca7f4 100644 --- a/doc/classes/RDShaderSource.xml +++ b/doc/classes/RDShaderSource.xml @@ -35,6 +35,4 @@ <member name="source_vertex" type="String" setter="set_stage_source" getter="get_stage_source" default=""""> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/RDTextureFormat.xml b/doc/classes/RDTextureFormat.xml index 2588dcfc40..e4a6df199f 100644 --- a/doc/classes/RDTextureFormat.xml +++ b/doc/classes/RDTextureFormat.xml @@ -40,6 +40,4 @@ <member name="width" type="int" setter="set_width" getter="get_width" default="1"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/RDTextureView.xml b/doc/classes/RDTextureView.xml index db140ae775..441d1f4079 100644 --- a/doc/classes/RDTextureView.xml +++ b/doc/classes/RDTextureView.xml @@ -6,8 +6,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="format_override" type="int" setter="set_format_override" getter="get_format_override" enum="RenderingDevice.DataFormat" default="226"> </member> @@ -20,6 +18,4 @@ <member name="swizzle_r" type="int" setter="set_swizzle_r" getter="get_swizzle_r" enum="RenderingDevice.TextureSwizzle" default="3"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/RDUniform.xml b/doc/classes/RDUniform.xml index 93adecc7de..4de90aa3dc 100644 --- a/doc/classes/RDUniform.xml +++ b/doc/classes/RDUniform.xml @@ -30,6 +30,4 @@ <member name="uniform_type" type="int" setter="set_uniform_type" getter="get_uniform_type" enum="RenderingDevice.UniformType" default="3"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/RDVertexAttribute.xml b/doc/classes/RDVertexAttribute.xml index 3499918cc8..17a55260c7 100644 --- a/doc/classes/RDVertexAttribute.xml +++ b/doc/classes/RDVertexAttribute.xml @@ -6,8 +6,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="format" type="int" setter="set_format" getter="get_format" enum="RenderingDevice.DataFormat" default="226"> </member> @@ -20,6 +18,4 @@ <member name="stride" type="int" setter="set_stride" getter="get_stride" default="0"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/RID.xml b/doc/classes/RID.xml index 424a76ee44..b4ba74f7e5 100644 --- a/doc/classes/RID.xml +++ b/doc/classes/RID.xml @@ -75,6 +75,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/RandomNumberGenerator.xml b/doc/classes/RandomNumberGenerator.xml index fed6568d22..c011755df1 100644 --- a/doc/classes/RandomNumberGenerator.xml +++ b/doc/classes/RandomNumberGenerator.xml @@ -86,6 +86,4 @@ [b]Note:[/b] Do not set state to arbitrary values, since the random number generator requires the state to have certain qualities to behave properly. It should only be set to values that came from the state property itself. To initialize the random number generator with arbitrary input, use [member seed] instead. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/Range.xml b/doc/classes/Range.xml index 30b915b437..2926f93c8a 100644 --- a/doc/classes/Range.xml +++ b/doc/classes/Range.xml @@ -68,6 +68,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/RayCast2D.xml b/doc/classes/RayCast2D.xml index 1d32db8078..ce5d48cfa4 100644 --- a/doc/classes/RayCast2D.xml +++ b/doc/classes/RayCast2D.xml @@ -122,6 +122,4 @@ The ray's destination point, relative to the RayCast's [code]position[/code]. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/RayCast3D.xml b/doc/classes/RayCast3D.xml index 8628ab7dac..c7253e81c4 100644 --- a/doc/classes/RayCast3D.xml +++ b/doc/classes/RayCast3D.xml @@ -131,6 +131,4 @@ The ray's destination point, relative to the RayCast's [code]position[/code]. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/Rect2.xml b/doc/classes/Rect2.xml index fa8c57cd0c..e585224818 100644 --- a/doc/classes/Rect2.xml +++ b/doc/classes/Rect2.xml @@ -194,6 +194,4 @@ If the size is negative, you can use [method abs] to fix it. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/Rect2i.xml b/doc/classes/Rect2i.xml index 00a8cf01c6..2f6f4de66d 100644 --- a/doc/classes/Rect2i.xml +++ b/doc/classes/Rect2i.xml @@ -179,6 +179,4 @@ If the size is negative, you can use [method abs] to fix it. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/RectangleShape2D.xml b/doc/classes/RectangleShape2D.xml index f2795ae4a1..add8da181a 100644 --- a/doc/classes/RectangleShape2D.xml +++ b/doc/classes/RectangleShape2D.xml @@ -10,13 +10,9 @@ <link title="2D Pong Demo">https://godotengine.org/asset-library/asset/121</link> <link title="2D Kinematic Character Demo">https://godotengine.org/asset-library/asset/113</link> </tutorials> - <methods> - </methods> <members> <member name="size" type="Vector2" setter="set_size" getter="get_size" default="Vector2(20, 20)"> The rectangle's width and height. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/RefCounted.xml b/doc/classes/RefCounted.xml index bf52c34777..5f18ccc14d 100644 --- a/doc/classes/RefCounted.xml +++ b/doc/classes/RefCounted.xml @@ -35,6 +35,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/ReferenceRect.xml b/doc/classes/ReferenceRect.xml index df9a6f0a46..1db6879b45 100644 --- a/doc/classes/ReferenceRect.xml +++ b/doc/classes/ReferenceRect.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="border_color" type="Color" setter="set_border_color" getter="get_border_color" default="Color(1, 0, 0, 1)"> Sets the border [Color] of the [ReferenceRect]. @@ -21,6 +19,4 @@ If set to [code]true[/code], the [ReferenceRect] will only be visible while in editor. Otherwise, [ReferenceRect] will be visible in game. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/ReflectionProbe.xml b/doc/classes/ReflectionProbe.xml index db01faced8..7f2bd118d6 100644 --- a/doc/classes/ReflectionProbe.xml +++ b/doc/classes/ReflectionProbe.xml @@ -10,8 +10,6 @@ <tutorials> <link title="Reflection probes">https://docs.godotengine.org/en/latest/tutorials/3d/reflection_probes.html</link> </tutorials> - <methods> - </methods> <members> <member name="ambient_color" type="Color" setter="set_ambient_color" getter="get_ambient_color" default="Color(0, 0, 0, 1)"> </member> diff --git a/doc/classes/RemoteTransform2D.xml b/doc/classes/RemoteTransform2D.xml index 613726b555..c9be26a985 100644 --- a/doc/classes/RemoteTransform2D.xml +++ b/doc/classes/RemoteTransform2D.xml @@ -34,6 +34,4 @@ If [code]true[/code], global coordinates are used. If [code]false[/code], local coordinates are used. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/RemoteTransform3D.xml b/doc/classes/RemoteTransform3D.xml index cc19d5c25d..de727e719d 100644 --- a/doc/classes/RemoteTransform3D.xml +++ b/doc/classes/RemoteTransform3D.xml @@ -34,6 +34,4 @@ If [code]true[/code], global coordinates are used. If [code]false[/code], local coordinates are used. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/Resource.xml b/doc/classes/Resource.xml index efb0339aa7..45b68f342c 100644 --- a/doc/classes/Resource.xml +++ b/doc/classes/Resource.xml @@ -84,6 +84,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/ResourceFormatSaver.xml b/doc/classes/ResourceFormatSaver.xml index 7ee8875321..8d48de9378 100644 --- a/doc/classes/ResourceFormatSaver.xml +++ b/doc/classes/ResourceFormatSaver.xml @@ -35,6 +35,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/ResourceImporter.xml b/doc/classes/ResourceImporter.xml index 03d47ee518..9f551ad1d2 100644 --- a/doc/classes/ResourceImporter.xml +++ b/doc/classes/ResourceImporter.xml @@ -9,8 +9,6 @@ <tutorials> <link title="Import plugins">https://docs.godotengine.org/en/latest/tutorials/plugins/editor/import_plugins.html</link> </tutorials> - <methods> - </methods> <constants> <constant name="IMPORT_ORDER_DEFAULT" value="0" enum="ImportOrder"> The default import order. diff --git a/doc/classes/ResourcePreloader.xml b/doc/classes/ResourcePreloader.xml index 8ac8717581..565578cb22 100644 --- a/doc/classes/ResourcePreloader.xml +++ b/doc/classes/ResourcePreloader.xml @@ -54,6 +54,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/RibbonTrailMesh.xml b/doc/classes/RibbonTrailMesh.xml index 771f2e444b..c2e9c14bab 100644 --- a/doc/classes/RibbonTrailMesh.xml +++ b/doc/classes/RibbonTrailMesh.xml @@ -6,8 +6,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="curve" type="Curve" setter="set_curve" getter="get_curve"> </member> diff --git a/doc/classes/RichTextEffect.xml b/doc/classes/RichTextEffect.xml index fd93f6be56..cf4b4f4a48 100644 --- a/doc/classes/RichTextEffect.xml +++ b/doc/classes/RichTextEffect.xml @@ -31,6 +31,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/RootMotionView.xml b/doc/classes/RootMotionView.xml index e31ea9265e..5db13de44f 100644 --- a/doc/classes/RootMotionView.xml +++ b/doc/classes/RootMotionView.xml @@ -10,8 +10,6 @@ <tutorials> <link title="Using AnimationTree - Root motion">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html#root-motion</link> </tutorials> - <methods> - </methods> <members> <member name="animation_path" type="NodePath" setter="set_animation_path" getter="get_animation_path"> Path to an [AnimationTree] node to use as a basis for root motion. @@ -29,6 +27,4 @@ If [code]true[/code], the grid's points will all be on the same Y coordinate ([i]local[/i] Y = 0). If [code]false[/code], the points' original Y coordinate is preserved. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/SceneTree.xml b/doc/classes/SceneTree.xml index 9a38e52b23..8d7427611a 100644 --- a/doc/classes/SceneTree.xml +++ b/doc/classes/SceneTree.xml @@ -18,7 +18,7 @@ <argument index="0" name="group" type="StringName" /> <argument index="1" name="method" type="StringName" /> <description> - Calls [code]method[/code] on each member of the given group. You can pass arguments to [code]method[/code] by specifying them at the end of the method call. + Calls [code]method[/code] on each member of the given group. You can pass arguments to [code]method[/code] by specifying them at the end of the method call. This method is equivalent of calling [method call_group_flags] with [constant GROUP_CALL_DEFAULT] flag. [b]Note:[/b] [method call_group] will always call methods with an one-frame delay, in a way similar to [method Object.call_deferred]. To call methods immediately, use [method call_group_flags] with the [constant GROUP_CALL_REALTIME] flag. </description> </method> @@ -29,7 +29,9 @@ <argument index="2" name="method" type="StringName" /> <description> Calls [code]method[/code] on each member of the given group, respecting the given [enum GroupCallFlags]. You can pass arguments to [code]method[/code] by specifying them at the end of the method call. - [b]Note:[/b] Group call flags are used to control the method calling behavior. If the [constant GROUP_CALL_REALTIME] flag is present in the [code]flags[/code] argument, methods will be called immediately. If this flag isn't present in [code]flags[/code], methods will be called with a one-frame delay in a way similar to [method call_group]. + [codeblock] + get_tree().call_group_flags(SceneTree.GROUP_CALL_REALTIME | SceneTree.GROUP_CALL_REVERSE, "bases", "destroy") # Call the method immediately and in reverse order. + [/codeblock] </description> </method> <method name="change_scene"> diff --git a/doc/classes/SceneTreeTimer.xml b/doc/classes/SceneTreeTimer.xml index 4eef754345..f97c5e42b5 100644 --- a/doc/classes/SceneTreeTimer.xml +++ b/doc/classes/SceneTreeTimer.xml @@ -25,8 +25,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="time_left" type="float" setter="set_time_left" getter="get_time_left"> The time remaining. @@ -39,6 +37,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/Script.xml b/doc/classes/Script.xml index 843d8ef9cb..b7a4f448b0 100644 --- a/doc/classes/Script.xml +++ b/doc/classes/Script.xml @@ -99,6 +99,4 @@ The script source code or an empty string if source code is not available. When set, does not reload the class implementation automatically. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/ScriptCreateDialog.xml b/doc/classes/ScriptCreateDialog.xml index 189bfdc3b8..349adb9111 100644 --- a/doc/classes/ScriptCreateDialog.xml +++ b/doc/classes/ScriptCreateDialog.xml @@ -50,6 +50,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/ScriptEditor.xml b/doc/classes/ScriptEditor.xml index 628be54e1d..faad8f8cae 100644 --- a/doc/classes/ScriptEditor.xml +++ b/doc/classes/ScriptEditor.xml @@ -79,6 +79,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/ScriptEditorBase.xml b/doc/classes/ScriptEditorBase.xml index 08baa705e8..1e72fe9090 100644 --- a/doc/classes/ScriptEditorBase.xml +++ b/doc/classes/ScriptEditorBase.xml @@ -64,6 +64,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/ScrollBar.xml b/doc/classes/ScrollBar.xml index b1eb9c012b..1f1415bebe 100644 --- a/doc/classes/ScrollBar.xml +++ b/doc/classes/ScrollBar.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="custom_step" type="float" setter="set_custom_step" getter="get_custom_step" default="-1.0"> Overrides the step used when clicking increment and decrement buttons or when using arrow keys when the [ScrollBar] is focused. @@ -24,6 +22,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/ScrollContainer.xml b/doc/classes/ScrollContainer.xml index 953ab24748..1cf8c6cb54 100644 --- a/doc/classes/ScrollContainer.xml +++ b/doc/classes/ScrollContainer.xml @@ -69,8 +69,6 @@ </description> </signal> </signals> - <constants> - </constants> <theme_items> <theme_item name="bg" data_type="style" type="StyleBox"> The background [StyleBox] of the [ScrollContainer]. diff --git a/doc/classes/SegmentShape2D.xml b/doc/classes/SegmentShape2D.xml index 341c5e9d20..799884257f 100644 --- a/doc/classes/SegmentShape2D.xml +++ b/doc/classes/SegmentShape2D.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="a" type="Vector2" setter="set_a" getter="get_a" default="Vector2(0, 0)"> The segment's first point position. @@ -18,6 +16,4 @@ The segment's second point position. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/Semaphore.xml b/doc/classes/Semaphore.xml index 7794161ac4..2f3fa021d4 100644 --- a/doc/classes/Semaphore.xml +++ b/doc/classes/Semaphore.xml @@ -29,6 +29,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/SeparationRayShape2D.xml b/doc/classes/SeparationRayShape2D.xml index fb90606577..ccb7a12882 100644 --- a/doc/classes/SeparationRayShape2D.xml +++ b/doc/classes/SeparationRayShape2D.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="length" type="float" setter="set_length" getter="get_length" default="20.0"> The ray's length. @@ -19,6 +17,4 @@ If [code]true[/code], the shape can return the correct normal and separate in any direction, allowing sliding motion on slopes. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/SeparationRayShape3D.xml b/doc/classes/SeparationRayShape3D.xml index ea57e4eb59..877e8545eb 100644 --- a/doc/classes/SeparationRayShape3D.xml +++ b/doc/classes/SeparationRayShape3D.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="length" type="float" setter="set_length" getter="get_length" default="1.0"> The ray's length. @@ -19,6 +17,4 @@ If [code]true[/code], the shape can return the correct normal and separate in any direction, allowing sliding motion on slopes. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/Separator.xml b/doc/classes/Separator.xml index ef79851aab..80310e912f 100644 --- a/doc/classes/Separator.xml +++ b/doc/classes/Separator.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/ShaderGlobalsOverride.xml b/doc/classes/ShaderGlobalsOverride.xml index 2aa00aa5a9..babda1707e 100644 --- a/doc/classes/ShaderGlobalsOverride.xml +++ b/doc/classes/ShaderGlobalsOverride.xml @@ -6,8 +6,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/ShaderMaterial.xml b/doc/classes/ShaderMaterial.xml index fe3ddc1b60..13f2e2fe5f 100644 --- a/doc/classes/ShaderMaterial.xml +++ b/doc/classes/ShaderMaterial.xml @@ -45,6 +45,4 @@ The [Shader] program used to render this material. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/Shape2D.xml b/doc/classes/Shape2D.xml index c1191aa9de..04f91d19da 100644 --- a/doc/classes/Shape2D.xml +++ b/doc/classes/Shape2D.xml @@ -68,6 +68,4 @@ The shape's custom solver bias. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/Shape3D.xml b/doc/classes/Shape3D.xml index 5fd16d8d36..96f8833486 100644 --- a/doc/classes/Shape3D.xml +++ b/doc/classes/Shape3D.xml @@ -23,6 +23,4 @@ Collision margins allow collision detection to be more efficient by adding an extra shell around shapes. Collision algorithms are more expensive when objects overlap by more than their margin, so a higher value for margins is better for performance, at the cost of accuracy around edges as it makes them less sharp. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/Shortcut.xml b/doc/classes/Shortcut.xml index d9f7f98888..9fbe91f38b 100644 --- a/doc/classes/Shortcut.xml +++ b/doc/classes/Shortcut.xml @@ -36,6 +36,4 @@ Generally the [InputEvent] is a keyboard key, though it can be any [InputEvent], including an [InputEventAction]. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/Signal.xml b/doc/classes/Signal.xml index 11107c093d..b70725123b 100644 --- a/doc/classes/Signal.xml +++ b/doc/classes/Signal.xml @@ -110,6 +110,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/Skeleton2D.xml b/doc/classes/Skeleton2D.xml index 839193fb61..7aa06985bf 100644 --- a/doc/classes/Skeleton2D.xml +++ b/doc/classes/Skeleton2D.xml @@ -78,6 +78,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/SkeletonIK3D.xml b/doc/classes/SkeletonIK3D.xml index 93cdd770cc..6673e0657c 100644 --- a/doc/classes/SkeletonIK3D.xml +++ b/doc/classes/SkeletonIK3D.xml @@ -52,6 +52,4 @@ <member name="use_magnet" type="bool" setter="set_use_magnet" getter="is_using_magnet" default="false"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/SkeletonModification2D.xml b/doc/classes/SkeletonModification2D.xml index cff55b6a17..815b97a271 100644 --- a/doc/classes/SkeletonModification2D.xml +++ b/doc/classes/SkeletonModification2D.xml @@ -82,6 +82,4 @@ The execution mode for the modification. This tells the modification stack when to execute the modification. Some modifications have settings that are only available in certain execution modes. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/SkeletonModification2DCCDIK.xml b/doc/classes/SkeletonModification2DCCDIK.xml index f876615de7..ab9a482609 100644 --- a/doc/classes/SkeletonModification2DCCDIK.xml +++ b/doc/classes/SkeletonModification2DCCDIK.xml @@ -130,6 +130,4 @@ The end position of the CCDIK chain. Typically, this should be a child of a [Bone2D] node attached to the final [Bone2D] in the CCDIK chain. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/SkeletonModification2DFABRIK.xml b/doc/classes/SkeletonModification2DFABRIK.xml index 314405498a..16c22a45d3 100644 --- a/doc/classes/SkeletonModification2DFABRIK.xml +++ b/doc/classes/SkeletonModification2DFABRIK.xml @@ -83,6 +83,4 @@ The NodePath to the node that is the target for the FABRIK modification. This node is what the FABRIK chain will attempt to rotate the bone chain to. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/SkeletonModification2DJiggle.xml b/doc/classes/SkeletonModification2DJiggle.xml index 8d3732e225..13dfbc0633 100644 --- a/doc/classes/SkeletonModification2DJiggle.xml +++ b/doc/classes/SkeletonModification2DJiggle.xml @@ -181,6 +181,4 @@ Whether the gravity vector, [member gravity], should be applied to the Jiggle joints, assuming they are not overriding the default settings. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/SkeletonModification2DLookAt.xml b/doc/classes/SkeletonModification2DLookAt.xml index 998a897d20..90b727e194 100644 --- a/doc/classes/SkeletonModification2DLookAt.xml +++ b/doc/classes/SkeletonModification2DLookAt.xml @@ -87,6 +87,4 @@ The NodePath to the node that is the target for the LookAt modification. This node is what the modification will rotate the [Bone2D] to. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/SkeletonModification2DPhysicalBones.xml b/doc/classes/SkeletonModification2DPhysicalBones.xml index e6bcb3c9d7..44572f2c67 100644 --- a/doc/classes/SkeletonModification2DPhysicalBones.xml +++ b/doc/classes/SkeletonModification2DPhysicalBones.xml @@ -53,6 +53,4 @@ The amount of [PhysicalBone2D] nodes linked in this modification. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/SkeletonModification2DStackHolder.xml b/doc/classes/SkeletonModification2DStackHolder.xml index e5d9f2194a..35ab52ea99 100644 --- a/doc/classes/SkeletonModification2DStackHolder.xml +++ b/doc/classes/SkeletonModification2DStackHolder.xml @@ -24,6 +24,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/SkeletonModification2DTwoBoneIK.xml b/doc/classes/SkeletonModification2DTwoBoneIK.xml index 25ee981d5d..b7a2faedbb 100644 --- a/doc/classes/SkeletonModification2DTwoBoneIK.xml +++ b/doc/classes/SkeletonModification2DTwoBoneIK.xml @@ -77,6 +77,4 @@ The NodePath to the node that is the target for the TwoBoneIK modification. This node is what the modification will use when bending the [Bone2D] nodes. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/SkeletonModification3D.xml b/doc/classes/SkeletonModification3D.xml index 48b8a905b9..c544473163 100644 --- a/doc/classes/SkeletonModification3D.xml +++ b/doc/classes/SkeletonModification3D.xml @@ -63,6 +63,4 @@ The execution mode for the modification. This tells the modification stack when to execute the modification. Some modifications have settings that are only availible in certain execution modes. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/SkeletonModification3DCCDIK.xml b/doc/classes/SkeletonModification3DCCDIK.xml index aa7ddad56e..ef3200a07a 100644 --- a/doc/classes/SkeletonModification3DCCDIK.xml +++ b/doc/classes/SkeletonModification3DCCDIK.xml @@ -133,6 +133,4 @@ The end position of the CCDIK chain. Typically, this should be a child of a [BoneAttachment3D] node attached to the final bone in the CCDIK chain, where the child node is offset so it is at the end of the final bone. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/SkeletonModification3DFABRIK.xml b/doc/classes/SkeletonModification3DFABRIK.xml index 7058e37e94..4c4e01e9d1 100644 --- a/doc/classes/SkeletonModification3DFABRIK.xml +++ b/doc/classes/SkeletonModification3DFABRIK.xml @@ -158,6 +158,4 @@ The NodePath to the node that is the target for the FABRIK modification. This node is what the FABRIK chain will attempt to rotate the bone chain to. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/SkeletonModification3DJiggle.xml b/doc/classes/SkeletonModification3DJiggle.xml index 6cc1c0b266..3c724229bd 100644 --- a/doc/classes/SkeletonModification3DJiggle.xml +++ b/doc/classes/SkeletonModification3DJiggle.xml @@ -196,6 +196,4 @@ Whether the gravity vector, [member gravity], should be applied to the Jiggle joints, assuming they are not overriding the default settings. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/SkeletonModification3DLookAt.xml b/doc/classes/SkeletonModification3DLookAt.xml index c01d764cff..9b34644757 100644 --- a/doc/classes/SkeletonModification3DLookAt.xml +++ b/doc/classes/SkeletonModification3DLookAt.xml @@ -61,6 +61,4 @@ The NodePath to the node that is the target for the modification. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/SkeletonModification3DStackHolder.xml b/doc/classes/SkeletonModification3DStackHolder.xml index bb923b680d..138f9818ab 100644 --- a/doc/classes/SkeletonModification3DStackHolder.xml +++ b/doc/classes/SkeletonModification3DStackHolder.xml @@ -24,6 +24,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/SkeletonModification3DTwoBoneIK.xml b/doc/classes/SkeletonModification3DTwoBoneIK.xml index 5c863367df..80f8ba4e5b 100644 --- a/doc/classes/SkeletonModification3DTwoBoneIK.xml +++ b/doc/classes/SkeletonModification3DTwoBoneIK.xml @@ -188,6 +188,4 @@ The NodePath to the node that is the target for the TwoBoneIK modification. This node is what the modification will attempt to rotate the bones to reach. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/SkeletonModificationStack2D.xml b/doc/classes/SkeletonModificationStack2D.xml index 97b8e3b945..9b96c9e6d5 100644 --- a/doc/classes/SkeletonModificationStack2D.xml +++ b/doc/classes/SkeletonModificationStack2D.xml @@ -86,6 +86,4 @@ The interpolation strength of the modifications in stack. A value of [code]0[/code] will make it where the modifications are not applied, a strength of [code]0.5[/code] will be half applied, and a strength of [code]1[/code] will allow the modifications to be fully applied and override the [Skeleton2D] [Bone2D] poses. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/SkeletonModificationStack3D.xml b/doc/classes/SkeletonModificationStack3D.xml index 4e5e9d72d8..4035e39410 100644 --- a/doc/classes/SkeletonModificationStack3D.xml +++ b/doc/classes/SkeletonModificationStack3D.xml @@ -85,6 +85,4 @@ The interpolation strength of the modifications in stack. A value of [code]0[/code] will make it where the modifications are not applied, a strength of [code]0.5[/code] will be half applied, and a strength of [code]1[/code] will allow the modifications to be fully applied and override the skeleton bone poses. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/Skin.xml b/doc/classes/Skin.xml index 67ca36f4d6..d24963a887 100644 --- a/doc/classes/Skin.xml +++ b/doc/classes/Skin.xml @@ -70,6 +70,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/SkinReference.xml b/doc/classes/SkinReference.xml index d0634c543c..f8bbc27363 100644 --- a/doc/classes/SkinReference.xml +++ b/doc/classes/SkinReference.xml @@ -18,6 +18,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/Sky.xml b/doc/classes/Sky.xml index d9553a3be3..79a9bd4b31 100644 --- a/doc/classes/Sky.xml +++ b/doc/classes/Sky.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="process_mode" type="int" setter="set_process_mode" getter="get_process_mode" enum="Sky.ProcessMode" default="0"> Sets the method for generating the radiance map from the sky. The radiance map is a cubemap with increasingly blurry versions of the sky corresponding to different levels of roughness. Radiance maps can be expensive to calculate. See [enum ProcessMode] for options. diff --git a/doc/classes/Slider.xml b/doc/classes/Slider.xml index f18b2ce39f..21a45645b8 100644 --- a/doc/classes/Slider.xml +++ b/doc/classes/Slider.xml @@ -9,8 +9,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="editable" type="bool" setter="set_editable" getter="is_editable" default="true"> If [code]true[/code], the slider can be interacted with. If [code]false[/code], the value can be changed only by code. @@ -27,6 +25,4 @@ If [code]true[/code], the slider will display ticks for minimum and maximum values. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/SphereMesh.xml b/doc/classes/SphereMesh.xml index 439fe11861..674b583e3d 100644 --- a/doc/classes/SphereMesh.xml +++ b/doc/classes/SphereMesh.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="height" type="float" setter="set_height" getter="get_height" default="2.0"> Full height of the sphere. @@ -28,6 +26,4 @@ Number of segments along the height of the sphere. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/SphereShape3D.xml b/doc/classes/SphereShape3D.xml index e90493fca2..5f0f5c1052 100644 --- a/doc/classes/SphereShape3D.xml +++ b/doc/classes/SphereShape3D.xml @@ -9,13 +9,9 @@ <tutorials> <link title="3D Physics Tests Demo">https://godotengine.org/asset-library/asset/675</link> </tutorials> - <methods> - </methods> <members> <member name="radius" type="float" setter="set_radius" getter="get_radius" default="1.0"> The sphere's radius. The shape's diameter is double the radius. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/SpinBox.xml b/doc/classes/SpinBox.xml index 4303fa52f1..33d2b472b5 100644 --- a/doc/classes/SpinBox.xml +++ b/doc/classes/SpinBox.xml @@ -55,9 +55,10 @@ <member name="suffix" type="String" setter="set_suffix" getter="get_suffix" default=""""> Adds the specified [code]suffix[/code] string after the numerical value of the [SpinBox]. </member> + <member name="update_on_text_changed" type="bool" setter="set_update_on_text_changed" getter="get_update_on_text_changed" default="false"> + Sets the value of the [Range] for this [SpinBox] when the [LineEdit] text is [i]changed[/i] instead of [i]submitted[/i]. See [signal LineEdit.text_changed] and [signal LineEdit.text_submitted]. + </member> </members> - <constants> - </constants> <theme_items> <theme_item name="updown" data_type="icon" type="Texture2D"> Sets a custom [Texture2D] for up and down arrows of the [SpinBox]. diff --git a/doc/classes/SpotLight3D.xml b/doc/classes/SpotLight3D.xml index fde40ba6de..8c10ec36a8 100644 --- a/doc/classes/SpotLight3D.xml +++ b/doc/classes/SpotLight3D.xml @@ -10,8 +10,6 @@ <link title="3D lights and shadows">https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html</link> <link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link> </tutorials> - <methods> - </methods> <members> <member name="shadow_bias" type="float" setter="set_param" getter="get_param" override="true" default="0.03" /> <member name="spot_angle" type="float" setter="set_param" getter="get_param" default="45.0"> @@ -27,6 +25,4 @@ The maximal range that can be reached by the spotlight. Note that the effectively lit area may appear to be smaller depending on the [member spot_attenuation] in use. No matter the [member spot_attenuation] in use, the light will never reach anything outside this range. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/SpringArm3D.xml b/doc/classes/SpringArm3D.xml index 50aa3d39b8..2cd8fa71cf 100644 --- a/doc/classes/SpringArm3D.xml +++ b/doc/classes/SpringArm3D.xml @@ -57,6 +57,4 @@ To know more about how to perform a shape cast or a ray cast, please consult the [PhysicsDirectSpaceState3D] documentation. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/Sprite2D.xml b/doc/classes/Sprite2D.xml index 0b26fdc055..b9d13a1287 100644 --- a/doc/classes/Sprite2D.xml +++ b/doc/classes/Sprite2D.xml @@ -98,6 +98,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/Sprite3D.xml b/doc/classes/Sprite3D.xml index ddb9d543e8..5a7fd537e0 100644 --- a/doc/classes/Sprite3D.xml +++ b/doc/classes/Sprite3D.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="frame" type="int" setter="set_frame" getter="get_frame" default="0"> Current frame to display from sprite sheet. [member hframes] or [member vframes] must be greater than 1. @@ -39,6 +37,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/SpriteFrames.xml b/doc/classes/SpriteFrames.xml index 3bd40ff6f4..660afb5a89 100644 --- a/doc/classes/SpriteFrames.xml +++ b/doc/classes/SpriteFrames.xml @@ -135,6 +135,4 @@ Compatibility property, always equals to an empty array. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/StandardMaterial3D.xml b/doc/classes/StandardMaterial3D.xml index 4ed9146e0f..8a36a734f1 100644 --- a/doc/classes/StandardMaterial3D.xml +++ b/doc/classes/StandardMaterial3D.xml @@ -6,8 +6,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/StaticBody2D.xml b/doc/classes/StaticBody2D.xml index 9cbe0bdb40..0a90f430e6 100644 --- a/doc/classes/StaticBody2D.xml +++ b/doc/classes/StaticBody2D.xml @@ -12,8 +12,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="constant_angular_velocity" type="float" setter="set_constant_angular_velocity" getter="get_constant_angular_velocity" default="0.0"> The body's constant angular velocity. This does not rotate the body, but affects touching bodies, as if it were rotating. @@ -26,6 +24,4 @@ If a material is assigned to this property, it will be used instead of any other physics material, such as an inherited one. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/StaticBody3D.xml b/doc/classes/StaticBody3D.xml index 6e2377def0..d1ef8cd321 100644 --- a/doc/classes/StaticBody3D.xml +++ b/doc/classes/StaticBody3D.xml @@ -15,8 +15,6 @@ <link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link> <link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link> </tutorials> - <methods> - </methods> <members> <member name="constant_angular_velocity" type="Vector3" setter="set_constant_angular_velocity" getter="get_constant_angular_velocity" default="Vector3(0, 0, 0)"> The body's constant angular velocity. This does not rotate the body, but affects touching bodies, as if it were rotating. @@ -29,6 +27,4 @@ If a material is assigned to this property, it will be used instead of any other physics material, such as an inherited one. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/StreamCubemap.xml b/doc/classes/StreamCubemap.xml index 16648266eb..2e7ee8e6db 100644 --- a/doc/classes/StreamCubemap.xml +++ b/doc/classes/StreamCubemap.xml @@ -6,8 +6,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/StreamCubemapArray.xml b/doc/classes/StreamCubemapArray.xml index b84973fd14..326226b5ab 100644 --- a/doc/classes/StreamCubemapArray.xml +++ b/doc/classes/StreamCubemapArray.xml @@ -6,8 +6,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/StreamPeer.xml b/doc/classes/StreamPeer.xml index e3d77d22c5..316bd77a16 100644 --- a/doc/classes/StreamPeer.xml +++ b/doc/classes/StreamPeer.xml @@ -241,6 +241,4 @@ If [code]true[/code], this [StreamPeer] will using big-endian format for encoding and decoding. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/StreamPeerBuffer.xml b/doc/classes/StreamPeerBuffer.xml index 62476ca166..989864760f 100644 --- a/doc/classes/StreamPeerBuffer.xml +++ b/doc/classes/StreamPeerBuffer.xml @@ -44,6 +44,4 @@ <member name="data_array" type="PackedByteArray" setter="set_data_array" getter="get_data_array" default="PackedByteArray()"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/StreamTexture2D.xml b/doc/classes/StreamTexture2D.xml index 7b6c594786..fb32f1e5d9 100644 --- a/doc/classes/StreamTexture2D.xml +++ b/doc/classes/StreamTexture2D.xml @@ -22,6 +22,4 @@ The StreamTexture's file path to a [code].stex[/code] file. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/StreamTexture2DArray.xml b/doc/classes/StreamTexture2DArray.xml index ec545b24d0..7ecd3734f7 100644 --- a/doc/classes/StreamTexture2DArray.xml +++ b/doc/classes/StreamTexture2DArray.xml @@ -6,8 +6,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/StreamTexture3D.xml b/doc/classes/StreamTexture3D.xml index 4b2eb16ba3..1892676935 100644 --- a/doc/classes/StreamTexture3D.xml +++ b/doc/classes/StreamTexture3D.xml @@ -18,6 +18,4 @@ <member name="load_path" type="String" setter="load" getter="get_load_path" default=""""> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/StreamTextureLayered.xml b/doc/classes/StreamTextureLayered.xml index 888fb339db..7793bf8420 100644 --- a/doc/classes/StreamTextureLayered.xml +++ b/doc/classes/StreamTextureLayered.xml @@ -18,6 +18,4 @@ <member name="load_path" type="String" setter="load" getter="get_load_path" default=""""> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/String.xml b/doc/classes/String.xml index dceaf87afa..0991788483 100644 --- a/doc/classes/String.xml +++ b/doc/classes/String.xml @@ -843,6 +843,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/StringName.xml b/doc/classes/StringName.xml index b4289b5564..113195d91c 100644 --- a/doc/classes/StringName.xml +++ b/doc/classes/StringName.xml @@ -64,6 +64,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/StyleBox.xml b/doc/classes/StyleBox.xml index 024524251d..6bcd485656 100644 --- a/doc/classes/StyleBox.xml +++ b/doc/classes/StyleBox.xml @@ -95,6 +95,4 @@ Refer to [member content_margin_bottom] for extra considerations. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/StyleBoxEmpty.xml b/doc/classes/StyleBoxEmpty.xml index 8781cdcde3..91a9f37f53 100644 --- a/doc/classes/StyleBoxEmpty.xml +++ b/doc/classes/StyleBoxEmpty.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/StyleBoxFlat.xml b/doc/classes/StyleBoxFlat.xml index 40f6075528..7bd68aa583 100644 --- a/doc/classes/StyleBoxFlat.xml +++ b/doc/classes/StyleBoxFlat.xml @@ -188,6 +188,4 @@ The shadow size in pixels. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/StyleBoxLine.xml b/doc/classes/StyleBoxLine.xml index 850c656720..f2f8679b3e 100644 --- a/doc/classes/StyleBoxLine.xml +++ b/doc/classes/StyleBoxLine.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="color" type="Color" setter="set_color" getter="get_color" default="Color(0, 0, 0, 1)"> The line's color. @@ -27,6 +25,4 @@ If [code]true[/code], the line will be vertical. If [code]false[/code], the line will be horizontal. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/SubViewport.xml b/doc/classes/SubViewport.xml index 9c5610e2c7..28866699f6 100644 --- a/doc/classes/SubViewport.xml +++ b/doc/classes/SubViewport.xml @@ -15,8 +15,6 @@ <link title="Dynamic Split Screen Demo">https://godotengine.org/asset-library/asset/541</link> <link title="3D Viewport Scaling Demo">https://godotengine.org/asset-library/asset/586</link> </tutorials> - <methods> - </methods> <members> <member name="render_target_clear_mode" type="int" setter="set_clear_mode" getter="get_clear_mode" enum="SubViewport.ClearMode" default="0"> The clear mode when the sub-viewport is used as a render target. diff --git a/doc/classes/SubViewportContainer.xml b/doc/classes/SubViewportContainer.xml index 16d483e7f8..9a4985c98c 100644 --- a/doc/classes/SubViewportContainer.xml +++ b/doc/classes/SubViewportContainer.xml @@ -9,8 +9,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="stretch" type="bool" setter="set_stretch" getter="is_stretch_enabled" default="false"> If [code]true[/code], the sub-viewport will be scaled to the control's size. @@ -21,6 +19,4 @@ [b]Note:[/b] [member stretch] must be [code]true[/code] for this property to work. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/SyntaxHighlighter.xml b/doc/classes/SyntaxHighlighter.xml index c478cb0eb6..9bb8aabb1f 100644 --- a/doc/classes/SyntaxHighlighter.xml +++ b/doc/classes/SyntaxHighlighter.xml @@ -72,6 +72,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/TCPServer.xml b/doc/classes/TCPServer.xml index 9692693eff..8676e33bb4 100644 --- a/doc/classes/TCPServer.xml +++ b/doc/classes/TCPServer.xml @@ -51,6 +51,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/TextServer.xml b/doc/classes/TextServer.xml index 661c4f05ef..7fe9278f2c 100644 --- a/doc/classes/TextServer.xml +++ b/doc/classes/TextServer.xml @@ -1247,6 +1247,12 @@ <constant name="GRAPHEME_IS_PUNCTUATION" value="256" enum="GraphemeFlag"> Grapheme is punctuation character. </constant> + <constant name="GRAPHEME_IS_UNDERSCORE" value="512" enum="GraphemeFlag"> + Grapheme is underscore character. + </constant> + <constant name="GRAPHEME_IS_CONNECTED" value="1024" enum="GraphemeFlag"> + Grapheme is connected to the previous grapheme. Breaking line before this grapheme is not safe. + </constant> <constant name="HINTING_NONE" value="0" enum="Hinting"> Disables font hinting (smoother but less crisp). </constant> diff --git a/doc/classes/TextServerManager.xml b/doc/classes/TextServerManager.xml index b1dd314544..0e7b6d15d3 100644 --- a/doc/classes/TextServerManager.xml +++ b/doc/classes/TextServerManager.xml @@ -64,6 +64,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/Texture.xml b/doc/classes/Texture.xml index e19d611ea9..3387de30b7 100644 --- a/doc/classes/Texture.xml +++ b/doc/classes/Texture.xml @@ -6,8 +6,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/Texture2D.xml b/doc/classes/Texture2D.xml index bf5ddeb4ab..b77365e2df 100644 --- a/doc/classes/Texture2D.xml +++ b/doc/classes/Texture2D.xml @@ -76,6 +76,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/Texture2DArray.xml b/doc/classes/Texture2DArray.xml index bb9283803d..bbadbc29a1 100644 --- a/doc/classes/Texture2DArray.xml +++ b/doc/classes/Texture2DArray.xml @@ -6,8 +6,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/Texture3D.xml b/doc/classes/Texture3D.xml index 8ba0d7d4b9..51cd377648 100644 --- a/doc/classes/Texture3D.xml +++ b/doc/classes/Texture3D.xml @@ -38,6 +38,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/TextureButton.xml b/doc/classes/TextureButton.xml index 70bf138f27..2be27617ab 100644 --- a/doc/classes/TextureButton.xml +++ b/doc/classes/TextureButton.xml @@ -11,8 +11,6 @@ <tutorials> <link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link> </tutorials> - <methods> - </methods> <members> <member name="expand" type="bool" setter="set_expand" getter="get_expand" default="false"> If [code]true[/code], the texture stretches to the edges of the node's bounding rectangle using the [member stretch_mode]. If [code]false[/code], the texture will not scale with the node. diff --git a/doc/classes/TextureRect.xml b/doc/classes/TextureRect.xml index 743e7f6d1e..4f18f43ddf 100644 --- a/doc/classes/TextureRect.xml +++ b/doc/classes/TextureRect.xml @@ -9,8 +9,6 @@ <tutorials> <link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link> </tutorials> - <methods> - </methods> <members> <member name="expand" type="bool" setter="set_expand" getter="has_expand" default="false"> If [code]true[/code], the texture scales to fit its bounding rectangle. diff --git a/doc/classes/TileData.xml b/doc/classes/TileData.xml index b18ca29a8c..0d3282c6d3 100644 --- a/doc/classes/TileData.xml +++ b/doc/classes/TileData.xml @@ -192,6 +192,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/TileSetAtlasSource.xml b/doc/classes/TileSetAtlasSource.xml index fd3dbd1e4d..75f7d19b31 100644 --- a/doc/classes/TileSetAtlasSource.xml +++ b/doc/classes/TileSetAtlasSource.xml @@ -148,6 +148,4 @@ The base tile size in the texture (in pixel). This size must be bigger than the TileSet's [code]tile_size[/code] value. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/TileSetScenesCollectionSource.xml b/doc/classes/TileSetScenesCollectionSource.xml index 119a04c25f..3451519ff6 100644 --- a/doc/classes/TileSetScenesCollectionSource.xml +++ b/doc/classes/TileSetScenesCollectionSource.xml @@ -91,6 +91,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/TileSetSource.xml b/doc/classes/TileSetSource.xml index 442d845f6c..ed47684f14 100644 --- a/doc/classes/TileSetSource.xml +++ b/doc/classes/TileSetSource.xml @@ -59,6 +59,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/Transform2D.xml b/doc/classes/Transform2D.xml index 16af2a4075..4fd788467d 100644 --- a/doc/classes/Transform2D.xml +++ b/doc/classes/Transform2D.xml @@ -37,6 +37,16 @@ </method> <method name="Transform2D" qualifiers="constructor"> <return type="Transform2D" /> + <argument index="0" name="rotation" type="float" /> + <argument index="1" name="scale" type="Vector2" /> + <argument index="2" name="skew" type="float" /> + <argument index="3" name="position" type="Vector2" /> + <description> + Constructs the transform from a given angle (in radians), scale, skew (in radians) and position. + </description> + </method> + <method name="Transform2D" qualifiers="constructor"> + <return type="Transform2D" /> <argument index="0" name="x_axis" type="Vector2" /> <argument index="1" name="y_axis" type="Vector2" /> <argument index="2" name="origin" type="Vector2" /> @@ -84,6 +94,12 @@ Returns the scale. </description> </method> + <method name="get_skew" qualifiers="const"> + <return type="float" /> + <description> + Returns the transform's skew (in radians). + </description> + </method> <method name="interpolate_with" qualifiers="const"> <return type="Transform2D" /> <argument index="0" name="xform" type="Transform2D" /> @@ -125,26 +141,26 @@ </description> </method> <method name="operator *" qualifiers="operator"> - <return type="Vector2" /> - <argument index="0" name="right" type="Vector2" /> + <return type="PackedVector2Array" /> + <argument index="0" name="right" type="PackedVector2Array" /> <description> </description> </method> <method name="operator *" qualifiers="operator"> - <return type="Rect2" /> - <argument index="0" name="right" type="Rect2" /> + <return type="Transform2D" /> + <argument index="0" name="right" type="Transform2D" /> <description> </description> </method> <method name="operator *" qualifiers="operator"> - <return type="Transform2D" /> - <argument index="0" name="right" type="Transform2D" /> + <return type="Rect2" /> + <argument index="0" name="right" type="Rect2" /> <description> </description> </method> <method name="operator *" qualifiers="operator"> - <return type="PackedVector2Array" /> - <argument index="0" name="right" type="PackedVector2Array" /> + <return type="Vector2" /> + <argument index="0" name="right" type="Vector2" /> <description> </description> </method> @@ -206,6 +222,20 @@ Sets the transform's rotation (in radians). </description> </method> + <method name="set_scale"> + <return type="void" /> + <argument index="0" name="scale" type="Vector2" /> + <description> + Sets the transform's scale. + </description> + </method> + <method name="set_skew"> + <return type="void" /> + <argument index="0" name="skew" type="float" /> + <description> + Sets the transform's skew (in radians). + </description> + </method> <method name="translated" qualifiers="const"> <return type="Transform2D" /> <argument index="0" name="offset" type="Vector2" /> diff --git a/doc/classes/Translation.xml b/doc/classes/Translation.xml index 4b83a2abf5..c27d6f5667 100644 --- a/doc/classes/Translation.xml +++ b/doc/classes/Translation.xml @@ -76,6 +76,4 @@ The locale of the translation. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/TranslationServer.xml b/doc/classes/TranslationServer.xml index a002166664..8a6fa3571a 100644 --- a/doc/classes/TranslationServer.xml +++ b/doc/classes/TranslationServer.xml @@ -105,6 +105,4 @@ If [code]true[/code], enables the use of pseudolocalization. See [member ProjectSettings.internationalization/pseudolocalization/use_pseudolocalization] for details. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/TriangleMesh.xml b/doc/classes/TriangleMesh.xml index cfdb6fe33e..f615f7965f 100644 --- a/doc/classes/TriangleMesh.xml +++ b/doc/classes/TriangleMesh.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/TubeTrailMesh.xml b/doc/classes/TubeTrailMesh.xml index 2782791a62..2c84a79557 100644 --- a/doc/classes/TubeTrailMesh.xml +++ b/doc/classes/TubeTrailMesh.xml @@ -6,8 +6,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="curve" type="Curve" setter="set_curve" getter="get_curve"> </member> @@ -22,6 +20,4 @@ <member name="sections" type="int" setter="set_sections" getter="get_sections" default="5"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/Tweener.xml b/doc/classes/Tweener.xml index a3279502e0..ad599c4d02 100644 --- a/doc/classes/Tweener.xml +++ b/doc/classes/Tweener.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <signals> <signal name="finished"> <description> @@ -17,6 +15,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/UDPServer.xml b/doc/classes/UDPServer.xml index eb6d42fb0f..66f752b97a 100644 --- a/doc/classes/UDPServer.xml +++ b/doc/classes/UDPServer.xml @@ -173,6 +173,4 @@ Define the maximum number of pending connections, during [method poll], any new pending connection exceeding that value will be automatically dropped. Setting this value to [code]0[/code] effectively prevents any new pending connection to be accepted (e.g. when all your players have connected). </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/VBoxContainer.xml b/doc/classes/VBoxContainer.xml index aa6c5fc8a4..b62fb4707e 100644 --- a/doc/classes/VBoxContainer.xml +++ b/doc/classes/VBoxContainer.xml @@ -9,10 +9,6 @@ <tutorials> <link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link> </tutorials> - <methods> - </methods> - <constants> - </constants> <theme_items> <theme_item name="separation" data_type="constant" type="int" default="4"> The vertical space between the [VBoxContainer]'s elements. diff --git a/doc/classes/VScrollBar.xml b/doc/classes/VScrollBar.xml index 519cc9c137..0cf06576f6 100644 --- a/doc/classes/VScrollBar.xml +++ b/doc/classes/VScrollBar.xml @@ -8,14 +8,10 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="size_flags_horizontal" type="int" setter="set_h_size_flags" getter="get_h_size_flags" override="true" default="0" /> <member name="size_flags_vertical" type="int" setter="set_v_size_flags" getter="get_v_size_flags" override="true" default="1" /> </members> - <constants> - </constants> <theme_items> <theme_item name="decrement" data_type="icon" type="Texture2D"> Icon used as a button to scroll the [ScrollBar] up. Supports custom step using the [member ScrollBar.custom_step] property. diff --git a/doc/classes/VSeparator.xml b/doc/classes/VSeparator.xml index d59c7229ac..d9299bfe92 100644 --- a/doc/classes/VSeparator.xml +++ b/doc/classes/VSeparator.xml @@ -8,10 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> <theme_items> <theme_item name="separation" data_type="constant" type="int" default="4"> The width of the area covered by the separator. Effectively works like a minimum width. diff --git a/doc/classes/VSlider.xml b/doc/classes/VSlider.xml index becf3d1052..286674a9b4 100644 --- a/doc/classes/VSlider.xml +++ b/doc/classes/VSlider.xml @@ -9,14 +9,10 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="size_flags_horizontal" type="int" setter="set_h_size_flags" getter="get_h_size_flags" override="true" default="0" /> <member name="size_flags_vertical" type="int" setter="set_v_size_flags" getter="get_v_size_flags" override="true" default="1" /> </members> - <constants> - </constants> <theme_items> <theme_item name="grabber" data_type="icon" type="Texture2D"> The texture for the grabber (the draggable element). diff --git a/doc/classes/VSplitContainer.xml b/doc/classes/VSplitContainer.xml index 143f5b6b0a..323ce1fe80 100644 --- a/doc/classes/VSplitContainer.xml +++ b/doc/classes/VSplitContainer.xml @@ -8,10 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> <theme_items> <theme_item name="autohide" data_type="constant" type="int" default="1"> Boolean value. If 1 ([code]true[/code]), the grabber will hide automatically when it isn't under the cursor. If 0 ([code]false[/code]), it's always visible. diff --git a/doc/classes/Variant.xml b/doc/classes/Variant.xml index 240c1c909f..88644e2f8a 100644 --- a/doc/classes/Variant.xml +++ b/doc/classes/Variant.xml @@ -74,8 +74,4 @@ <tutorials> <link title="Variant class">https://docs.godotengine.org/en/latest/development/cpp/variant_class.html</link> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/VehicleBody3D.xml b/doc/classes/VehicleBody3D.xml index 21a37f7b53..9315f6e6ad 100644 --- a/doc/classes/VehicleBody3D.xml +++ b/doc/classes/VehicleBody3D.xml @@ -11,8 +11,6 @@ <tutorials> <link title="3D Truck Town Demo">https://godotengine.org/asset-library/asset/524</link> </tutorials> - <methods> - </methods> <members> <member name="brake" type="float" setter="set_brake" getter="get_brake" default="0.0"> Slows down the vehicle by applying a braking force. The vehicle is only slowed down if the wheels are in contact with a surface. The force you need to apply to adequately slow down your vehicle depends on the [member RigidDynamicBody3D.mass] of the vehicle. For a vehicle with a mass set to 1000, try a value in the 25 - 30 range for hard braking. @@ -27,6 +25,4 @@ The steering angle for the vehicle. Setting this to a non-zero value will result in the vehicle turning when it's moving. Wheels that have [member VehicleWheel3D.use_as_steering] set to [code]true[/code] will automatically be rotated. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/VehicleWheel3D.xml b/doc/classes/VehicleWheel3D.xml index 5b4511beab..951f4f8275 100644 --- a/doc/classes/VehicleWheel3D.xml +++ b/doc/classes/VehicleWheel3D.xml @@ -77,6 +77,4 @@ This value affects the roll of your vehicle. If set to 1.0 for all wheels, your vehicle will be prone to rolling over, while a value of 0.0 will resist body roll. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/VelocityTracker3D.xml b/doc/classes/VelocityTracker3D.xml index 7e97cad5bf..5d8dcc6742 100644 --- a/doc/classes/VelocityTracker3D.xml +++ b/doc/classes/VelocityTracker3D.xml @@ -29,6 +29,4 @@ <member name="track_physics_step" type="bool" setter="set_track_physics_step" getter="is_tracking_physics_step" default="false"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/VideoPlayer.xml b/doc/classes/VideoPlayer.xml index 86b2dd102b..4f60b9d567 100644 --- a/doc/classes/VideoPlayer.xml +++ b/doc/classes/VideoPlayer.xml @@ -85,6 +85,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/VideoStream.xml b/doc/classes/VideoStream.xml index 7f522bfdf0..39fefa8d95 100644 --- a/doc/classes/VideoStream.xml +++ b/doc/classes/VideoStream.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/ViewportTexture.xml b/doc/classes/ViewportTexture.xml index 393f1bb0b8..c0cf3b3c7b 100644 --- a/doc/classes/ViewportTexture.xml +++ b/doc/classes/ViewportTexture.xml @@ -13,14 +13,10 @@ <link title="2D in 3D Demo">https://godotengine.org/asset-library/asset/129</link> <link title="3D Viewport Scaling Demo">https://godotengine.org/asset-library/asset/586</link> </tutorials> - <methods> - </methods> <members> <member name="resource_local_to_scene" type="bool" setter="set_local_to_scene" getter="is_local_to_scene" override="true" default="true" /> <member name="viewport_path" type="NodePath" setter="set_viewport_path_in_scene" getter="get_viewport_path_in_scene" default="NodePath("")"> The path to the [Viewport] node to display. This is relative to the scene root, not to the node which uses the texture. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/VisibleOnScreenEnabler2D.xml b/doc/classes/VisibleOnScreenEnabler2D.xml index c6ae8227d2..523a3a2578 100644 --- a/doc/classes/VisibleOnScreenEnabler2D.xml +++ b/doc/classes/VisibleOnScreenEnabler2D.xml @@ -6,8 +6,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="enable_mode" type="int" setter="set_enable_mode" getter="get_enable_mode" enum="VisibleOnScreenEnabler2D.EnableMode" default="0"> </member> diff --git a/doc/classes/VisibleOnScreenEnabler3D.xml b/doc/classes/VisibleOnScreenEnabler3D.xml index f781ef9749..2000d54d74 100644 --- a/doc/classes/VisibleOnScreenEnabler3D.xml +++ b/doc/classes/VisibleOnScreenEnabler3D.xml @@ -11,8 +11,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="enable_mode" type="int" setter="set_enable_mode" getter="get_enable_mode" enum="VisibleOnScreenEnabler3D.EnableMode" default="0"> </member> diff --git a/doc/classes/VisibleOnScreenNotifier2D.xml b/doc/classes/VisibleOnScreenNotifier2D.xml index 995bd9e9d7..d82e64fa91 100644 --- a/doc/classes/VisibleOnScreenNotifier2D.xml +++ b/doc/classes/VisibleOnScreenNotifier2D.xml @@ -36,6 +36,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/VisibleOnScreenNotifier3D.xml b/doc/classes/VisibleOnScreenNotifier3D.xml index 03db449c80..328db15231 100644 --- a/doc/classes/VisibleOnScreenNotifier3D.xml +++ b/doc/classes/VisibleOnScreenNotifier3D.xml @@ -36,6 +36,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/VisualInstance3D.xml b/doc/classes/VisualInstance3D.xml index f949fbe7c0..bbcf2f4730 100644 --- a/doc/classes/VisualInstance3D.xml +++ b/doc/classes/VisualInstance3D.xml @@ -63,6 +63,4 @@ This object will only be visible for [Camera3D]s whose cull mask includes the render object this [VisualInstance3D] is set to. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/VisualScriptCustomNodes.xml b/doc/classes/VisualScriptCustomNodes.xml index 3ef8022f5e..1681da7653 100644 --- a/doc/classes/VisualScriptCustomNodes.xml +++ b/doc/classes/VisualScriptCustomNodes.xml @@ -34,6 +34,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeBillboard.xml b/doc/classes/VisualShaderNodeBillboard.xml index 53bcfa7b5c..77069975ef 100644 --- a/doc/classes/VisualShaderNodeBillboard.xml +++ b/doc/classes/VisualShaderNodeBillboard.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="billboard_type" type="int" setter="set_billboard_type" getter="get_billboard_type" enum="VisualShaderNodeBillboard.BillboardType" default="1"> Controls how the object faces the camera. See [enum BillboardType]. diff --git a/doc/classes/VisualShaderNodeBooleanConstant.xml b/doc/classes/VisualShaderNodeBooleanConstant.xml index 688679f2a3..73a423b93a 100644 --- a/doc/classes/VisualShaderNodeBooleanConstant.xml +++ b/doc/classes/VisualShaderNodeBooleanConstant.xml @@ -9,13 +9,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="constant" type="bool" setter="set_constant" getter="get_constant" default="false"> A boolean constant which represents a state of this node. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeBooleanUniform.xml b/doc/classes/VisualShaderNodeBooleanUniform.xml index 7d72f13f9d..86f61dde83 100644 --- a/doc/classes/VisualShaderNodeBooleanUniform.xml +++ b/doc/classes/VisualShaderNodeBooleanUniform.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="default_value" type="bool" setter="set_default_value" getter="get_default_value" default="false"> A default value to be assigned within the shader. @@ -18,6 +16,4 @@ Enables usage of the [member default_value]. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeClamp.xml b/doc/classes/VisualShaderNodeClamp.xml index 504171bb13..a68cbbec49 100644 --- a/doc/classes/VisualShaderNodeClamp.xml +++ b/doc/classes/VisualShaderNodeClamp.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="op_type" type="int" setter="set_op_type" getter="get_op_type" enum="VisualShaderNodeClamp.OpType" default="0"> A type of operands and returned value. diff --git a/doc/classes/VisualShaderNodeColorConstant.xml b/doc/classes/VisualShaderNodeColorConstant.xml index fa1a11c488..d9f5167bd6 100644 --- a/doc/classes/VisualShaderNodeColorConstant.xml +++ b/doc/classes/VisualShaderNodeColorConstant.xml @@ -9,13 +9,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="constant" type="Color" setter="set_constant" getter="get_constant" default="Color(1, 1, 1, 1)"> A [Color] constant which represents a state of this node. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeColorFunc.xml b/doc/classes/VisualShaderNodeColorFunc.xml index 8d410104b8..0d7698f755 100644 --- a/doc/classes/VisualShaderNodeColorFunc.xml +++ b/doc/classes/VisualShaderNodeColorFunc.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeColorFunc.Function" default="0"> A function to be applied to the input color. See [enum Function] for options. diff --git a/doc/classes/VisualShaderNodeColorOp.xml b/doc/classes/VisualShaderNodeColorOp.xml index 55b006b098..378897d3cc 100644 --- a/doc/classes/VisualShaderNodeColorOp.xml +++ b/doc/classes/VisualShaderNodeColorOp.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="operator" type="int" setter="set_operator" getter="get_operator" enum="VisualShaderNodeColorOp.Operator" default="0"> An operator to be applied to the inputs. See [enum Operator] for options. diff --git a/doc/classes/VisualShaderNodeColorUniform.xml b/doc/classes/VisualShaderNodeColorUniform.xml index bdaf301f09..9c126fe700 100644 --- a/doc/classes/VisualShaderNodeColorUniform.xml +++ b/doc/classes/VisualShaderNodeColorUniform.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="default_value" type="Color" setter="set_default_value" getter="get_default_value" default="Color(1, 1, 1, 1)"> A default value to be assigned within the shader. @@ -18,6 +16,4 @@ Enables usage of the [member default_value]. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeComment.xml b/doc/classes/VisualShaderNodeComment.xml index 8970e2fabb..daffd24f93 100644 --- a/doc/classes/VisualShaderNodeComment.xml +++ b/doc/classes/VisualShaderNodeComment.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="description" type="String" setter="set_description" getter="get_description" default=""""> An additional description which placed below the title. @@ -18,6 +16,4 @@ A title of the node. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeCompare.xml b/doc/classes/VisualShaderNodeCompare.xml index 96bb3df494..49bf952b31 100644 --- a/doc/classes/VisualShaderNodeCompare.xml +++ b/doc/classes/VisualShaderNodeCompare.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="condition" type="int" setter="set_condition" getter="get_condition" enum="VisualShaderNodeCompare.Condition" default="0"> Extra condition which is applied if [member type] is set to [constant CTYPE_VECTOR]. diff --git a/doc/classes/VisualShaderNodeConstant.xml b/doc/classes/VisualShaderNodeConstant.xml index 8c61529dd1..d5f63be691 100644 --- a/doc/classes/VisualShaderNodeConstant.xml +++ b/doc/classes/VisualShaderNodeConstant.xml @@ -7,8 +7,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeCubemap.xml b/doc/classes/VisualShaderNodeCubemap.xml index 4a5f58261d..23d98ee4be 100644 --- a/doc/classes/VisualShaderNodeCubemap.xml +++ b/doc/classes/VisualShaderNodeCubemap.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="cube_map" type="Cubemap" setter="set_cube_map" getter="get_cube_map"> The [Cubemap] texture to sample when using [constant SOURCE_TEXTURE] as [member source]. diff --git a/doc/classes/VisualShaderNodeCubemapUniform.xml b/doc/classes/VisualShaderNodeCubemapUniform.xml index d4bcdc9006..bfc62469a8 100644 --- a/doc/classes/VisualShaderNodeCubemapUniform.xml +++ b/doc/classes/VisualShaderNodeCubemapUniform.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeCurveTexture.xml b/doc/classes/VisualShaderNodeCurveTexture.xml index 4839ceab92..b039da1671 100644 --- a/doc/classes/VisualShaderNodeCurveTexture.xml +++ b/doc/classes/VisualShaderNodeCurveTexture.xml @@ -8,13 +8,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="texture" type="CurveTexture" setter="set_texture" getter="get_texture"> The source texture. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeCurveXYZTexture.xml b/doc/classes/VisualShaderNodeCurveXYZTexture.xml index 11cdc541bb..48ff6ba800 100644 --- a/doc/classes/VisualShaderNodeCurveXYZTexture.xml +++ b/doc/classes/VisualShaderNodeCurveXYZTexture.xml @@ -8,13 +8,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="texture" type="CurveXYZTexture" setter="set_texture" getter="get_texture"> The source texture. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeCustom.xml b/doc/classes/VisualShaderNodeCustom.xml index 3a489419c1..b87b59c3e4 100644 --- a/doc/classes/VisualShaderNodeCustom.xml +++ b/doc/classes/VisualShaderNodeCustom.xml @@ -122,6 +122,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeDeterminant.xml b/doc/classes/VisualShaderNodeDeterminant.xml index 06b05addfa..47afbbb11c 100644 --- a/doc/classes/VisualShaderNodeDeterminant.xml +++ b/doc/classes/VisualShaderNodeDeterminant.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeDotProduct.xml b/doc/classes/VisualShaderNodeDotProduct.xml index 51166ab58f..49c26735c8 100644 --- a/doc/classes/VisualShaderNodeDotProduct.xml +++ b/doc/classes/VisualShaderNodeDotProduct.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeExpression.xml b/doc/classes/VisualShaderNodeExpression.xml index c2cbf41f45..4fde6d3aaf 100644 --- a/doc/classes/VisualShaderNodeExpression.xml +++ b/doc/classes/VisualShaderNodeExpression.xml @@ -9,13 +9,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="expression" type="String" setter="set_expression" getter="get_expression" default=""""> An expression in Godot Shading Language, which will be injected at the start of the graph's matching shader function ([code]vertex[/code], [code]fragment[/code], or [code]light[/code]), and thus cannot be used to declare functions, varyings, uniforms, or global constants. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeFaceForward.xml b/doc/classes/VisualShaderNodeFaceForward.xml index 48f84e5495..80cb8aea4e 100644 --- a/doc/classes/VisualShaderNodeFaceForward.xml +++ b/doc/classes/VisualShaderNodeFaceForward.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeFloatConstant.xml b/doc/classes/VisualShaderNodeFloatConstant.xml index a71563af54..581155b013 100644 --- a/doc/classes/VisualShaderNodeFloatConstant.xml +++ b/doc/classes/VisualShaderNodeFloatConstant.xml @@ -8,13 +8,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="constant" type="float" setter="set_constant" getter="get_constant" default="0.0"> A floating-point constant which represents a state of this node. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeFloatFunc.xml b/doc/classes/VisualShaderNodeFloatFunc.xml index ff499d25a6..884954e85e 100644 --- a/doc/classes/VisualShaderNodeFloatFunc.xml +++ b/doc/classes/VisualShaderNodeFloatFunc.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeFloatFunc.Function" default="13"> A function to be applied to the scalar. See [enum Function] for options. diff --git a/doc/classes/VisualShaderNodeFloatOp.xml b/doc/classes/VisualShaderNodeFloatOp.xml index ba000f258b..3b16363f70 100644 --- a/doc/classes/VisualShaderNodeFloatOp.xml +++ b/doc/classes/VisualShaderNodeFloatOp.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="operator" type="int" setter="set_operator" getter="get_operator" enum="VisualShaderNodeFloatOp.Operator" default="0"> An operator to be applied to the inputs. See [enum Operator] for options. diff --git a/doc/classes/VisualShaderNodeFloatUniform.xml b/doc/classes/VisualShaderNodeFloatUniform.xml index fcfd78dbea..244b8c9830 100644 --- a/doc/classes/VisualShaderNodeFloatUniform.xml +++ b/doc/classes/VisualShaderNodeFloatUniform.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="default_value" type="float" setter="set_default_value" getter="get_default_value" default="0.0"> A default value to be assigned within the shader. diff --git a/doc/classes/VisualShaderNodeFresnel.xml b/doc/classes/VisualShaderNodeFresnel.xml index c396b4574c..1e4479f841 100644 --- a/doc/classes/VisualShaderNodeFresnel.xml +++ b/doc/classes/VisualShaderNodeFresnel.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeGlobalExpression.xml b/doc/classes/VisualShaderNodeGlobalExpression.xml index 8023ba1890..0d95824158 100644 --- a/doc/classes/VisualShaderNodeGlobalExpression.xml +++ b/doc/classes/VisualShaderNodeGlobalExpression.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeGroupBase.xml b/doc/classes/VisualShaderNodeGroupBase.xml index a692d47638..cbe4dc2ae6 100644 --- a/doc/classes/VisualShaderNodeGroupBase.xml +++ b/doc/classes/VisualShaderNodeGroupBase.xml @@ -157,6 +157,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeIf.xml b/doc/classes/VisualShaderNodeIf.xml index 418999863b..75fd797a06 100644 --- a/doc/classes/VisualShaderNodeIf.xml +++ b/doc/classes/VisualShaderNodeIf.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeInput.xml b/doc/classes/VisualShaderNodeInput.xml index dd62d668eb..68f64ad98e 100644 --- a/doc/classes/VisualShaderNodeInput.xml +++ b/doc/classes/VisualShaderNodeInput.xml @@ -29,6 +29,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeIntConstant.xml b/doc/classes/VisualShaderNodeIntConstant.xml index 18d6e96ab5..e4a8a4447f 100644 --- a/doc/classes/VisualShaderNodeIntConstant.xml +++ b/doc/classes/VisualShaderNodeIntConstant.xml @@ -8,13 +8,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="constant" type="int" setter="set_constant" getter="get_constant" default="0"> An integer constant which represents a state of this node. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeIntFunc.xml b/doc/classes/VisualShaderNodeIntFunc.xml index 358a3f3512..d2782efa96 100644 --- a/doc/classes/VisualShaderNodeIntFunc.xml +++ b/doc/classes/VisualShaderNodeIntFunc.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeIntFunc.Function" default="2"> A function to be applied to the scalar. See [enum Function] for options. diff --git a/doc/classes/VisualShaderNodeIntOp.xml b/doc/classes/VisualShaderNodeIntOp.xml index 2d55cdaf78..e5fcafca81 100644 --- a/doc/classes/VisualShaderNodeIntOp.xml +++ b/doc/classes/VisualShaderNodeIntOp.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="operator" type="int" setter="set_operator" getter="get_operator" enum="VisualShaderNodeIntOp.Operator" default="0"> An operator to be applied to the inputs. See [enum Operator] for options. diff --git a/doc/classes/VisualShaderNodeIntUniform.xml b/doc/classes/VisualShaderNodeIntUniform.xml index 4070553884..36a3fbd4c1 100644 --- a/doc/classes/VisualShaderNodeIntUniform.xml +++ b/doc/classes/VisualShaderNodeIntUniform.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="default_value" type="int" setter="set_default_value" getter="get_default_value" default="0"> A default value to be assigned within the shader. diff --git a/doc/classes/VisualShaderNodeIs.xml b/doc/classes/VisualShaderNodeIs.xml index f46267677e..1f52e25d50 100644 --- a/doc/classes/VisualShaderNodeIs.xml +++ b/doc/classes/VisualShaderNodeIs.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeIs.Function" default="0"> The comparison function. See [enum Function] for options. diff --git a/doc/classes/VisualShaderNodeMix.xml b/doc/classes/VisualShaderNodeMix.xml index c70ac7e599..1ef580a983 100644 --- a/doc/classes/VisualShaderNodeMix.xml +++ b/doc/classes/VisualShaderNodeMix.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="op_type" type="int" setter="set_op_type" getter="get_op_type" enum="VisualShaderNodeMix.OpType" default="0"> A type of operands and returned value. diff --git a/doc/classes/VisualShaderNodeMultiplyAdd.xml b/doc/classes/VisualShaderNodeMultiplyAdd.xml index daa9e02753..a0e9aef703 100644 --- a/doc/classes/VisualShaderNodeMultiplyAdd.xml +++ b/doc/classes/VisualShaderNodeMultiplyAdd.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="op_type" type="int" setter="set_op_type" getter="get_op_type" enum="VisualShaderNodeMultiplyAdd.OpType" default="0"> A type of operands and returned value. diff --git a/doc/classes/VisualShaderNodeOuterProduct.xml b/doc/classes/VisualShaderNodeOuterProduct.xml index ba6822bfce..adc32aff10 100644 --- a/doc/classes/VisualShaderNodeOuterProduct.xml +++ b/doc/classes/VisualShaderNodeOuterProduct.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeOutput.xml b/doc/classes/VisualShaderNodeOutput.xml index 83da6f29f9..8193ed6167 100644 --- a/doc/classes/VisualShaderNodeOutput.xml +++ b/doc/classes/VisualShaderNodeOutput.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeParticleAccelerator.xml b/doc/classes/VisualShaderNodeParticleAccelerator.xml index 2f3f58c0cf..da8c505719 100644 --- a/doc/classes/VisualShaderNodeParticleAccelerator.xml +++ b/doc/classes/VisualShaderNodeParticleAccelerator.xml @@ -6,8 +6,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="mode" type="int" setter="set_mode" getter="get_mode" enum="VisualShaderNodeParticleAccelerator.Mode" default="0"> </member> diff --git a/doc/classes/VisualShaderNodeParticleBoxEmitter.xml b/doc/classes/VisualShaderNodeParticleBoxEmitter.xml index af33b285d2..acfd8e5572 100644 --- a/doc/classes/VisualShaderNodeParticleBoxEmitter.xml +++ b/doc/classes/VisualShaderNodeParticleBoxEmitter.xml @@ -6,8 +6,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeParticleConeVelocity.xml b/doc/classes/VisualShaderNodeParticleConeVelocity.xml index 7a40c2a7d0..4755b19046 100644 --- a/doc/classes/VisualShaderNodeParticleConeVelocity.xml +++ b/doc/classes/VisualShaderNodeParticleConeVelocity.xml @@ -6,8 +6,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeParticleEmit.xml b/doc/classes/VisualShaderNodeParticleEmit.xml index 120b12d643..d6e4c384aa 100644 --- a/doc/classes/VisualShaderNodeParticleEmit.xml +++ b/doc/classes/VisualShaderNodeParticleEmit.xml @@ -6,8 +6,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="flags" type="int" setter="set_flags" getter="get_flags" enum="VisualShaderNodeParticleEmit.EmitFlags" default="31"> </member> diff --git a/doc/classes/VisualShaderNodeParticleEmitter.xml b/doc/classes/VisualShaderNodeParticleEmitter.xml index 3a25fc1c7f..03ceb3adea 100644 --- a/doc/classes/VisualShaderNodeParticleEmitter.xml +++ b/doc/classes/VisualShaderNodeParticleEmitter.xml @@ -6,8 +6,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeParticleMultiplyByAxisAngle.xml b/doc/classes/VisualShaderNodeParticleMultiplyByAxisAngle.xml index 89a53699c9..5cd3d8f0b8 100644 --- a/doc/classes/VisualShaderNodeParticleMultiplyByAxisAngle.xml +++ b/doc/classes/VisualShaderNodeParticleMultiplyByAxisAngle.xml @@ -6,12 +6,8 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="degrees_mode" type="bool" setter="set_degrees_mode" getter="is_degrees_mode" default="true"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeParticleOutput.xml b/doc/classes/VisualShaderNodeParticleOutput.xml index c8fc66f2ff..24eb6bf825 100644 --- a/doc/classes/VisualShaderNodeParticleOutput.xml +++ b/doc/classes/VisualShaderNodeParticleOutput.xml @@ -6,8 +6,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeParticleRandomness.xml b/doc/classes/VisualShaderNodeParticleRandomness.xml index 75736992ee..2dec41105c 100644 --- a/doc/classes/VisualShaderNodeParticleRandomness.xml +++ b/doc/classes/VisualShaderNodeParticleRandomness.xml @@ -6,8 +6,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="op_type" type="int" setter="set_op_type" getter="get_op_type" enum="VisualShaderNodeParticleRandomness.OpType" default="0"> </member> diff --git a/doc/classes/VisualShaderNodeParticleRingEmitter.xml b/doc/classes/VisualShaderNodeParticleRingEmitter.xml index ee3fbe7faf..9aabf1ed27 100644 --- a/doc/classes/VisualShaderNodeParticleRingEmitter.xml +++ b/doc/classes/VisualShaderNodeParticleRingEmitter.xml @@ -6,8 +6,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeParticleSphereEmitter.xml b/doc/classes/VisualShaderNodeParticleSphereEmitter.xml index d43ac518cf..e2db81ff17 100644 --- a/doc/classes/VisualShaderNodeParticleSphereEmitter.xml +++ b/doc/classes/VisualShaderNodeParticleSphereEmitter.xml @@ -6,8 +6,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeResizableBase.xml b/doc/classes/VisualShaderNodeResizableBase.xml index f42289a10e..ef734ef857 100644 --- a/doc/classes/VisualShaderNodeResizableBase.xml +++ b/doc/classes/VisualShaderNodeResizableBase.xml @@ -8,13 +8,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="size" type="Vector2" setter="set_size" getter="get_size" default="Vector2(0, 0)"> The size of the node in the visual shader graph. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeSDFRaymarch.xml b/doc/classes/VisualShaderNodeSDFRaymarch.xml index 775f2814c2..64a3e5a310 100644 --- a/doc/classes/VisualShaderNodeSDFRaymarch.xml +++ b/doc/classes/VisualShaderNodeSDFRaymarch.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeSDFToScreenUV.xml b/doc/classes/VisualShaderNodeSDFToScreenUV.xml index 40fb66e364..07e267b990 100644 --- a/doc/classes/VisualShaderNodeSDFToScreenUV.xml +++ b/doc/classes/VisualShaderNodeSDFToScreenUV.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeSample3D.xml b/doc/classes/VisualShaderNodeSample3D.xml index 82bcac5f69..85d2367eac 100644 --- a/doc/classes/VisualShaderNodeSample3D.xml +++ b/doc/classes/VisualShaderNodeSample3D.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="source" type="int" setter="set_source" getter="get_source" enum="VisualShaderNodeSample3D.Source" default="0"> An input source type. diff --git a/doc/classes/VisualShaderNodeScalarDerivativeFunc.xml b/doc/classes/VisualShaderNodeScalarDerivativeFunc.xml index 305586ac49..8d108a5d28 100644 --- a/doc/classes/VisualShaderNodeScalarDerivativeFunc.xml +++ b/doc/classes/VisualShaderNodeScalarDerivativeFunc.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeScalarDerivativeFunc.Function" default="0"> The derivative type. See [enum Function] for options. diff --git a/doc/classes/VisualShaderNodeScreenUVToSDF.xml b/doc/classes/VisualShaderNodeScreenUVToSDF.xml index 2e121ffc54..8f1f4f486c 100644 --- a/doc/classes/VisualShaderNodeScreenUVToSDF.xml +++ b/doc/classes/VisualShaderNodeScreenUVToSDF.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeSmoothStep.xml b/doc/classes/VisualShaderNodeSmoothStep.xml index 0ed53a8c26..2f8c7e0f33 100644 --- a/doc/classes/VisualShaderNodeSmoothStep.xml +++ b/doc/classes/VisualShaderNodeSmoothStep.xml @@ -9,8 +9,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="op_type" type="int" setter="set_op_type" getter="get_op_type" enum="VisualShaderNodeSmoothStep.OpType" default="0"> A type of operands and returned value. diff --git a/doc/classes/VisualShaderNodeStep.xml b/doc/classes/VisualShaderNodeStep.xml index 694c144445..5d8b464814 100644 --- a/doc/classes/VisualShaderNodeStep.xml +++ b/doc/classes/VisualShaderNodeStep.xml @@ -9,8 +9,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="op_type" type="int" setter="set_op_type" getter="get_op_type" enum="VisualShaderNodeStep.OpType" default="0"> A type of operands and returned value. diff --git a/doc/classes/VisualShaderNodeSwitch.xml b/doc/classes/VisualShaderNodeSwitch.xml index 3961070a74..921092cd07 100644 --- a/doc/classes/VisualShaderNodeSwitch.xml +++ b/doc/classes/VisualShaderNodeSwitch.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="op_type" type="int" setter="set_op_type" getter="get_op_type" enum="VisualShaderNodeSwitch.OpType" default="0"> A type of operands and returned value. diff --git a/doc/classes/VisualShaderNodeTexture.xml b/doc/classes/VisualShaderNodeTexture.xml index 17c079f385..0a2af30f67 100644 --- a/doc/classes/VisualShaderNodeTexture.xml +++ b/doc/classes/VisualShaderNodeTexture.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="source" type="int" setter="set_source" getter="get_source" enum="VisualShaderNodeTexture.Source" default="0"> Determines the source for the lookup. See [enum Source] for options. diff --git a/doc/classes/VisualShaderNodeTexture2DArray.xml b/doc/classes/VisualShaderNodeTexture2DArray.xml index 3c6d328ed0..cd7c526e1f 100644 --- a/doc/classes/VisualShaderNodeTexture2DArray.xml +++ b/doc/classes/VisualShaderNodeTexture2DArray.xml @@ -8,13 +8,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="texture_array" type="Texture2DArray" setter="set_texture_array" getter="get_texture_array"> A source texture array. Used if [member VisualShaderNodeSample3D.source] is set to [constant VisualShaderNodeSample3D.SOURCE_TEXTURE]. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeTexture2DArrayUniform.xml b/doc/classes/VisualShaderNodeTexture2DArrayUniform.xml index 976fcf26c8..ba320afd18 100644 --- a/doc/classes/VisualShaderNodeTexture2DArrayUniform.xml +++ b/doc/classes/VisualShaderNodeTexture2DArrayUniform.xml @@ -6,8 +6,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeTexture3D.xml b/doc/classes/VisualShaderNodeTexture3D.xml index 17929e823e..2f5b750ce1 100644 --- a/doc/classes/VisualShaderNodeTexture3D.xml +++ b/doc/classes/VisualShaderNodeTexture3D.xml @@ -8,13 +8,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="texture" type="Texture3D" setter="set_texture" getter="get_texture"> A source texture. Used if [member VisualShaderNodeSample3D.source] is set to [constant VisualShaderNodeSample3D.SOURCE_TEXTURE]. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeTexture3DUniform.xml b/doc/classes/VisualShaderNodeTexture3DUniform.xml index d9e9acf117..3b002c5449 100644 --- a/doc/classes/VisualShaderNodeTexture3DUniform.xml +++ b/doc/classes/VisualShaderNodeTexture3DUniform.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeTextureSDF.xml b/doc/classes/VisualShaderNodeTextureSDF.xml index b5c89c2c31..09a5851ef7 100644 --- a/doc/classes/VisualShaderNodeTextureSDF.xml +++ b/doc/classes/VisualShaderNodeTextureSDF.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeTextureSDFNormal.xml b/doc/classes/VisualShaderNodeTextureSDFNormal.xml index 25fe1c4b28..e66492cebf 100644 --- a/doc/classes/VisualShaderNodeTextureSDFNormal.xml +++ b/doc/classes/VisualShaderNodeTextureSDFNormal.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeTextureUniform.xml b/doc/classes/VisualShaderNodeTextureUniform.xml index 492c6010df..26c72d2714 100644 --- a/doc/classes/VisualShaderNodeTextureUniform.xml +++ b/doc/classes/VisualShaderNodeTextureUniform.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="color_default" type="int" setter="set_color_default" getter="get_color_default" enum="VisualShaderNodeTextureUniform.ColorDefault" default="0"> Sets the default color if no texture is assigned to the uniform. diff --git a/doc/classes/VisualShaderNodeTextureUniformTriplanar.xml b/doc/classes/VisualShaderNodeTextureUniformTriplanar.xml index 28504cc7ac..76b5506cba 100644 --- a/doc/classes/VisualShaderNodeTextureUniformTriplanar.xml +++ b/doc/classes/VisualShaderNodeTextureUniformTriplanar.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeTransformCompose.xml b/doc/classes/VisualShaderNodeTransformCompose.xml index b82ce9bdd8..4ec59962e9 100644 --- a/doc/classes/VisualShaderNodeTransformCompose.xml +++ b/doc/classes/VisualShaderNodeTransformCompose.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeTransformConstant.xml b/doc/classes/VisualShaderNodeTransformConstant.xml index 30178752d0..66eda94fbe 100644 --- a/doc/classes/VisualShaderNodeTransformConstant.xml +++ b/doc/classes/VisualShaderNodeTransformConstant.xml @@ -8,13 +8,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="constant" type="Transform3D" setter="set_constant" getter="get_constant" default="Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)"> A [Transform3D] constant which represents the state of this node. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeTransformDecompose.xml b/doc/classes/VisualShaderNodeTransformDecompose.xml index b815efc67a..e1bfa94a07 100644 --- a/doc/classes/VisualShaderNodeTransformDecompose.xml +++ b/doc/classes/VisualShaderNodeTransformDecompose.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeTransformFunc.xml b/doc/classes/VisualShaderNodeTransformFunc.xml index 51b1100e22..bbc36fc8d5 100644 --- a/doc/classes/VisualShaderNodeTransformFunc.xml +++ b/doc/classes/VisualShaderNodeTransformFunc.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeTransformFunc.Function" default="0"> The function to be computed. See [enum Function] for options. diff --git a/doc/classes/VisualShaderNodeTransformOp.xml b/doc/classes/VisualShaderNodeTransformOp.xml index 02debd890f..65d5b9cbbd 100644 --- a/doc/classes/VisualShaderNodeTransformOp.xml +++ b/doc/classes/VisualShaderNodeTransformOp.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="operator" type="int" setter="set_operator" getter="get_operator" enum="VisualShaderNodeTransformOp.Operator" default="0"> The type of the operation to be performed on the transforms. See [enum Operator] for options. diff --git a/doc/classes/VisualShaderNodeTransformUniform.xml b/doc/classes/VisualShaderNodeTransformUniform.xml index 2f7818ec8a..b6d8801932 100644 --- a/doc/classes/VisualShaderNodeTransformUniform.xml +++ b/doc/classes/VisualShaderNodeTransformUniform.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="default_value" type="Transform3D" setter="set_default_value" getter="get_default_value" default="Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)"> A default value to be assigned within the shader. @@ -18,6 +16,4 @@ Enables usage of the [member default_value]. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeTransformVecMult.xml b/doc/classes/VisualShaderNodeTransformVecMult.xml index d8f7ebbd55..02fe18c7a0 100644 --- a/doc/classes/VisualShaderNodeTransformVecMult.xml +++ b/doc/classes/VisualShaderNodeTransformVecMult.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="operator" type="int" setter="set_operator" getter="get_operator" enum="VisualShaderNodeTransformVecMult.Operator" default="0"> The multiplication type to be performed. See [enum Operator] for options. diff --git a/doc/classes/VisualShaderNodeUVFunc.xml b/doc/classes/VisualShaderNodeUVFunc.xml index 042644feb0..26bcea07e8 100644 --- a/doc/classes/VisualShaderNodeUVFunc.xml +++ b/doc/classes/VisualShaderNodeUVFunc.xml @@ -7,8 +7,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeUVFunc.Function" default="0"> A function to be applied to the texture coordinates. See [enum Function] for options. diff --git a/doc/classes/VisualShaderNodeUniform.xml b/doc/classes/VisualShaderNodeUniform.xml index 561d87af45..15c760656e 100644 --- a/doc/classes/VisualShaderNodeUniform.xml +++ b/doc/classes/VisualShaderNodeUniform.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="qualifier" type="int" setter="set_qualifier" getter="get_qualifier" enum="VisualShaderNodeUniform.Qualifier" default="0"> </member> diff --git a/doc/classes/VisualShaderNodeUniformRef.xml b/doc/classes/VisualShaderNodeUniformRef.xml index db02e398ab..44a28ed53c 100644 --- a/doc/classes/VisualShaderNodeUniformRef.xml +++ b/doc/classes/VisualShaderNodeUniformRef.xml @@ -8,13 +8,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="uniform_name" type="String" setter="set_uniform_name" getter="get_uniform_name" default=""[None]""> The name of the uniform which this reference points to. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeVec3Constant.xml b/doc/classes/VisualShaderNodeVec3Constant.xml index 28c3d22345..0a64357962 100644 --- a/doc/classes/VisualShaderNodeVec3Constant.xml +++ b/doc/classes/VisualShaderNodeVec3Constant.xml @@ -8,13 +8,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="constant" type="Vector3" setter="set_constant" getter="get_constant" default="Vector3(0, 0, 0)"> A [Vector3] constant which represents the state of this node. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeVec3Uniform.xml b/doc/classes/VisualShaderNodeVec3Uniform.xml index 215e2cfbea..2b72e5252a 100644 --- a/doc/classes/VisualShaderNodeVec3Uniform.xml +++ b/doc/classes/VisualShaderNodeVec3Uniform.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="default_value" type="Vector3" setter="set_default_value" getter="get_default_value" default="Vector3(0, 0, 0)"> A default value to be assigned within the shader. @@ -18,6 +16,4 @@ Enables usage of the [member default_value]. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeVectorCompose.xml b/doc/classes/VisualShaderNodeVectorCompose.xml index c9ff3cd38e..ebc30d03f4 100644 --- a/doc/classes/VisualShaderNodeVectorCompose.xml +++ b/doc/classes/VisualShaderNodeVectorCompose.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeVectorDecompose.xml b/doc/classes/VisualShaderNodeVectorDecompose.xml index 95af323c9b..09986bf969 100644 --- a/doc/classes/VisualShaderNodeVectorDecompose.xml +++ b/doc/classes/VisualShaderNodeVectorDecompose.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeVectorDerivativeFunc.xml b/doc/classes/VisualShaderNodeVectorDerivativeFunc.xml index 9fd8ba2806..e0c7c8618c 100644 --- a/doc/classes/VisualShaderNodeVectorDerivativeFunc.xml +++ b/doc/classes/VisualShaderNodeVectorDerivativeFunc.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeVectorDerivativeFunc.Function" default="0"> A derivative type. See [enum Function] for options. diff --git a/doc/classes/VisualShaderNodeVectorDistance.xml b/doc/classes/VisualShaderNodeVectorDistance.xml index 2da04b122e..098787e583 100644 --- a/doc/classes/VisualShaderNodeVectorDistance.xml +++ b/doc/classes/VisualShaderNodeVectorDistance.xml @@ -9,8 +9,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeVectorFunc.xml b/doc/classes/VisualShaderNodeVectorFunc.xml index 79bf3f6a07..27ae82e11b 100644 --- a/doc/classes/VisualShaderNodeVectorFunc.xml +++ b/doc/classes/VisualShaderNodeVectorFunc.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeVectorFunc.Function" default="0"> The function to be performed. See [enum Function] for options. diff --git a/doc/classes/VisualShaderNodeVectorLen.xml b/doc/classes/VisualShaderNodeVectorLen.xml index 77261d3190..165455e622 100644 --- a/doc/classes/VisualShaderNodeVectorLen.xml +++ b/doc/classes/VisualShaderNodeVectorLen.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/VisualShaderNodeVectorOp.xml b/doc/classes/VisualShaderNodeVectorOp.xml index 263485d38e..5e8f0abda3 100644 --- a/doc/classes/VisualShaderNodeVectorOp.xml +++ b/doc/classes/VisualShaderNodeVectorOp.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="operator" type="int" setter="set_operator" getter="get_operator" enum="VisualShaderNodeVectorOp.Operator" default="0"> The operator to be used. See [enum Operator] for options. diff --git a/doc/classes/VisualShaderNodeVectorRefract.xml b/doc/classes/VisualShaderNodeVectorRefract.xml index 178c35f49a..59e98fb000 100644 --- a/doc/classes/VisualShaderNodeVectorRefract.xml +++ b/doc/classes/VisualShaderNodeVectorRefract.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/VoxelGIData.xml b/doc/classes/VoxelGIData.xml index 5c2c7f9dc6..f0bd2a0601 100644 --- a/doc/classes/VoxelGIData.xml +++ b/doc/classes/VoxelGIData.xml @@ -67,6 +67,4 @@ <member name="use_two_bounces" type="bool" setter="set_use_two_bounces" getter="is_using_two_bounces" default="false"> </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/WeakRef.xml b/doc/classes/WeakRef.xml index 339c1620bf..56617b581f 100644 --- a/doc/classes/WeakRef.xml +++ b/doc/classes/WeakRef.xml @@ -16,6 +16,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/World2D.xml b/doc/classes/World2D.xml index 20b3afbd0b..a6a4701dd4 100644 --- a/doc/classes/World2D.xml +++ b/doc/classes/World2D.xml @@ -9,8 +9,6 @@ <tutorials> <link title="Ray-casting">https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html</link> </tutorials> - <methods> - </methods> <members> <member name="canvas" type="RID" setter="" getter="get_canvas"> The [RID] of this world's canvas resource. Used by the [RenderingServer] for 2D drawing. @@ -25,6 +23,4 @@ The [RID] of this world's physics space resource. Used by the [PhysicsServer2D] for 2D physics, treating it as both a space and an area. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/World3D.xml b/doc/classes/World3D.xml index 610ecacff4..136ca2c598 100644 --- a/doc/classes/World3D.xml +++ b/doc/classes/World3D.xml @@ -9,8 +9,6 @@ <tutorials> <link title="Ray-casting">https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html</link> </tutorials> - <methods> - </methods> <members> <member name="camera_effects" type="CameraEffects" setter="set_camera_effects" getter="get_camera_effects"> </member> @@ -33,6 +31,4 @@ The World3D's physics space. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/WorldBoundaryShape2D.xml b/doc/classes/WorldBoundaryShape2D.xml index 190f289601..cfbab4dcf8 100644 --- a/doc/classes/WorldBoundaryShape2D.xml +++ b/doc/classes/WorldBoundaryShape2D.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="distance" type="float" setter="set_distance" getter="get_distance" default="0.0"> The line's distance from the origin. @@ -18,6 +16,4 @@ The line's normal. Defaults to [code]Vector2.UP[/code]. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/WorldBoundaryShape3D.xml b/doc/classes/WorldBoundaryShape3D.xml index 837b023a58..a916ac03d0 100644 --- a/doc/classes/WorldBoundaryShape3D.xml +++ b/doc/classes/WorldBoundaryShape3D.xml @@ -8,13 +8,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="plane" type="Plane" setter="set_plane" getter="get_plane" default="Plane(0, 1, 0, 0)"> The [Plane] used by the [WorldBoundaryShape3D] for collision. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/WorldEnvironment.xml b/doc/classes/WorldEnvironment.xml index 6aa2db00b4..bd25a74c5b 100644 --- a/doc/classes/WorldEnvironment.xml +++ b/doc/classes/WorldEnvironment.xml @@ -14,8 +14,6 @@ <link title="2D HDR Demo">https://godotengine.org/asset-library/asset/110</link> <link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link> </tutorials> - <methods> - </methods> <members> <member name="camera_effects" type="CameraEffects" setter="set_camera_effects" getter="get_camera_effects"> </member> @@ -23,6 +21,4 @@ The [Environment] resource used by this [WorldEnvironment], defining the default properties. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/X509Certificate.xml b/doc/classes/X509Certificate.xml index 5900e68339..0af7094ee1 100644 --- a/doc/classes/X509Certificate.xml +++ b/doc/classes/X509Certificate.xml @@ -26,6 +26,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/XRAnchor3D.xml b/doc/classes/XRAnchor3D.xml index ccbfab1273..94fc8fc13d 100644 --- a/doc/classes/XRAnchor3D.xml +++ b/doc/classes/XRAnchor3D.xml @@ -55,6 +55,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/XRCamera3D.xml b/doc/classes/XRCamera3D.xml index b2682f7a90..682a797b5e 100644 --- a/doc/classes/XRCamera3D.xml +++ b/doc/classes/XRCamera3D.xml @@ -10,8 +10,4 @@ <tutorials> <link title="VR tutorial index">https://docs.godotengine.org/en/latest/tutorials/vr/index.html</link> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/doc/classes/XRController3D.xml b/doc/classes/XRController3D.xml index 47ddc22823..1a05a7b651 100644 --- a/doc/classes/XRController3D.xml +++ b/doc/classes/XRController3D.xml @@ -89,6 +89,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/doc/classes/XRInterfaceExtension.xml b/doc/classes/XRInterfaceExtension.xml index fb79926043..84b46e0ddd 100644 --- a/doc/classes/XRInterfaceExtension.xml +++ b/doc/classes/XRInterfaceExtension.xml @@ -128,6 +128,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/XROrigin3D.xml b/doc/classes/XROrigin3D.xml index 3e075e99b9..cdf319093c 100644 --- a/doc/classes/XROrigin3D.xml +++ b/doc/classes/XROrigin3D.xml @@ -12,14 +12,10 @@ <tutorials> <link title="VR tutorial index">https://docs.godotengine.org/en/latest/tutorials/vr/index.html</link> </tutorials> - <methods> - </methods> <members> <member name="world_scale" type="float" setter="set_world_scale" getter="get_world_scale" default="1.0"> Allows you to adjust the scale to your game's units. Most AR/VR platforms assume a scale of 1 game world unit = 1 real world meter. [b]Note:[/b] This method is a passthrough to the [XRServer] itself. </member> </members> - <constants> - </constants> </class> diff --git a/doc/classes/bool.xml b/doc/classes/bool.xml index 2d4ba8872e..39e34a7b96 100644 --- a/doc/classes/bool.xml +++ b/doc/classes/bool.xml @@ -158,6 +158,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/float.xml b/doc/classes/float.xml index be8e1638e4..b45cdd2099 100644 --- a/doc/classes/float.xml +++ b/doc/classes/float.xml @@ -255,6 +255,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/doc/classes/int.xml b/doc/classes/int.xml index dd523185df..a75d11ba4a 100644 --- a/doc/classes/int.xml +++ b/doc/classes/int.xml @@ -375,6 +375,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/editor/action_map_editor.cpp b/editor/action_map_editor.cpp index 6789b5be00..38db48a4d4 100644 --- a/editor/action_map_editor.cpp +++ b/editor/action_map_editor.cpp @@ -120,8 +120,8 @@ void InputEventConfigurationDialog::_set_event(const Ref<InputEvent> &p_event) { physical_key_checkbox->set_visible(show_phys_key); additional_options_container->show(); - // Update selected item in input list for keys, joybuttons and joyaxis only (since the mouse cannot be "listened" for). - if (k.is_valid() || joyb.is_valid() || joym.is_valid()) { + // Update selected item in input list. + if (k.is_valid() || joyb.is_valid() || joym.is_valid() || mb.is_valid()) { TreeItem *category = input_list_tree->get_root()->get_first_child(); while (category) { TreeItem *input_item = category->get_first_child(); @@ -134,13 +134,14 @@ void InputEventConfigurationDialog::_set_event(const Ref<InputEvent> &p_event) { } // If event type matches input types of this category. - if ((k.is_valid() && input_type == INPUT_KEY) || (joyb.is_valid() && input_type == INPUT_JOY_BUTTON) || (joym.is_valid() && input_type == INPUT_JOY_MOTION)) { + if ((k.is_valid() && input_type == INPUT_KEY) || (joyb.is_valid() && input_type == INPUT_JOY_BUTTON) || (joym.is_valid() && input_type == INPUT_JOY_MOTION) || (mb.is_valid() && input_type == INPUT_MOUSE_BUTTON)) { // Loop through all items of this category until one matches. while (input_item) { bool key_match = k.is_valid() && (Variant(k->get_keycode()) == input_item->get_meta("__keycode") || Variant(k->get_physical_keycode()) == input_item->get_meta("__keycode")); bool joyb_match = joyb.is_valid() && Variant(joyb->get_button_index()) == input_item->get_meta("__index"); bool joym_match = joym.is_valid() && Variant(joym->get_axis()) == input_item->get_meta("__axis") && joym->get_axis_value() == (float)input_item->get_meta("__value"); - if (key_match || joyb_match || joym_match) { + bool mb_match = mb.is_valid() && Variant(mb->get_button_index()) == input_item->get_meta("__index"); + if (key_match || joyb_match || joym_match || mb_match) { category->set_collapsed(false); input_item->select(0); input_list_tree->ensure_cursor_is_visible(); @@ -165,7 +166,6 @@ void InputEventConfigurationDialog::_set_event(const Ref<InputEvent> &p_event) { if (allowed_input_types & INPUT_KEY) { strings.append(TTR("Key")); } - // We don't check for INPUT_MOUSE_BUTTON since it is ignored in the "Listen Window Input" method. if (allowed_input_types & INPUT_JOY_BUTTON) { strings.append(TTR("Joypad Button")); @@ -173,7 +173,9 @@ void InputEventConfigurationDialog::_set_event(const Ref<InputEvent> &p_event) { if (allowed_input_types & INPUT_JOY_MOTION) { strings.append(TTR("Joypad Axis")); } - + if (allowed_input_types & INPUT_MOUSE_BUTTON) { + strings.append(TTR("Mouse Button in area below")); + } if (strings.size() == 0) { text = TTR("Input Event dialog has been misconfigured: No input types are allowed."); event_as_text->set_text(text); @@ -214,12 +216,21 @@ void InputEventConfigurationDialog::_listen_window_input(const Ref<InputEvent> & return; } - // Ignore mouse - Ref<InputEventMouse> m = p_event; - if (m.is_valid()) { + // Ignore mouse motion + Ref<InputEventMouseMotion> mm = p_event; + if (mm.is_valid()) { return; } + // Ignore mouse button if not in the detection rect + Ref<InputEventMouseButton> mb = p_event; + if (mb.is_valid()) { + Rect2 r = mouse_detection_rect->get_rect(); + if (!r.has_point(mouse_detection_rect->get_local_mouse_position() + r.get_position())) { + return; + } + } + // Check what the type is and if it is allowed. Ref<InputEventKey> k = p_event; Ref<InputEventJoypadButton> joyb = p_event; @@ -227,6 +238,7 @@ void InputEventConfigurationDialog::_listen_window_input(const Ref<InputEvent> & int type = k.is_valid() ? INPUT_KEY : joyb.is_valid() ? INPUT_JOY_BUTTON : joym.is_valid() ? INPUT_JOY_MOTION : + mb.is_valid() ? INPUT_MOUSE_BUTTON : 0; if (!(allowed_input_types & type)) { @@ -537,6 +549,8 @@ void InputEventConfigurationDialog::_notification(int p_what) { icon_cache.joypad_button = get_theme_icon(SNAME("JoyButton"), SNAME("EditorIcons")); icon_cache.joypad_axis = get_theme_icon(SNAME("JoyAxis"), SNAME("EditorIcons")); + mouse_detection_rect->set_color(get_theme_color(SNAME("dark_color_2"), SNAME("Editor"))); + _update_input_list(); } break; default: @@ -575,7 +589,7 @@ void InputEventConfigurationDialog::set_allowed_input_types(int p_type_masks) { } InputEventConfigurationDialog::InputEventConfigurationDialog() { - allowed_input_types = INPUT_KEY | INPUT_MOUSE_BUTTON | INPUT_JOY_BUTTON | INPUT_JOY_MOTION; + allowed_input_types = INPUT_KEY | INPUT_MOUSE_BUTTON | INPUT_JOY_BUTTON | INPUT_JOY_MOTION | INPUT_MOUSE_BUTTON; set_title(TTR("Event Configuration")); set_min_size(Size2i(550 * EDSCALE, 0)); // Min width @@ -590,12 +604,17 @@ InputEventConfigurationDialog::InputEventConfigurationDialog() { tab_container->connect("tab_selected", callable_mp(this, &InputEventConfigurationDialog::_tab_selected)); main_vbox->add_child(tab_container); - CenterContainer *cc = memnew(CenterContainer); - cc->set_name(TTR("Listen for Input")); + // Listen to input tab + VBoxContainer *vb = memnew(VBoxContainer); + vb->set_name(TTR("Listen for Input")); event_as_text = memnew(Label); event_as_text->set_align(Label::ALIGN_CENTER); - cc->add_child(event_as_text); - tab_container->add_child(cc); + vb->add_child(event_as_text); + // Mouse button detection rect (Mouse button event outside this ColorRect will be ignored) + mouse_detection_rect = memnew(ColorRect); + mouse_detection_rect->set_v_size_flags(Control::SIZE_EXPAND_FILL); + vb->add_child(mouse_detection_rect); + tab_container->add_child(vb); // List of all input options to manually select from. diff --git a/editor/action_map_editor.h b/editor/action_map_editor.h index aff3e6e957..e55cab3510 100644 --- a/editor/action_map_editor.h +++ b/editor/action_map_editor.h @@ -32,6 +32,7 @@ #define ACTION_MAP_EDITOR_H #include "editor/editor_data.h" +#include <scene/gui/color_rect.h> // Confirmation Dialog used when configuring an input event. // Separate from ActionMapEditor for code cleanliness and separation of responsibilities. @@ -60,6 +61,7 @@ private: // Listening for input Label *event_as_text; + ColorRect *mouse_detection_rect; // List of All Key/Mouse/Joypad input options. int allowed_input_types; diff --git a/editor/code_editor.cpp b/editor/code_editor.cpp index 2944dd9991..7bf82fbd1b 100644 --- a/editor/code_editor.cpp +++ b/editor/code_editor.cpp @@ -1579,17 +1579,10 @@ void CodeTextEditor::_update_text_editor_theme() { } void CodeTextEditor::_on_settings_change() { - if (settings_changed) { - return; - } - - settings_changed = true; - MessageQueue::get_singleton()->push_callable(callable_mp(this, &CodeTextEditor::_apply_settings_change)); + _apply_settings_change(); } void CodeTextEditor::_apply_settings_change() { - settings_changed = false; - _update_text_editor_theme(); font_size = EditorSettings::get_singleton()->get("interface/editor/code_font_size"); diff --git a/editor/code_editor.h b/editor/code_editor.h index dfe6561f13..3c52a0c6e8 100644 --- a/editor/code_editor.h +++ b/editor/code_editor.h @@ -162,8 +162,6 @@ class CodeTextEditor : public VBoxContainer { int error_line; int error_column; - bool settings_changed = false; - void _on_settings_change(); void _apply_settings_change(); diff --git a/editor/debugger/script_editor_debugger.cpp b/editor/debugger/script_editor_debugger.cpp index 2f5bde64a9..989774e943 100644 --- a/editor/debugger/script_editor_debugger.cpp +++ b/editor/debugger/script_editor_debugger.cpp @@ -884,8 +884,7 @@ void ScriptEditorDebugger::_clear_breakpoints() { } void ScriptEditorDebugger::start(Ref<RemoteDebuggerPeer> p_peer) { - error_count = 0; - warning_count = 0; + _clear_errors_list(); stop(); peer = p_peer; diff --git a/editor/doc_tools.cpp b/editor/doc_tools.cpp index d04875f188..ec162231e9 100644 --- a/editor/doc_tools.cpp +++ b/editor/doc_tools.cpp @@ -1173,6 +1173,59 @@ static void _write_string(FileAccess *f, int p_tablevel, const String &p_string) f->store_string(tab + p_string + "\n"); } +static void _write_method_doc(FileAccess *f, const String &p_name, Vector<DocData::MethodDoc> &p_method_docs) { + if (!p_method_docs.is_empty()) { + p_method_docs.sort(); + _write_string(f, 1, "<" + p_name + "s>"); + for (int i = 0; i < p_method_docs.size(); i++) { + const DocData::MethodDoc &m = p_method_docs[i]; + + String qualifiers; + if (m.qualifiers != "") { + qualifiers += " qualifiers=\"" + m.qualifiers.xml_escape() + "\""; + } + + _write_string(f, 2, "<" + p_name + " name=\"" + m.name.xml_escape() + "\"" + qualifiers + ">"); + + if (m.return_type != "") { + String enum_text; + if (m.return_enum != String()) { + enum_text = " enum=\"" + m.return_enum + "\""; + } + _write_string(f, 3, "<return type=\"" + m.return_type + "\"" + enum_text + " />"); + } + if (m.errors_returned.size() > 0) { + for (int j = 0; j < m.errors_returned.size(); j++) { + _write_string(f, 3, "<returns_error number=\"" + itos(m.errors_returned[j]) + "\"/>"); + } + } + + for (int j = 0; j < m.arguments.size(); j++) { + const DocData::ArgumentDoc &a = m.arguments[j]; + + String enum_text; + if (a.enumeration != String()) { + enum_text = " enum=\"" + a.enumeration + "\""; + } + + if (a.default_value != "") { + _write_string(f, 3, "<argument index=\"" + itos(j) + "\" name=\"" + a.name.xml_escape() + "\" type=\"" + a.type.xml_escape() + "\"" + enum_text + " default=\"" + a.default_value.xml_escape(true) + "\" />"); + } else { + _write_string(f, 3, "<argument index=\"" + itos(j) + "\" name=\"" + a.name.xml_escape() + "\" type=\"" + a.type.xml_escape() + "\"" + enum_text + " />"); + } + } + + _write_string(f, 3, "<description>"); + _write_string(f, 4, m.description.strip_edges().xml_escape()); + _write_string(f, 3, "</description>"); + + _write_string(f, 2, "</" + p_name + ">"); + } + + _write_string(f, 1, "</" + p_name + "s>"); + } +} + Error DocTools::save_classes(const String &p_default_path, const Map<String, String> &p_class_path) { for (Map<String, DocData::ClassDoc>::Element *E = class_list.front(); E; E = E->next()) { DocData::ClassDoc &c = E->get(); @@ -1216,58 +1269,9 @@ Error DocTools::save_classes(const String &p_default_path, const Map<String, Str } _write_string(f, 1, "</tutorials>"); - _write_string(f, 1, "<methods>"); - - c.methods.sort(); - - for (int i = 0; i < c.methods.size(); i++) { - const DocData::MethodDoc &m = c.methods[i]; - - String qualifiers; - if (m.qualifiers != "") { - qualifiers += " qualifiers=\"" + m.qualifiers.xml_escape() + "\""; - } - - _write_string(f, 2, "<method name=\"" + m.name.xml_escape() + "\"" + qualifiers + ">"); + _write_method_doc(f, "method", c.methods); - if (m.return_type != "") { - String enum_text; - if (m.return_enum != String()) { - enum_text = " enum=\"" + m.return_enum + "\""; - } - _write_string(f, 3, "<return type=\"" + m.return_type + "\"" + enum_text + " />"); - } - if (m.errors_returned.size() > 0) { - for (int j = 0; j < m.errors_returned.size(); j++) { - _write_string(f, 3, "<returns_error number=\"" + itos(m.errors_returned[j]) + "\"/>"); - } - } - - for (int j = 0; j < m.arguments.size(); j++) { - const DocData::ArgumentDoc &a = m.arguments[j]; - - String enum_text; - if (a.enumeration != String()) { - enum_text = " enum=\"" + a.enumeration + "\""; - } - - if (a.default_value != "") { - _write_string(f, 3, "<argument index=\"" + itos(j) + "\" name=\"" + a.name.xml_escape() + "\" type=\"" + a.type.xml_escape() + "\"" + enum_text + " default=\"" + a.default_value.xml_escape(true) + "\" />"); - } else { - _write_string(f, 3, "<argument index=\"" + itos(j) + "\" name=\"" + a.name.xml_escape() + "\" type=\"" + a.type.xml_escape() + "\"" + enum_text + " />"); - } - } - - _write_string(f, 3, "<description>"); - _write_string(f, 4, m.description.strip_edges().xml_escape()); - _write_string(f, 3, "</description>"); - - _write_string(f, 2, "</method>"); - } - - _write_string(f, 1, "</methods>"); - - if (c.properties.size()) { + if (!c.properties.is_empty()) { _write_string(f, 1, "<members>"); c.properties.sort(); @@ -1294,52 +1298,33 @@ Error DocTools::save_classes(const String &p_default_path, const Map<String, Str _write_string(f, 1, "</members>"); } - if (c.signals.size()) { - c.signals.sort(); - - _write_string(f, 1, "<signals>"); - for (int i = 0; i < c.signals.size(); i++) { - const DocData::MethodDoc &m = c.signals[i]; - _write_string(f, 2, "<signal name=\"" + m.name + "\">"); - for (int j = 0; j < m.arguments.size(); j++) { - const DocData::ArgumentDoc &a = m.arguments[j]; - _write_string(f, 3, "<argument index=\"" + itos(j) + "\" name=\"" + a.name.xml_escape() + "\" type=\"" + a.type.xml_escape() + "\" />"); - } - - _write_string(f, 3, "<description>"); - _write_string(f, 4, m.description.strip_edges().xml_escape()); - _write_string(f, 3, "</description>"); - - _write_string(f, 2, "</signal>"); - } - - _write_string(f, 1, "</signals>"); - } - - _write_string(f, 1, "<constants>"); + _write_method_doc(f, "signal", c.signals); - for (int i = 0; i < c.constants.size(); i++) { - const DocData::ConstantDoc &k = c.constants[i]; - if (k.is_value_valid) { - if (k.enumeration != String()) { - _write_string(f, 2, "<constant name=\"" + k.name + "\" value=\"" + k.value + "\" enum=\"" + k.enumeration + "\">"); - } else { - _write_string(f, 2, "<constant name=\"" + k.name + "\" value=\"" + k.value + "\">"); - } - } else { - if (k.enumeration != String()) { - _write_string(f, 2, "<constant name=\"" + k.name + "\" value=\"platform-dependent\" enum=\"" + k.enumeration + "\">"); + if (!c.constants.is_empty()) { + _write_string(f, 1, "<constants>"); + for (int i = 0; i < c.constants.size(); i++) { + const DocData::ConstantDoc &k = c.constants[i]; + if (k.is_value_valid) { + if (k.enumeration != String()) { + _write_string(f, 2, "<constant name=\"" + k.name + "\" value=\"" + k.value + "\" enum=\"" + k.enumeration + "\">"); + } else { + _write_string(f, 2, "<constant name=\"" + k.name + "\" value=\"" + k.value + "\">"); + } } else { - _write_string(f, 2, "<constant name=\"" + k.name + "\" value=\"platform-dependent\">"); + if (k.enumeration != String()) { + _write_string(f, 2, "<constant name=\"" + k.name + "\" value=\"platform-dependent\" enum=\"" + k.enumeration + "\">"); + } else { + _write_string(f, 2, "<constant name=\"" + k.name + "\" value=\"platform-dependent\">"); + } } + _write_string(f, 3, k.description.strip_edges().xml_escape()); + _write_string(f, 2, "</constant>"); } - _write_string(f, 3, k.description.strip_edges().xml_escape()); - _write_string(f, 2, "</constant>"); - } - _write_string(f, 1, "</constants>"); + _write_string(f, 1, "</constants>"); + } - if (c.theme_properties.size()) { + if (!c.theme_properties.is_empty()) { c.theme_properties.sort(); _write_string(f, 1, "<theme_items>"); diff --git a/editor/editor_data.cpp b/editor/editor_data.cpp index e40bbefef8..5e50835ef2 100644 --- a/editor/editor_data.cpp +++ b/editor/editor_data.cpp @@ -566,6 +566,10 @@ void EditorData::remove_scene(int p_idx) { current_edited_scene--; } + if (edited_scene[p_idx].path != String()) { + ScriptEditor::get_singleton()->close_builtin_scripts_from_scene(edited_scene[p_idx].path); + } + edited_scene.remove(p_idx); } diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index 812bbd9b7d..ef8dabc19a 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -3278,10 +3278,6 @@ void EditorNode::_remove_edited_scene(bool p_change_tab) { new_index = 1; } - if (editor_data.get_scene_path(old_index) != String()) { - ScriptEditor::get_singleton()->close_builtin_scripts_from_scene(editor_data.get_scene_path(old_index)); - } - if (p_change_tab) { _scene_tab_changed(new_index); } @@ -5971,7 +5967,7 @@ EditorNode::EditorNode() { EDITOR_DEF_RST("interface/editor/save_each_scene_on_quit", true); EDITOR_DEF("interface/editor/show_update_spinner", false); EDITOR_DEF("interface/editor/update_continuously", false); - EDITOR_DEF_RST("interface/scene_tabs/restore_scenes_on_load", false); + EDITOR_DEF_RST("interface/scene_tabs/restore_scenes_on_load", true); EDITOR_DEF_RST("interface/scene_tabs/show_thumbnail_on_hover", true); EDITOR_DEF_RST("interface/inspector/capitalize_properties", true); EDITOR_DEF_RST("interface/inspector/default_float_step", 0.001); @@ -6207,11 +6203,9 @@ EditorNode::EditorNode() { tabbar_container->add_child(scene_tabs); distraction_free = memnew(Button); distraction_free->set_flat(true); -#ifdef OSX_ENABLED - distraction_free->set_shortcut(ED_SHORTCUT_AND_COMMAND("editor/distraction_free_mode", TTR("Distraction Free Mode"), KEY_MASK_CMD | KEY_MASK_CTRL | KEY_D)); -#else - distraction_free->set_shortcut(ED_SHORTCUT_AND_COMMAND("editor/distraction_free_mode", TTR("Distraction Free Mode"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_F11)); -#endif + ED_SHORTCUT_AND_COMMAND("editor/distraction_free_mode", TTR("Distraction Free Mode"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_F11); + ED_SHORTCUT_OVERRIDE("editor/distraction_free_mode", "macos", KEY_MASK_CMD | KEY_MASK_CTRL | KEY_D); + distraction_free->set_shortcut(ED_GET_SHORTCUT("editor/distraction_free_mode")); distraction_free->set_tooltip(TTR("Toggle distraction-free mode.")); distraction_free->connect("pressed", callable_mp(this, &EditorNode::_toggle_distraction_free_mode)); distraction_free->set_icon(gui_base->get_theme_icon(SNAME("DistractionFree"), SNAME("EditorIcons"))); @@ -6399,11 +6393,9 @@ EditorNode::EditorNode() { p->add_separator(); p->add_shortcut(ED_SHORTCUT("editor/reload_current_project", TTR("Reload Current Project")), RUN_RELOAD_CURRENT_PROJECT); -#ifdef OSX_ENABLED - p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/quit_to_project_list", TTR("Quit to Project List"), KEY_MASK_SHIFT + KEY_MASK_ALT + KEY_Q), RUN_PROJECT_MANAGER, true); -#else - p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/quit_to_project_list", TTR("Quit to Project List"), KEY_MASK_CMD + KEY_MASK_SHIFT + KEY_Q), RUN_PROJECT_MANAGER, true); -#endif + ED_SHORTCUT_AND_COMMAND("editor/quit_to_project_list", TTR("Quit to Project List"), KEY_MASK_CMD + KEY_MASK_SHIFT + KEY_Q); + ED_SHORTCUT_OVERRIDE("editor/quit_to_project_list", "macos", KEY_MASK_SHIFT + KEY_MASK_ALT + KEY_Q); + p->add_shortcut(ED_GET_SHORTCUT("editor/quit_to_project_list"), RUN_PROJECT_MANAGER, true); menu_hb->add_spacer(); @@ -6428,11 +6420,10 @@ EditorNode::EditorNode() { left_menu_hb->add_child(settings_menu); p = settings_menu->get_popup(); -#ifdef OSX_ENABLED - p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/editor_settings", TTR("Editor Settings..."), KEY_MASK_CMD + KEY_COMMA), SETTINGS_PREFERENCES); -#else - p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/editor_settings", TTR("Editor Settings...")), SETTINGS_PREFERENCES); -#endif + + ED_SHORTCUT_AND_COMMAND("editor/editor_settings", TTR("Editor Settings...")); + ED_SHORTCUT_OVERRIDE("editor/editor_settings", "macos", KEY_MASK_CMD + KEY_COMMA); + p->add_shortcut(ED_GET_SHORTCUT("editor/editor_settings"), SETTINGS_PREFERENCES); p->add_shortcut(ED_SHORTCUT("editor/command_palette", TTR("Command Palette..."), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_P), HELP_COMMAND_PALETTE); p->add_separator(); @@ -6442,17 +6433,17 @@ EditorNode::EditorNode() { editor_layouts->connect("id_pressed", callable_mp(this, &EditorNode::_layout_menu_option)); p->add_submenu_item(TTR("Editor Layout"), "Layouts"); p->add_separator(); -#ifdef OSX_ENABLED - p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/take_screenshot", TTR("Take Screenshot"), KEY_MASK_CMD | KEY_F12), EDITOR_SCREENSHOT); -#else - p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/take_screenshot", TTR("Take Screenshot"), KEY_MASK_CTRL | KEY_F12), EDITOR_SCREENSHOT); -#endif + + ED_SHORTCUT_AND_COMMAND("editor/take_screenshot", TTR("Take Screenshot"), KEY_MASK_CTRL | KEY_F12); + ED_SHORTCUT_OVERRIDE("editor/take_screenshot", "macos", KEY_MASK_CMD | KEY_F12); + p->add_shortcut(ED_GET_SHORTCUT("editor/take_screenshot"), EDITOR_SCREENSHOT); + p->set_item_tooltip(p->get_item_count() - 1, TTR("Screenshots are stored in the Editor Data/Settings Folder.")); -#ifdef OSX_ENABLED - p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/fullscreen_mode", TTR("Toggle Fullscreen"), KEY_MASK_CMD | KEY_MASK_CTRL | KEY_F), SETTINGS_TOGGLE_FULLSCREEN); -#else - p->add_shortcut(ED_SHORTCUT_AND_COMMAND("editor/fullscreen_mode", TTR("Toggle Fullscreen"), KEY_MASK_SHIFT | KEY_F11), SETTINGS_TOGGLE_FULLSCREEN); -#endif + + ED_SHORTCUT_AND_COMMAND("editor/fullscreen_mode", TTR("Toggle Fullscreen"), KEY_MASK_SHIFT | KEY_F11); + ED_SHORTCUT_OVERRIDE("editor/fullscreen_mode", "macos", KEY_MASK_CMD | KEY_MASK_CTRL | KEY_F); + p->add_shortcut(ED_GET_SHORTCUT("editor/fullscreen_mode"), SETTINGS_TOGGLE_FULLSCREEN); + #if defined(WINDOWS_ENABLED) && defined(WINDOWS_SUBSYSTEM_CONSOLE) // The console can only be toggled if the application was built for the console subsystem, // not the GUI subsystem. @@ -6461,7 +6452,7 @@ EditorNode::EditorNode() { p->add_separator(); if (OS::get_singleton()->get_data_path() == OS::get_singleton()->get_config_path()) { - // Configuration and data folders are located in the same place (Windows/macOS) + // Configuration and data folders are located in the same place (Windows/macos) p->add_item(TTR("Open Editor Data/Settings Folder"), SETTINGS_EDITOR_DATA_FOLDER); } else { // Separate configuration and data folders (Linux) @@ -6483,11 +6474,10 @@ EditorNode::EditorNode() { p = help_menu->get_popup(); p->connect("id_pressed", callable_mp(this, &EditorNode::_menu_option)); -#ifdef OSX_ENABLED - p->add_icon_shortcut(gui_base->get_theme_icon(SNAME("HelpSearch"), SNAME("EditorIcons")), ED_SHORTCUT_AND_COMMAND("editor/editor_help", TTR("Search Help"), KEY_MASK_ALT | KEY_SPACE), HELP_SEARCH); -#else - p->add_icon_shortcut(gui_base->get_theme_icon(SNAME("HelpSearch"), SNAME("EditorIcons")), ED_SHORTCUT_AND_COMMAND("editor/editor_help", TTR("Search Help"), KEY_F1), HELP_SEARCH); -#endif + + ED_SHORTCUT_AND_COMMAND("editor/editor_help", TTR("Search Help"), KEY_F1); + ED_SHORTCUT_OVERRIDE("editor/editor_help", "macos", KEY_MASK_ALT | KEY_SPACE); + p->add_icon_shortcut(gui_base->get_theme_icon(SNAME("HelpSearch"), SNAME("EditorIcons")), ED_GET_SHORTCUT("editor/editor_help"), HELP_SEARCH); p->add_separator(); p->add_icon_shortcut(gui_base->get_theme_icon(SNAME("Instance"), SNAME("EditorIcons")), ED_SHORTCUT_AND_COMMAND("editor/online_docs", TTR("Online Documentation")), HELP_DOCS); p->add_icon_shortcut(gui_base->get_theme_icon(SNAME("Instance"), SNAME("EditorIcons")), ED_SHORTCUT_AND_COMMAND("editor/q&a", TTR("Questions & Answers")), HELP_QA); @@ -6510,11 +6500,10 @@ EditorNode::EditorNode() { play_button->set_focus_mode(Control::FOCUS_NONE); play_button->connect("pressed", callable_mp(this, &EditorNode::_menu_option), make_binds(RUN_PLAY)); play_button->set_tooltip(TTR("Play the project.")); -#ifdef OSX_ENABLED - play_button->set_shortcut(ED_SHORTCUT_AND_COMMAND("editor/play", TTR("Play"), KEY_MASK_CMD | KEY_B)); -#else - play_button->set_shortcut(ED_SHORTCUT_AND_COMMAND("editor/play", TTR("Play"), KEY_F5)); -#endif + + ED_SHORTCUT_AND_COMMAND("editor/play", TTR("Play"), KEY_F5); + ED_SHORTCUT_OVERRIDE("editor/play", "macos", KEY_MASK_CMD | KEY_B); + play_button->set_shortcut(ED_GET_SHORTCUT("editor/play")); pause_button = memnew(Button); pause_button->set_flat(true); @@ -6524,11 +6513,10 @@ EditorNode::EditorNode() { pause_button->set_tooltip(TTR("Pause the scene execution for debugging.")); pause_button->set_disabled(true); play_hb->add_child(pause_button); -#ifdef OSX_ENABLED - pause_button->set_shortcut(ED_SHORTCUT("editor/pause_scene", TTR("Pause Scene"), KEY_MASK_CMD | KEY_MASK_CTRL | KEY_Y)); -#else - pause_button->set_shortcut(ED_SHORTCUT("editor/pause_scene", TTR("Pause Scene"), KEY_F7)); -#endif + + ED_SHORTCUT("editor/pause_scene", TTR("Pause Scene"), KEY_F7); + ED_SHORTCUT_OVERRIDE("editor/pause_scene", "macos", KEY_MASK_CMD | KEY_MASK_CTRL | KEY_Y); + pause_button->set_shortcut(ED_GET_SHORTCUT("editor/pause_scene")); stop_button = memnew(Button); stop_button->set_flat(true); @@ -6538,11 +6526,10 @@ EditorNode::EditorNode() { stop_button->connect("pressed", callable_mp(this, &EditorNode::_menu_option), make_binds(RUN_STOP)); stop_button->set_tooltip(TTR("Stop the scene.")); stop_button->set_disabled(true); -#ifdef OSX_ENABLED - stop_button->set_shortcut(ED_SHORTCUT("editor/stop", TTR("Stop"), KEY_MASK_CMD | KEY_PERIOD)); -#else - stop_button->set_shortcut(ED_SHORTCUT("editor/stop", TTR("Stop"), KEY_F8)); -#endif + + ED_SHORTCUT("editor/stop", TTR("Stop"), KEY_F8); + ED_SHORTCUT_OVERRIDE("editor/stop", "macos", KEY_MASK_CMD | KEY_PERIOD); + stop_button->set_shortcut(ED_GET_SHORTCUT("editor/stop")); run_native = memnew(EditorRunNative); play_hb->add_child(run_native); @@ -6556,11 +6543,10 @@ EditorNode::EditorNode() { play_scene_button->set_icon(gui_base->get_theme_icon(SNAME("PlayScene"), SNAME("EditorIcons"))); play_scene_button->connect("pressed", callable_mp(this, &EditorNode::_menu_option), make_binds(RUN_PLAY_SCENE)); play_scene_button->set_tooltip(TTR("Play the edited scene.")); -#ifdef OSX_ENABLED - play_scene_button->set_shortcut(ED_SHORTCUT_AND_COMMAND("editor/play_scene", TTR("Play Scene"), KEY_MASK_CMD | KEY_R)); -#else - play_scene_button->set_shortcut(ED_SHORTCUT_AND_COMMAND("editor/play_scene", TTR("Play Scene"), KEY_F6)); -#endif + + ED_SHORTCUT_AND_COMMAND("editor/play_scene", TTR("Play Scene"), KEY_F6); + ED_SHORTCUT_OVERRIDE("editor/play_scene", "macos", KEY_MASK_CMD | KEY_R); + play_scene_button->set_shortcut(ED_GET_SHORTCUT("editor/play_scene")); play_custom_scene_button = memnew(Button); play_custom_scene_button->set_flat(true); @@ -6570,11 +6556,10 @@ EditorNode::EditorNode() { play_custom_scene_button->set_icon(gui_base->get_theme_icon(SNAME("PlayCustom"), SNAME("EditorIcons"))); play_custom_scene_button->connect("pressed", callable_mp(this, &EditorNode::_menu_option), make_binds(RUN_PLAY_CUSTOM_SCENE)); play_custom_scene_button->set_tooltip(TTR("Play custom scene")); -#ifdef OSX_ENABLED - play_custom_scene_button->set_shortcut(ED_SHORTCUT_AND_COMMAND("editor/play_custom_scene", TTR("Play Custom Scene"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_R)); -#else - play_custom_scene_button->set_shortcut(ED_SHORTCUT_AND_COMMAND("editor/play_custom_scene", TTR("Play Custom Scene"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_F5)); -#endif + + ED_SHORTCUT_AND_COMMAND("editor/play_custom_scene", TTR("Play Custom Scene"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_F5); + ED_SHORTCUT_OVERRIDE("editor/play_custom_scene", "macos", KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_R); + play_custom_scene_button->set_shortcut(ED_GET_SHORTCUT("editor/play_custom_scene")); HBoxContainer *right_menu_hb = memnew(HBoxContainer); menu_hb->add_child(right_menu_hb); @@ -7110,20 +7095,19 @@ EditorNode::EditorNode() { ResourceSaver::set_save_callback(_resource_saved); ResourceLoader::set_load_callback(_resource_loaded); -#ifdef OSX_ENABLED - ED_SHORTCUT_AND_COMMAND("editor/editor_2d", TTR("Open 2D Editor"), KEY_MASK_ALT | KEY_1); - ED_SHORTCUT_AND_COMMAND("editor/editor_3d", TTR("Open 3D Editor"), KEY_MASK_ALT | KEY_2); - ED_SHORTCUT_AND_COMMAND("editor/editor_script", TTR("Open Script Editor"), KEY_MASK_ALT | KEY_3); - ED_SHORTCUT_AND_COMMAND("editor/editor_assetlib", TTR("Open Asset Library"), KEY_MASK_ALT | KEY_4); -#else // Use the Ctrl modifier so F2 can be used to rename nodes in the scene tree dock. ED_SHORTCUT_AND_COMMAND("editor/editor_2d", TTR("Open 2D Editor"), KEY_MASK_CTRL | KEY_F1); ED_SHORTCUT_AND_COMMAND("editor/editor_3d", TTR("Open 3D Editor"), KEY_MASK_CTRL | KEY_F2); ED_SHORTCUT_AND_COMMAND("editor/editor_script", TTR("Open Script Editor"), KEY_MASK_CTRL | KEY_F3); ED_SHORTCUT_AND_COMMAND("editor/editor_assetlib", TTR("Open Asset Library"), KEY_MASK_CTRL | KEY_F4); -#endif - ED_SHORTCUT_AND_COMMAND("editor/editor_next", TTR("Next Editor Tab")); - ED_SHORTCUT_AND_COMMAND("editor/editor_prev", TTR("Previous Editor Tab")); + + ED_SHORTCUT_OVERRIDE("editor/editor_2d", "macos", KEY_MASK_ALT | KEY_1); + ED_SHORTCUT_OVERRIDE("editor/editor_3d", "macos", KEY_MASK_ALT | KEY_2); + ED_SHORTCUT_OVERRIDE("editor/editor_script", "macos", KEY_MASK_ALT | KEY_3); + ED_SHORTCUT_OVERRIDE("editor/editor_assetlib", "macos", KEY_MASK_ALT | KEY_4); + + ED_SHORTCUT_AND_COMMAND("editor/editor_next", TTR("Open the next Editor")); + ED_SHORTCUT_AND_COMMAND("editor/editor_prev", TTR("Open the previous Editor")); screenshot_timer = memnew(Timer); screenshot_timer->set_one_shot(true); diff --git a/editor/editor_resource_picker.cpp b/editor/editor_resource_picker.cpp index a4ab749db4..31c62880e2 100644 --- a/editor/editor_resource_picker.cpp +++ b/editor/editor_resource_picker.cpp @@ -135,6 +135,10 @@ void EditorResourcePicker::_file_selected(const String &p_path) { _update_resource(); } +void EditorResourcePicker::_file_quick_selected() { + _file_selected(quick_open->get_selected()); +} + void EditorResourcePicker::_update_menu() { _update_menu_items(); @@ -153,7 +157,10 @@ void EditorResourcePicker::_update_menu_items() { // Add options for creating specific subtypes of the base resource type. set_create_options(edit_menu); - // Add an option to load a resource from a file. + // Add an option to load a resource from a file using the QuickOpen dialog. + edit_menu->add_icon_item(get_theme_icon(SNAME("Load"), SNAME("EditorIcons")), TTR("Quick Load"), OBJ_MENU_QUICKLOAD); + + // Add an option to load a resource from a file using the regular file dialog. edit_menu->add_icon_item(get_theme_icon(SNAME("Load"), SNAME("EditorIcons")), TTR("Load"), OBJ_MENU_LOAD); // Add options for changing existing value of the resource. @@ -246,6 +253,17 @@ void EditorResourcePicker::_edit_menu_cbk(int p_which) { file_dialog->popup_file_dialog(); } break; + case OBJ_MENU_QUICKLOAD: { + if (!quick_open) { + quick_open = memnew(EditorQuickOpen); + add_child(quick_open); + quick_open->connect("quick_open", callable_mp(this, &EditorResourcePicker::_file_quick_selected)); + } + + quick_open->popup_dialog(base_type); + quick_open->set_title(TTR("Resource")); + } break; + case OBJ_MENU_EDIT: { if (edited_resource.is_valid()) { emit_signal(SNAME("resource_selected"), edited_resource); diff --git a/editor/editor_resource_picker.h b/editor/editor_resource_picker.h index d77c31f831..d0dad0287b 100644 --- a/editor/editor_resource_picker.h +++ b/editor/editor_resource_picker.h @@ -32,6 +32,7 @@ #define EDITOR_RESOURCE_PICKER_H #include "editor_file_dialog.h" +#include "quick_open.h" #include "scene/gui/box_container.h" #include "scene/gui/button.h" #include "scene/gui/popup_menu.h" @@ -54,9 +55,11 @@ class EditorResourcePicker : public HBoxContainer { TextureRect *preview_rect; Button *edit_button; EditorFileDialog *file_dialog = nullptr; + EditorQuickOpen *quick_open = nullptr; enum MenuOption { OBJ_MENU_LOAD, + OBJ_MENU_QUICKLOAD, OBJ_MENU_EDIT, OBJ_MENU_CLEAR, OBJ_MENU_MAKE_UNIQUE, @@ -75,6 +78,7 @@ class EditorResourcePicker : public HBoxContainer { void _update_resource_preview(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, ObjectID p_obj); void _resource_selected(); + void _file_quick_selected(); void _file_selected(const String &p_path); void _update_menu(); diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp index 1953270b08..1820804cfe 100644 --- a/editor/editor_settings.cpp +++ b/editor/editor_settings.cpp @@ -592,18 +592,16 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { _initial_set("editors/3d/navigation/warped_mouse_panning", true); // 3D: Navigation feel - EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/3d/navigation_feel/orbit_sensitivity", 0.4, "0.0,2,0.01") - EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/3d/navigation_feel/orbit_inertia", 0.05, "0.0,1,0.01") - EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/3d/navigation_feel/translation_inertia", 0.15, "0.0,1,0.01") - EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/3d/navigation_feel/zoom_inertia", 0.075, "0.0,1,0.01") - EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/3d/navigation_feel/manipulation_orbit_inertia", 0.075, "0.0,1,0.01") - EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/3d/navigation_feel/manipulation_translation_inertia", 0.075, "0.0,1,0.01") + EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/3d/navigation_feel/orbit_sensitivity", 0.25, "0.01,2,0.001") + EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/3d/navigation_feel/orbit_inertia", 0.0, "0,1,0.001") + EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/3d/navigation_feel/translation_inertia", 0.05, "0,1,0.001") + EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/3d/navigation_feel/zoom_inertia", 0.05, "0,1,0.001") // 3D: Freelook EDITOR_SETTING(Variant::INT, PROPERTY_HINT_ENUM, "editors/3d/freelook/freelook_navigation_scheme", 0, "Default,Partially Axis-Locked (id Tech),Fully Axis-Locked (Minecraft)") - EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/3d/freelook/freelook_sensitivity", 0.4, "0.0,2,0.01") - EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/3d/freelook/freelook_inertia", 0.1, "0.0,1,0.01") - EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/3d/freelook/freelook_base_speed", 5.0, "0.0,10,0.01") + EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/3d/freelook/freelook_sensitivity", 0.25, "0.01,2,0.001") + EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/3d/freelook/freelook_inertia", 0.0, "0,1,0.001") + EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/3d/freelook/freelook_base_speed", 5.0, "0,10,0.01") EDITOR_SETTING(Variant::INT, PROPERTY_HINT_ENUM, "editors/3d/freelook/freelook_activation_modifier", 0, "None,Shift,Alt,Meta,Ctrl") _initial_set("editors/3d/freelook/freelook_speed_zoom_link", false); @@ -712,7 +710,7 @@ void EditorSettings::_load_godot2_text_editor_theme() { _initial_set("text_editor/theme/highlighting/background_color", Color(0.13, 0.12, 0.15)); _initial_set("text_editor/theme/highlighting/completion_background_color", Color(0.17, 0.16, 0.2)); _initial_set("text_editor/theme/highlighting/completion_selected_color", Color(0.26, 0.26, 0.27)); - _initial_set("text_editor/theme/highlighting/completion_existing_color", Color(0.13, 0.87, 0.87, 0.87)); + _initial_set("text_editor/theme/highlighting/completion_existing_color", Color(0.87, 0.87, 0.87, 0.13)); _initial_set("text_editor/theme/highlighting/completion_scroll_color", Color(1, 1, 1)); _initial_set("text_editor/theme/highlighting/completion_font_color", Color(0.67, 0.67, 0.67)); _initial_set("text_editor/theme/highlighting/text_color", Color(0.67, 0.67, 0.67)); @@ -1411,7 +1409,7 @@ Ref<Shortcut> EditorSettings::get_shortcut(const String &p_name) const { // If there was no override, check the default builtins to see if it has an InputEvent for the provided name. if (sc.is_null()) { - const OrderedHashMap<String, List<Ref<InputEvent>>>::ConstElement builtin_default = InputMap::get_singleton()->get_builtins().find(p_name); + const OrderedHashMap<String, List<Ref<InputEvent>>>::ConstElement builtin_default = InputMap::get_singleton()->get_builtins_with_feature_overrides_applied().find(p_name); if (builtin_default) { sc.instantiate(); sc->set_event(builtin_default.get().front()->get()); @@ -1446,6 +1444,23 @@ Ref<Shortcut> ED_GET_SHORTCUT(const String &p_path) { return sc; } +void ED_SHORTCUT_OVERRIDE(const String &p_path, const String &p_feature, Key p_keycode) { + Ref<Shortcut> sc = EditorSettings::get_singleton()->get_shortcut(p_path); + ERR_FAIL_COND_MSG(!sc.is_valid(), "Used ED_SHORTCUT_OVERRIDE with invalid shortcut: " + p_path + "."); + + // Only add the override if the OS supports the provided feature. + if (OS::get_singleton()->has_feature(p_feature)) { + Ref<InputEventKey> ie; + if (p_keycode) { + ie = InputEventKey::create_reference(p_keycode); + } + + // Directly override the existing shortcut. + sc->set_event(ie); + sc->set_meta("original", ie); + } +} + Ref<Shortcut> ED_SHORTCUT(const String &p_path, const String &p_name, Key p_keycode) { #ifdef OSX_ENABLED // Use Cmd+Backspace as a general replacement for Delete shortcuts on macOS @@ -1456,14 +1471,7 @@ Ref<Shortcut> ED_SHORTCUT(const String &p_path, const String &p_name, Key p_keyc Ref<InputEventKey> ie; if (p_keycode) { - ie.instantiate(); - - ie->set_unicode(p_keycode & KEY_CODE_MASK); - ie->set_keycode(p_keycode & KEY_CODE_MASK); - ie->set_shift_pressed(bool(p_keycode & KEY_MASK_SHIFT)); - ie->set_alt_pressed(bool(p_keycode & KEY_MASK_ALT)); - ie->set_ctrl_pressed(bool(p_keycode & KEY_MASK_CTRL)); - ie->set_meta_pressed(bool(p_keycode & KEY_MASK_META)); + ie = InputEventKey::create_reference(p_keycode); } if (!EditorSettings::get_singleton()) { @@ -1504,15 +1512,23 @@ void EditorSettings::set_builtin_action_override(const String &p_name, const Arr // Check if the provided event array is same as built-in. If it is, it does not need to be added to the overrides. // Note that event order must also be the same. bool same_as_builtin = true; - OrderedHashMap<String, List<Ref<InputEvent>>>::ConstElement builtin_default = InputMap::get_singleton()->get_builtins().find(p_name); + OrderedHashMap<String, List<Ref<InputEvent>>>::ConstElement builtin_default = InputMap::get_singleton()->get_builtins_with_feature_overrides_applied().find(p_name); if (builtin_default) { List<Ref<InputEvent>> builtin_events = builtin_default.get(); - if (p_events.size() == builtin_events.size()) { + // In the editor we only care about key events. + List<Ref<InputEventKey>> builtin_key_events; + for (Ref<InputEventKey> iek : builtin_events) { + if (iek.is_valid()) { + builtin_key_events.push_back(iek); + } + } + + if (p_events.size() == builtin_key_events.size()) { int event_idx = 0; // Check equality of each event. - for (const Ref<InputEvent> &E : builtin_events) { + for (const Ref<InputEventKey> &E : builtin_key_events) { if (!E->is_match(p_events[event_idx])) { same_as_builtin = false; break; diff --git a/editor/editor_settings.h b/editor/editor_settings.h index 86e15f5ff5..9067539e29 100644 --- a/editor/editor_settings.h +++ b/editor/editor_settings.h @@ -201,6 +201,7 @@ Variant _EDITOR_GET(const String &p_setting); #define ED_IS_SHORTCUT(p_name, p_ev) (EditorSettings::get_singleton()->is_shortcut(p_name, p_ev)) Ref<Shortcut> ED_SHORTCUT(const String &p_path, const String &p_name, Key p_keycode = KEY_NONE); +void ED_SHORTCUT_OVERRIDE(const String &p_path, const String &p_feature, Key p_keycode = KEY_NONE); Ref<Shortcut> ED_GET_SHORTCUT(const String &p_path); #endif // EDITOR_SETTINGS_H diff --git a/editor/import/resource_importer_obj.h b/editor/import/resource_importer_obj.h index 414e0c1fe6..1bb5ef33ce 100644 --- a/editor/import/resource_importer_obj.h +++ b/editor/import/resource_importer_obj.h @@ -64,6 +64,9 @@ public: virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override; + // Threaded import can currently cause deadlocks, see GH-48265. + virtual bool can_import_threaded() const override { return false; } + ResourceImporterOBJ(); }; diff --git a/editor/import/resource_importer_texture_atlas.cpp b/editor/import/resource_importer_texture_atlas.cpp index dec1466da1..869af209d3 100644 --- a/editor/import/resource_importer_texture_atlas.cpp +++ b/editor/import/resource_importer_texture_atlas.cpp @@ -131,9 +131,9 @@ static void _plot_triangle(Vector2i *vertices, const Vector2i &p_offset, bool p_ double xf = x[0]; double xt = x[0] + dx_upper; // if y[0] == y[1], special case int max_y = MIN(y[2], height - p_offset.y - 1); - for (int yi = y[0]; yi <= max_y; yi++) { + for (int yi = y[0]; yi < max_y; yi++) { if (yi >= 0) { - for (int xi = (xf > 0 ? int(xf) : 0); xi <= (xt < width ? xt : width - 1); xi++) { + for (int xi = (xf > 0 ? int(xf) : 0); xi < (xt < width ? xt : width - 1); xi++) { int px = xi, py = yi; int sx = px, sy = py; sx = CLAMP(sx, 0, src_width - 1); diff --git a/editor/plugins/animation_blend_tree_editor_plugin.cpp b/editor/plugins/animation_blend_tree_editor_plugin.cpp index 030d90eeca..24cb660f7a 100644 --- a/editor/plugins/animation_blend_tree_editor_plugin.cpp +++ b/editor/plugins/animation_blend_tree_editor_plugin.cpp @@ -66,9 +66,13 @@ void AnimationNodeBlendTreeEditor::remove_custom_type(const Ref<Script> &p_scrip _update_options_menu(); } -void AnimationNodeBlendTreeEditor::_update_options_menu() { +void AnimationNodeBlendTreeEditor::_update_options_menu(bool p_has_input_ports) { add_node->get_popup()->clear(); + add_node->get_popup()->set_size(Size2i(-1, -1)); for (int i = 0; i < add_options.size(); i++) { + if (p_has_input_ports && add_options[i].input_port_count == 0) { + continue; + } add_node->get_popup()->add_item(add_options[i].name, i); } @@ -309,6 +313,11 @@ void AnimationNodeBlendTreeEditor::_add_node(int p_idx) { return; } + if (!from_node.is_empty() && anode->get_input_count() == 0) { + from_node = ""; + return; + } + Point2 instance_pos = graph->get_scroll_ofs(); if (use_popup_menu_position) { instance_pos += popup_menu_position; @@ -328,11 +337,51 @@ void AnimationNodeBlendTreeEditor::_add_node(int p_idx) { undo_redo->create_action(TTR("Add Node to BlendTree")); undo_redo->add_do_method(blend_tree.ptr(), "add_node", name, anode, instance_pos / EDSCALE); undo_redo->add_undo_method(blend_tree.ptr(), "remove_node", name); + + if (!from_node.is_empty()) { + undo_redo->add_do_method(blend_tree.ptr(), "connect_node", name, 0, from_node); + from_node = ""; + } + if (!to_node.is_empty() && to_slot != -1) { + undo_redo->add_do_method(blend_tree.ptr(), "connect_node", to_node, to_slot, name); + to_node = ""; + to_slot = -1; + } + undo_redo->add_do_method(this, "_update_graph"); undo_redo->add_undo_method(this, "_update_graph"); undo_redo->commit_action(); } +void AnimationNodeBlendTreeEditor::_popup(bool p_has_input_ports, const Vector2 &p_popup_position, const Vector2 &p_node_position) { + _update_options_menu(p_has_input_ports); + use_popup_menu_position = true; + popup_menu_position = p_popup_position; + add_node->get_popup()->set_position(p_node_position); + add_node->get_popup()->popup(); +} + +void AnimationNodeBlendTreeEditor::_popup_request(const Vector2 &p_position) { + _popup(false, graph->get_local_mouse_position(), p_position); +} + +void AnimationNodeBlendTreeEditor::_connection_to_empty(const String &p_from, int p_from_slot, const Vector2 &p_release_position) { + Ref<AnimationNode> node = blend_tree->get_node(p_from); + if (node.is_valid()) { + from_node = p_from; + _popup(true, p_release_position, graph->get_global_mouse_position()); + } +} + +void AnimationNodeBlendTreeEditor::_connection_from_empty(const String &p_to, int p_to_slot, const Vector2 &p_release_position) { + Ref<AnimationNode> node = blend_tree->get_node(p_to); + if (node.is_valid()) { + to_node = p_to; + to_slot = p_to_slot; + _popup(false, p_release_position, graph->get_global_mouse_position()); + } +} + void AnimationNodeBlendTreeEditor::_node_dragged(const Vector2 &p_from, const Vector2 &p_to, const StringName &p_which) { updating = true; undo_redo->create_action(TTR("Node Moved")); @@ -431,14 +480,6 @@ void AnimationNodeBlendTreeEditor::_delete_nodes_request() { undo_redo->commit_action(); } -void AnimationNodeBlendTreeEditor::_popup_request(const Vector2 &p_position) { - _update_options_menu(); - use_popup_menu_position = true; - popup_menu_position = graph->get_local_mouse_position(); - add_node->get_popup()->set_position(p_position); - add_node->get_popup()->popup(); -} - void AnimationNodeBlendTreeEditor::_node_selected(Object *p_node) { GraphNode *gn = Object::cast_to<GraphNode>(p_node); ERR_FAIL_COND(!gn); @@ -890,6 +931,8 @@ AnimationNodeBlendTreeEditor::AnimationNodeBlendTreeEditor() { graph->connect("scroll_offset_changed", callable_mp(this, &AnimationNodeBlendTreeEditor::_scroll_changed)); graph->connect("delete_nodes_request", callable_mp(this, &AnimationNodeBlendTreeEditor::_delete_nodes_request)); graph->connect("popup_request", callable_mp(this, &AnimationNodeBlendTreeEditor::_popup_request)); + graph->connect("connection_to_empty", callable_mp(this, &AnimationNodeBlendTreeEditor::_connection_to_empty)); + graph->connect("connection_from_empty", callable_mp(this, &AnimationNodeBlendTreeEditor::_connection_from_empty)); float graph_minimap_opacity = EditorSettings::get_singleton()->get("editors/visual_editors/minimap_opacity"); graph->set_minimap_opacity(graph_minimap_opacity); @@ -905,13 +948,13 @@ AnimationNodeBlendTreeEditor::AnimationNodeBlendTreeEditor() { add_node->connect("about_to_popup", callable_mp(this, &AnimationNodeBlendTreeEditor::_update_options_menu)); add_options.push_back(AddOption("Animation", "AnimationNodeAnimation")); - add_options.push_back(AddOption("OneShot", "AnimationNodeOneShot")); - add_options.push_back(AddOption("Add2", "AnimationNodeAdd2")); - add_options.push_back(AddOption("Add3", "AnimationNodeAdd3")); - add_options.push_back(AddOption("Blend2", "AnimationNodeBlend2")); - add_options.push_back(AddOption("Blend3", "AnimationNodeBlend3")); - add_options.push_back(AddOption("Seek", "AnimationNodeTimeSeek")); - add_options.push_back(AddOption("TimeScale", "AnimationNodeTimeScale")); + add_options.push_back(AddOption("OneShot", "AnimationNodeOneShot", 2)); + add_options.push_back(AddOption("Add2", "AnimationNodeAdd2", 2)); + add_options.push_back(AddOption("Add3", "AnimationNodeAdd3", 3)); + add_options.push_back(AddOption("Blend2", "AnimationNodeBlend2", 2)); + add_options.push_back(AddOption("Blend3", "AnimationNodeBlend3", 3)); + add_options.push_back(AddOption("Seek", "AnimationNodeTimeSeek", 1)); + add_options.push_back(AddOption("TimeScale", "AnimationNodeTimeScale", 1)); add_options.push_back(AddOption("Transition", "AnimationNodeTransition")); add_options.push_back(AddOption("BlendTree", "AnimationNodeBlendTree")); add_options.push_back(AddOption("BlendSpace1D", "AnimationNodeBlendSpace1D")); diff --git a/editor/plugins/animation_blend_tree_editor_plugin.h b/editor/plugins/animation_blend_tree_editor_plugin.h index 9f09069719..0fcafad40e 100644 --- a/editor/plugins/animation_blend_tree_editor_plugin.h +++ b/editor/plugins/animation_blend_tree_editor_plugin.h @@ -64,22 +64,28 @@ class AnimationNodeBlendTreeEditor : public AnimationTreeNodeEditorPlugin { Map<StringName, ProgressBar *> animations; Vector<EditorProperty *> visible_properties; + String to_node = ""; + int to_slot = -1; + String from_node = ""; + void _update_graph(); struct AddOption { String name; String type; Ref<Script> script; - AddOption(const String &p_name = String(), const String &p_type = String()) : + int input_port_count; + AddOption(const String &p_name = String(), const String &p_type = String(), bool p_input_port_count = 0) : name(p_name), - type(p_type) { + type(p_type), + input_port_count(p_input_port_count) { } }; Vector<AddOption> add_options; void _add_node(int p_idx); - void _update_options_menu(); + void _update_options_menu(bool p_has_input_ports = false); static AnimationNodeBlendTreeEditor *singleton; @@ -98,7 +104,6 @@ class AnimationNodeBlendTreeEditor : public AnimationTreeNodeEditorPlugin { void _anim_selected(int p_index, Array p_options, const String &p_node); void _delete_request(const String &p_which); void _delete_nodes_request(); - void _popup_request(const Vector2 &p_position); bool _update_filters(const Ref<AnimationNode> &anode); void _edit_filters(const String &p_which); @@ -106,6 +111,11 @@ class AnimationNodeBlendTreeEditor : public AnimationTreeNodeEditorPlugin { void _filter_toggled(); Ref<AnimationNode> _filter_edit; + void _popup(bool p_has_input_ports, const Vector2 &p_popup_position, const Vector2 &p_node_position); + void _popup_request(const Vector2 &p_position); + void _connection_to_empty(const String &p_from, int p_from_slot, const Vector2 &p_release_position); + void _connection_from_empty(const String &p_to, int p_to_slot, const Vector2 &p_release_position); + void _property_changed(const StringName &p_property, const Variant &p_value, const String &p_field, bool p_changing); void _removed_from_graph(); diff --git a/editor/plugins/node_3d_editor_plugin.cpp b/editor/plugins/node_3d_editor_plugin.cpp index 5263352502..cae8df1193 100644 --- a/editor/plugins/node_3d_editor_plugin.cpp +++ b/editor/plugins/node_3d_editor_plugin.cpp @@ -265,15 +265,13 @@ void Node3DEditorViewport::_update_camera(real_t p_interp_delta) { if (is_freelook_active()) { // Higher inertia should increase "lag" (lerp with factor between 0 and 1) // Inertia of zero should produce instant movement (lerp with factor of 1) in this case it returns a really high value and gets clamped to 1. - real_t inertia = EDITOR_GET("editors/3d/freelook/freelook_inertia"); - inertia = MAX(0.001, inertia); + const real_t inertia = EDITOR_GET("editors/3d/freelook/freelook_inertia"); real_t factor = (1.0 / inertia) * p_interp_delta; // We interpolate a different point here, because in freelook mode the focus point (cursor.pos) orbits around eye_pos camera_cursor.eye_pos = old_camera_cursor.eye_pos.lerp(cursor.eye_pos, CLAMP(factor, 0, 1)); - real_t orbit_inertia = EDITOR_GET("editors/3d/navigation_feel/orbit_inertia"); - orbit_inertia = MAX(0.0001, orbit_inertia); + const real_t orbit_inertia = EDITOR_GET("editors/3d/navigation_feel/orbit_inertia"); camera_cursor.x_rot = Math::lerp(old_camera_cursor.x_rot, cursor.x_rot, MIN(1.f, p_interp_delta * (1 / orbit_inertia))); camera_cursor.y_rot = Math::lerp(old_camera_cursor.y_rot, cursor.y_rot, MIN(1.f, p_interp_delta * (1 / orbit_inertia))); @@ -289,24 +287,9 @@ void Node3DEditorViewport::_update_camera(real_t p_interp_delta) { camera_cursor.pos = camera_cursor.eye_pos + forward * camera_cursor.distance; } else { - //when not being manipulated, move softly - real_t free_orbit_inertia = EDITOR_GET("editors/3d/navigation_feel/orbit_inertia"); - real_t free_translation_inertia = EDITOR_GET("editors/3d/navigation_feel/translation_inertia"); - //when being manipulated, move more quickly - real_t manip_orbit_inertia = EDITOR_GET("editors/3d/navigation_feel/manipulation_orbit_inertia"); - real_t manip_translation_inertia = EDITOR_GET("editors/3d/navigation_feel/manipulation_translation_inertia"); - - real_t zoom_inertia = EDITOR_GET("editors/3d/navigation_feel/zoom_inertia"); - - //determine if being manipulated - bool manipulated = Input::get_singleton()->get_mouse_button_mask() & (2 | 4); - manipulated |= Input::get_singleton()->is_key_pressed(KEY_SHIFT); - manipulated |= Input::get_singleton()->is_key_pressed(KEY_ALT); - manipulated |= Input::get_singleton()->is_key_pressed(KEY_CTRL); - - real_t orbit_inertia = MAX(0.00001, manipulated ? manip_orbit_inertia : free_orbit_inertia); - real_t translation_inertia = MAX(0.0001, manipulated ? manip_translation_inertia : free_translation_inertia); - zoom_inertia = MAX(0.0001, zoom_inertia); + const real_t orbit_inertia = EDITOR_GET("editors/3d/navigation_feel/orbit_inertia"); + const real_t translation_inertia = EDITOR_GET("editors/3d/navigation_feel/translation_inertia"); + const real_t zoom_inertia = EDITOR_GET("editors/3d/navigation_feel/zoom_inertia"); camera_cursor.x_rot = Math::lerp(old_camera_cursor.x_rot, cursor.x_rot, MIN(1.f, p_interp_delta * (1 / orbit_inertia))); camera_cursor.y_rot = Math::lerp(old_camera_cursor.y_rot, cursor.y_rot, MIN(1.f, p_interp_delta * (1 / orbit_inertia))); @@ -4196,7 +4179,8 @@ Node3DEditorViewport::Node3DEditorViewport(Node3DEditor *p_spatial_editor, Edito VBoxContainer *vbox = memnew(VBoxContainer); surface->add_child(vbox); - vbox->set_position(Point2(10, 10) * EDSCALE); + vbox->set_offset(SIDE_LEFT, 10 * EDSCALE); + vbox->set_offset(SIDE_TOP, 10 * EDSCALE); view_menu = memnew(MenuButton); view_menu->set_flat(false); @@ -4820,7 +4804,7 @@ void _update_all_gizmos(Node *p_node) { } void Node3DEditor::update_all_gizmos(Node *p_node) { - if (!p_node && get_tree()) { + if (!p_node && is_inside_tree()) { p_node = get_tree()->get_edited_scene_root(); } diff --git a/editor/plugins/script_editor_plugin.cpp b/editor/plugins/script_editor_plugin.cpp index ee9103be44..07e4d4ebf0 100644 --- a/editor/plugins/script_editor_plugin.cpp +++ b/editor/plugins/script_editor_plugin.cpp @@ -808,39 +808,35 @@ void ScriptEditor::_copy_script_path() { } void ScriptEditor::_close_other_tabs() { - int child_count = tab_container->get_child_count(); int current_idx = tab_container->get_current_tab(); - for (int i = child_count - 1; i >= 0; i--) { - if (i == current_idx) { - continue; - } - - tab_container->set_current_tab(i); - ScriptEditorBase *se = Object::cast_to<ScriptEditorBase>(tab_container->get_child(i)); - - if (se) { - // Maybe there are unsaved changes - if (se->is_unsaved()) { - _ask_close_current_unsaved_tab(se); - continue; - } + for (int i = tab_container->get_child_count() - 1; i >= 0; i--) { + if (i != current_idx) { + script_close_queue.push_back(i); } - - _close_current_tab(false); } + _queue_close_tabs(); } void ScriptEditor::_close_all_tabs() { - int child_count = tab_container->get_child_count(); - for (int i = child_count - 1; i >= 0; i--) { - tab_container->set_current_tab(i); - ScriptEditorBase *se = Object::cast_to<ScriptEditorBase>(tab_container->get_child(i)); + for (int i = tab_container->get_child_count() - 1; i >= 0; i--) { + script_close_queue.push_back(i); + } + _queue_close_tabs(); +} + +void ScriptEditor::_queue_close_tabs() { + while (!script_close_queue.is_empty()) { + int idx = script_close_queue.front()->get(); + script_close_queue.pop_front(); + tab_container->set_current_tab(idx); + ScriptEditorBase *se = Object::cast_to<ScriptEditorBase>(tab_container->get_child(idx)); if (se) { - // Maybe there are unsaved changes + // Maybe there are unsaved changes. if (se->is_unsaved()) { _ask_close_current_unsaved_tab(se); - continue; + erase_tab_confirm->connect(SceneStringNames::get_singleton()->visibility_changed, callable_mp(this, &ScriptEditor::_queue_close_tabs), varray(), CONNECT_ONESHOT); + break; } } diff --git a/editor/plugins/script_editor_plugin.h b/editor/plugins/script_editor_plugin.h index 920c3070e6..7620605570 100644 --- a/editor/plugins/script_editor_plugin.h +++ b/editor/plugins/script_editor_plugin.h @@ -309,6 +309,7 @@ class ScriptEditor : public PanelContainer { int history_pos; List<String> previous_scripts; + List<int> script_close_queue; void _tab_changed(int p_which); void _menu_option(int p_option); @@ -341,6 +342,7 @@ class ScriptEditor : public PanelContainer { void _close_docs_tab(); void _close_other_tabs(); void _close_all_tabs(); + void _queue_close_tabs(); void _copy_script_path(); diff --git a/editor/plugins/script_text_editor.cpp b/editor/plugins/script_text_editor.cpp index ebd46be3b4..2b1ca068ee 100644 --- a/editor/plugins/script_text_editor.cpp +++ b/editor/plugins/script_text_editor.cpp @@ -1961,11 +1961,8 @@ void ScriptTextEditor::register_editor() { ED_SHORTCUT("script_text_editor/toggle_fold_line", TTR("Fold/Unfold Line"), KEY_MASK_ALT | KEY_F); ED_SHORTCUT("script_text_editor/fold_all_lines", TTR("Fold All Lines"), KEY_NONE); ED_SHORTCUT("script_text_editor/unfold_all_lines", TTR("Unfold All Lines"), KEY_NONE); -#ifdef OSX_ENABLED - ED_SHORTCUT("script_text_editor/duplicate_selection", TTR("Duplicate Selection"), KEY_MASK_SHIFT | KEY_MASK_CMD | KEY_C); -#else ED_SHORTCUT("script_text_editor/duplicate_selection", TTR("Duplicate Selection"), KEY_MASK_SHIFT | KEY_MASK_CMD | KEY_D); -#endif + ED_SHORTCUT_OVERRIDE("script_text_editor/duplicate_selection", "macos", KEY_MASK_SHIFT | KEY_MASK_CMD | KEY_C); ED_SHORTCUT("script_text_editor/evaluate_selection", TTR("Evaluate Selection"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_E); ED_SHORTCUT("script_text_editor/trim_trailing_whitespace", TTR("Trim Trailing Whitespace"), KEY_MASK_CMD | KEY_MASK_ALT | KEY_T); ED_SHORTCUT("script_text_editor/convert_indent_to_spaces", TTR("Convert Indent to Spaces"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_Y); @@ -1973,42 +1970,35 @@ void ScriptTextEditor::register_editor() { ED_SHORTCUT("script_text_editor/auto_indent", TTR("Auto Indent"), KEY_MASK_CMD | KEY_I); ED_SHORTCUT_AND_COMMAND("script_text_editor/find", TTR("Find..."), KEY_MASK_CMD | KEY_F); -#ifdef OSX_ENABLED - ED_SHORTCUT("script_text_editor/find_next", TTR("Find Next"), KEY_MASK_CMD | KEY_G); - ED_SHORTCUT("script_text_editor/find_previous", TTR("Find Previous"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_G); - ED_SHORTCUT_AND_COMMAND("script_text_editor/replace", TTR("Replace..."), KEY_MASK_ALT | KEY_MASK_CMD | KEY_F); -#else + ED_SHORTCUT("script_text_editor/find_next", TTR("Find Next"), KEY_F3); + ED_SHORTCUT_OVERRIDE("script_text_editor/find_next", "macos", KEY_MASK_CMD | KEY_G); + ED_SHORTCUT("script_text_editor/find_previous", TTR("Find Previous"), KEY_MASK_SHIFT | KEY_F3); + ED_SHORTCUT_OVERRIDE("script_text_editor/find_previous", "macos", KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_G); + ED_SHORTCUT_AND_COMMAND("script_text_editor/replace", TTR("Replace..."), KEY_MASK_CMD | KEY_R); -#endif + ED_SHORTCUT_OVERRIDE("script_text_editor/replace", "macos", KEY_MASK_ALT | KEY_MASK_CMD | KEY_F); ED_SHORTCUT("script_text_editor/find_in_files", TTR("Find in Files..."), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_F); ED_SHORTCUT("script_text_editor/replace_in_files", TTR("Replace in Files..."), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_R); -#ifdef OSX_ENABLED - ED_SHORTCUT("script_text_editor/contextual_help", TTR("Contextual Help"), KEY_MASK_ALT | KEY_MASK_SHIFT | KEY_SPACE); -#else ED_SHORTCUT("script_text_editor/contextual_help", TTR("Contextual Help"), KEY_MASK_ALT | KEY_F1); -#endif + ED_SHORTCUT_OVERRIDE("script_text_editor/contextual_help", "macos", KEY_MASK_ALT | KEY_MASK_SHIFT | KEY_SPACE); ED_SHORTCUT("script_text_editor/toggle_bookmark", TTR("Toggle Bookmark"), KEY_MASK_CMD | KEY_MASK_ALT | KEY_B); ED_SHORTCUT("script_text_editor/goto_next_bookmark", TTR("Go to Next Bookmark"), KEY_MASK_CMD | KEY_B); ED_SHORTCUT("script_text_editor/goto_previous_bookmark", TTR("Go to Previous Bookmark"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_B); ED_SHORTCUT("script_text_editor/remove_all_bookmarks", TTR("Remove All Bookmarks"), KEY_NONE); -#ifdef OSX_ENABLED - ED_SHORTCUT("script_text_editor/goto_function", TTR("Go to Function..."), KEY_MASK_CTRL | KEY_MASK_CMD | KEY_J); -#else ED_SHORTCUT("script_text_editor/goto_function", TTR("Go to Function..."), KEY_MASK_ALT | KEY_MASK_CMD | KEY_F); -#endif + ED_SHORTCUT_OVERRIDE("script_text_editor/goto_function", "macos", KEY_MASK_CTRL | KEY_MASK_CMD | KEY_J); + ED_SHORTCUT("script_text_editor/goto_line", TTR("Go to Line..."), KEY_MASK_CMD | KEY_L); -#ifdef OSX_ENABLED - ED_SHORTCUT("script_text_editor/toggle_breakpoint", TTR("Toggle Breakpoint"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_B); -#else ED_SHORTCUT("script_text_editor/toggle_breakpoint", TTR("Toggle Breakpoint"), KEY_F9); -#endif + ED_SHORTCUT_OVERRIDE("script_text_editor/toggle_breakpoint", "macos", KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_B); + ED_SHORTCUT("script_text_editor/remove_all_breakpoints", TTR("Remove All Breakpoints"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_F9); ED_SHORTCUT("script_text_editor/goto_next_breakpoint", TTR("Go to Next Breakpoint"), KEY_MASK_CMD | KEY_PERIOD); ED_SHORTCUT("script_text_editor/goto_previous_breakpoint", TTR("Go to Previous Breakpoint"), KEY_MASK_CMD | KEY_COMMA); diff --git a/editor/settings_config_dialog.cpp b/editor/settings_config_dialog.cpp index 649caf5373..f024589ef1 100644 --- a/editor/settings_config_dialog.cpp +++ b/editor/settings_config_dialog.cpp @@ -268,7 +268,7 @@ void EditorSettingsDialog::_update_shortcuts() { Array events; // Need to get the list of events into an array so it can be set as metadata on the item. Vector<String> event_strings; - List<Ref<InputEvent>> all_default_events = InputMap::get_singleton()->get_builtins().find(action_name).value(); + List<Ref<InputEvent>> all_default_events = InputMap::get_singleton()->get_builtins_with_feature_overrides_applied().find(action_name).value(); List<Ref<InputEventKey>> key_default_events; // Remove all non-key events from the defaults. Only check keys, since we are in the editor. for (List<Ref<InputEvent>>::Element *I = all_default_events.front(); I; I = I->next()) { @@ -404,7 +404,7 @@ void EditorSettingsDialog::_shortcut_button_pressed(Object *p_item, int p_column switch (button_idx) { case SHORTCUT_REVERT: { Array events; - List<Ref<InputEvent>> defaults = InputMap::get_singleton()->get_builtins()[current_action]; + List<Ref<InputEvent>> defaults = InputMap::get_singleton()->get_builtins_with_feature_overrides_applied()[current_action]; // Convert the list to an array, and only keep key events as this is for the editor. for (const Ref<InputEvent> &k : defaults) { diff --git a/editor/translations/af.po b/editor/translations/af.po index 70e016ee65..223a1b1c45 100644 --- a/editor/translations/af.po +++ b/editor/translations/af.po @@ -1057,7 +1057,7 @@ msgstr "" msgid "Dependencies" msgstr "Afhanklikhede" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Hulpbron" @@ -1720,14 +1720,14 @@ msgid "" "Enabled'." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Custom debug template not found." msgstr "Sjabloon lêer nie gevind nie:\n" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2129,7 +2129,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "(Her)Invoer van Bates" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "Bo" @@ -2632,6 +2632,30 @@ msgid "Current scene not saved. Open anyway?" msgstr "" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Undo: %s" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Redo: %s" +msgstr "" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "" @@ -3271,6 +3295,11 @@ msgid "Merge With Existing" msgstr "" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Anim Verander Transformasie" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "" @@ -3519,6 +3548,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "" @@ -5675,6 +5708,17 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Locked" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Verwyder Seleksie" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6614,7 +6658,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7211,6 +7259,16 @@ msgstr "Skep" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "Anim Verander Transform" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Skrap" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7739,11 +7797,12 @@ msgid "Skeleton2D" msgstr "EnkelHouer" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "Laai Verstek" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" +msgid "Overwrite Rest Pose" msgstr "" #: editor/plugins/skeleton_editor_plugin.cpp @@ -7773,6 +7832,60 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7884,42 +7997,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -8184,6 +8277,11 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "Skep Intekening" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "" @@ -8249,7 +8347,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -12344,6 +12442,14 @@ msgstr "" msgid "Set Portal Point Position" msgstr "" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Position" +msgstr "" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12633,6 +12739,11 @@ msgstr "" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "Alle Seleksie" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -13123,164 +13234,153 @@ msgstr "Deursoek Hulp" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Uninstalling..." msgstr "Installeer" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Installing to device, please wait..." msgstr "Laai" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not install to device: %s" msgstr "Kon nie vouer skep nie." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not execute on device." msgstr "Kon nie vouer skep nie." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Invalid package name:" msgstr "Ongeldige naam." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13288,58 +13388,58 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not find keystore, unable to export." msgstr "Kon nie vouer skep nie." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13347,57 +13447,57 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not write expansion package file!" msgstr "Kon nie vouer skep nie." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "Animasie lengte (in sekondes)." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" "Could not find template APK to export:\n" "%s" msgstr "Kon nie vouer skep nie." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13405,21 +13505,21 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Adding files..." msgstr "Vind" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files" msgstr "Kon nie vouer skep nie." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13883,6 +13983,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14176,6 +14284,14 @@ msgstr "Moet 'n geldige uitbreiding gebruik." msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14216,6 +14332,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/ar.po b/editor/translations/ar.po index eb11aa27b6..16cc1fd0a7 100644 --- a/editor/translations/ar.po +++ b/editor/translations/ar.po @@ -34,7 +34,7 @@ # Ahmed Shahwan <dev.ahmed.shahwan@gmail.com>, 2019. # hshw <shw@tutanota.com>, 2020. # Youssef Harmal <the.coder.crab@gmail.com>, 2020. -# Nabeel20 <nabeelandnizam@gmail.com>, 2020. +# Nabeel20 <nabeelandnizam@gmail.com>, 2020, 2021. # merouche djallal <kbordora@gmail.com>, 2020. # Airbus5717 <Abdussamadf350@gmail.com>, 2020. # tamsamani mohamed <tamsmoha@gmail.com>, 2020. @@ -54,12 +54,14 @@ # HASSAN GAMER - حسن جيمر <gamerhassan55@gmail.com>, 2021. # abubakrAlsaab <madeinsudan19@gmail.com>, 2021. # Hafid Talbi <atalbiie@gmail.com>, 2021. +# Hareth Mohammed <harethpy@gmail.com>, 2021. +# Mohammed Mubarak <modymu9@gmail.com>, 2021. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2021-07-29 02:33+0000\n" -"Last-Translator: Hafid Talbi <atalbiie@gmail.com>\n" +"PO-Revision-Date: 2021-09-19 11:14+0000\n" +"Last-Translator: Mohammed Mubarak <modymu9@gmail.com>\n" "Language-Team: Arabic <https://hosted.weblate.org/projects/godot-engine/" "godot/ar/>\n" "Language: ar\n" @@ -68,7 +70,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" -"X-Generator: Weblate 4.7.2-dev\n" +"X-Generator: Weblate 4.9-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -416,13 +418,11 @@ msgstr "إدخال حركة" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "node '%s'" -msgstr "لا يمكن فتح '%s'." +msgstr "العقدة (node) '%s'" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "animation" msgstr "رسوم متحركة" @@ -432,9 +432,8 @@ msgstr "اللأعب المتحرك لا يستطيع تحريك نفسه ,فق #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "property '%s'" -msgstr "لا خاصية '%s' موجودة." +msgstr "الخاصية '%s'" #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -662,9 +661,8 @@ msgid "Use Bezier Curves" msgstr "إستعمل منحنيات بيزر" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Create RESET Track(s)" -msgstr "لصق المقاطع" +msgstr "إنشاء مسار/ات إعادة التعيين (RESET)" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" @@ -1009,7 +1007,7 @@ msgstr "لا نتائج من أجل \"%s\"." #: editor/create_dialog.cpp editor/property_selector.cpp msgid "No description available for %s." -msgstr "" +msgstr "ليس هناك وصف مناسب لأجل s%." #: editor/create_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp @@ -1069,7 +1067,7 @@ msgstr "" msgid "Dependencies" msgstr "التبعيات" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "مورد" @@ -1304,36 +1302,32 @@ msgid "Error opening asset file for \"%s\" (not in ZIP format)." msgstr "حدث خطأ عندفتح ملف الحزمة بسبب أن الملف ليس في صيغة \"ZIP\"." #: editor/editor_asset_installer.cpp -#, fuzzy msgid "%s (already exists)" -msgstr "%s (موجود بالفعل!)" +msgstr "%s (موجود بالفعل)" #: editor/editor_asset_installer.cpp msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:" -msgstr "" +msgstr "تتعارض محتويات المصدر \"%s\" - من الملف(ات) %d مع مشروعك:" #: editor/editor_asset_installer.cpp msgid "Contents of asset \"%s\" - No files conflict with your project:" -msgstr "" +msgstr "محتويات المصدر \"%s\" - لا تتعارض مع مشروعك:" #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" msgstr "يفكك الضغط عن الأصول" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "The following files failed extraction from asset \"%s\":" -msgstr "فشل استخراج الملفات التالية من الحزمة:" +msgstr "فشل استخراج الملفات التالية من الحزمة \"٪ s\":" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "(and %s more files)" -msgstr "و %s أيضاً من الملفات." +msgstr "و %s ملف أكثر." #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Asset \"%s\" installed successfully!" -msgstr "تم تتبيث الحزمة بنجاح!" +msgstr "تم تثبيت الحزمة \"%s\" بنجاح!" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -1345,7 +1339,6 @@ msgid "Install" msgstr "تثبيت" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Asset Installer" msgstr "مثبت الحزم" @@ -1410,9 +1403,8 @@ msgid "Bypass" msgstr "تخطي" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Bus Options" -msgstr "إعدادات مسار الصوت" +msgstr "خيارات مسار الصوت (BUS)" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp #: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp @@ -1578,13 +1570,12 @@ msgid "Can't add autoload:" msgstr "لا يمكن إضافة التحميل التلقائي:" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "%s is an invalid path. File does not exist." -msgstr "الملف غير موجود." +msgstr "%s مسار غير صالح. الملف غير موجود." #: editor/editor_autoload_settings.cpp msgid "%s is an invalid path. Not in resource path (res://)." -msgstr "" +msgstr "المسار %s غير صالح. غير موجود في مسار الموارد (//:res)." #: editor/editor_autoload_settings.cpp msgid "Add AutoLoad" @@ -1608,9 +1599,8 @@ msgid "Name" msgstr "الأسم" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Global Variable" -msgstr "إعادة تسمية المُتغيّر" +msgstr "مُتغيّر عام (Global Variable)" #: editor/editor_data.cpp msgid "Paste Params" @@ -1734,13 +1724,13 @@ msgstr "" "مَكِّن 'استيراد Etc' في إعدادات المشروع، أو عطّل 'تمكين التوافق الرجعي للتعريفات " "Driver Fallback Enabled'." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "نمودج تصحيح الأخطاء غير موجود." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -1784,35 +1774,37 @@ msgstr "رصيف الاستيراد" #: editor/editor_feature_profile.cpp msgid "Allows to view and edit 3D scenes." -msgstr "" +msgstr "يسمح لعرض وتحرير المشاهد ثلاثية الأبعاد." #: editor/editor_feature_profile.cpp msgid "Allows to edit scripts using the integrated script editor." -msgstr "" +msgstr "يسمح بتحرير النصوص البرمجية عن طريق المحرر المدمج." #: editor/editor_feature_profile.cpp msgid "Provides built-in access to the Asset Library." -msgstr "" +msgstr "يؤمن وصول لمكتبة الملحقات من داخل المحرر." #: editor/editor_feature_profile.cpp msgid "Allows editing the node hierarchy in the Scene dock." -msgstr "" +msgstr "يسمح بتحرير تراتبية العقد عن طريق رصيف المشهد." #: editor/editor_feature_profile.cpp msgid "" "Allows to work with signals and groups of the node selected in the Scene " "dock." -msgstr "" +msgstr "يسمح بالعمل مع إشارات ومجموعات العقد المحددة في رصيف المشهد." #: editor/editor_feature_profile.cpp msgid "Allows to browse the local file system via a dedicated dock." -msgstr "" +msgstr "يسمح بتصفح ملفات النظام المحلية عن طريق رصيف خاص بذلك." #: editor/editor_feature_profile.cpp msgid "" "Allows to configure import settings for individual assets. Requires the " "FileSystem dock to function." msgstr "" +"يسمح بتحديد خصائص الاستيراد المتعلقة بالوسائط على حدى. يتطلب عمله رصيف " +"الملفات." #: editor/editor_feature_profile.cpp #, fuzzy @@ -1821,11 +1813,11 @@ msgstr "(الحالي)" #: editor/editor_feature_profile.cpp msgid "(none)" -msgstr "" +msgstr "(لاشيء)" #: editor/editor_feature_profile.cpp msgid "Remove currently selected profile, '%s'? Cannot be undone." -msgstr "" +msgstr "أترغب بإزالة الملف المحدد '%s'؟ لا يمكنك التراجع عن ذلك." #: editor/editor_feature_profile.cpp msgid "Profile must be a valid filename and must not contain '.'" @@ -1856,19 +1848,16 @@ msgid "Enable Contextual Editor" msgstr "مكّن المحرر السياقي Contextual" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Class Properties:" -msgstr "خصائص:" +msgstr "خصائص الفئة (Class):" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Main Features:" -msgstr "المزايا" +msgstr "المزايا الرئيسية:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Nodes and Classes:" -msgstr "الصفوف المُمكّنة:" +msgstr "العُقد (Nodes) والفئات (Classes):" #: editor/editor_feature_profile.cpp msgid "File '%s' format is invalid, import aborted." @@ -1885,9 +1874,8 @@ msgid "Error saving profile to path: '%s'." msgstr "خطأ في حفظ الملف إلى المسار: '%s'." #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Reset to Default" -msgstr "اعادة التعيين للإفتراضيات" +msgstr "إعادة التعيين إلى الافتراضي" #: editor/editor_feature_profile.cpp msgid "Current Profile:" @@ -1932,7 +1920,7 @@ msgstr "إعدادات الصف (Class):" #: editor/editor_feature_profile.cpp msgid "Create or import a profile to edit available classes and properties." -msgstr "" +msgstr "أنشئ أو استورد ملفاً لتحرير الصفوف والخصائص المتوفرة." #: editor/editor_feature_profile.cpp msgid "New profile name:" @@ -2120,7 +2108,7 @@ msgstr "هناك عدة مستوردات مخصوصة لعدة أنواع حدد msgid "(Re)Importing Assets" msgstr "إعادة إستيراد الأصول" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "فوق" @@ -2357,6 +2345,9 @@ msgid "" "Update Continuously is enabled, which can increase power usage. Click to " "disable it." msgstr "" +"يدور عندما يعاد رسم نافذة المحرر.\n" +"التحديث المستمر ممكن، الأمر الذي يعني استهلاك أكبر للطاقة. اضغط لإزالة " +"التمكين." #: editor/editor_node.cpp msgid "Spins when the editor window redraws." @@ -2590,6 +2581,8 @@ msgid "" "The current scene has no root node, but %d modified external resource(s) " "were saved anyway." msgstr "" +"المشهد الحالي لا يملك عقدة رئيسة، ولكن %d عدّل المصدر(مصادر) خارجياً وتم الحفظ " +"عموما." #: editor/editor_node.cpp #, fuzzy @@ -2627,6 +2620,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "لم يتم حفظ المشهد الحالي. إفتحه علي أية حال؟" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "تراجع" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "إعادة تراجع" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "لا يمكن إعادة تحميل مشهد لم يتم حفظه من قبل." @@ -3144,7 +3163,7 @@ msgstr "فتح الوثائق" #: editor/editor_node.cpp msgid "Questions & Answers" -msgstr "" +msgstr "أسئلة وإجابات" #: editor/editor_node.cpp msgid "Report a Bug" @@ -3152,7 +3171,7 @@ msgstr "إرسال تقرير عن خلل برمجي" #: editor/editor_node.cpp msgid "Suggest a Feature" -msgstr "" +msgstr "اقترح ميزة" #: editor/editor_node.cpp msgid "Send Docs Feedback" @@ -3257,14 +3276,12 @@ msgid "Manage Templates" msgstr "إدارة القوالب" #: editor/editor_node.cpp -#, fuzzy msgid "Install from file" msgstr "تثبيت من ملف" #: editor/editor_node.cpp -#, fuzzy msgid "Select android sources file" -msgstr "حدد مصدر ميش:" +msgstr "تحديد مصدر ملفات الاندرويد" #: editor/editor_node.cpp msgid "" @@ -3276,8 +3293,8 @@ msgid "" "the \"Use Custom Build\" option should be enabled in the Android export " "preset." msgstr "" -"بهذه الطريقة سيتم إعداد المشروع الخاص بك لأجل نسخ بناء أندريد مخصوصة عن طريق " -"تنزيل قوالب المصدر البرمجي في \"res://android/build\".\n" +"بهذه الطريقة سيتم إعداد المشروع الخاص بك لأجل نسخ بناء أندرويد مخصص عن طريق " +"تثبيت قوالب المصدر البرمجي في \"res://android/build\".\n" "يمكنك تطبيق تعديلات الخاصة على نسخة البناء للحصول على حزمة تطبيق أندرويد APK " "معدّلة عند التصدير (زيادة مُلحقات، تعديل ملف AndroidManifest.xml إلخ..).\n" "ضع في بالك أنه من أجل إنشاء نسخ بناء مخصوصة بدلاً من الحزم APKs المبنية سلفاً، " @@ -3291,7 +3308,7 @@ msgid "" "Remove the \"res://android/build\" directory manually before attempting this " "operation again." msgstr "" -"إن قالب البناء الخاص بالأندرويد تم تنزيله سلفاً لأجل هذا المشروع ولا يمكنه " +"قالب البناء الخاص بالأندرويد تم تنزيله سلفاً لأجل هذا المشروع ولا يمكنه " "الكتابة فوق البيانات السابقة.\n" "قم بإزالة \"res://android/build\" يدوياً قبل الشروع بهذه العملية مرة أخرى." @@ -3312,6 +3329,11 @@ msgid "Merge With Existing" msgstr "دمج مع الموجود" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "تحويل تغيير التحريك" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "فتح و تشغيل كود" @@ -3348,7 +3370,7 @@ msgstr "حدد" #: editor/editor_node.cpp #, fuzzy msgid "Select Current" -msgstr "تحديد المجلد الحالي" +msgstr "تحديد الحالي" #: editor/editor_node.cpp msgid "Open 2D Editor" @@ -3383,9 +3405,8 @@ msgid "No sub-resources found." msgstr "لا مصدر للسطح تم تحديده." #: editor/editor_path.cpp -#, fuzzy msgid "Open a list of sub-resources." -msgstr "لا مصدر للسطح تم تحديده." +msgstr "فتح قائمة الموارد الفرعية." #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" @@ -3412,14 +3433,13 @@ msgid "Update" msgstr "تحديث" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Version" -msgstr "النسخة:" +msgstr "الإصدار" #: editor/editor_plugin_settings.cpp #, fuzzy msgid "Author" -msgstr "المالكون" +msgstr "المالك" #: editor/editor_plugin_settings.cpp #: editor/plugins/version_control_editor_plugin.cpp @@ -3434,12 +3454,12 @@ msgstr "قياس:" #: editor/editor_profiler.cpp #, fuzzy msgid "Frame Time (ms)" -msgstr "وقت الاطار (ثانية)" +msgstr "وقت الاطار (ميلي ثانية)" #: editor/editor_profiler.cpp #, fuzzy msgid "Average Time (ms)" -msgstr "متوسط الوقت (ثانية)" +msgstr "متوسط الوقت (ميلي ثانية)" #: editor/editor_profiler.cpp msgid "Frame %" @@ -3567,6 +3587,10 @@ msgid "" msgstr "" "يلا يتطابق نوع المورد المختار (%s) مع أي نوع متوقع لأجل هذه الخاصية (%s)." +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "إجعلة مميزاً" @@ -3660,11 +3684,11 @@ msgstr "إستيراد من عقدة:" #: editor/export_template_manager.cpp msgid "Open the folder containing these templates." -msgstr "" +msgstr "افتح المجلد الحاوي هذه القوالب." #: editor/export_template_manager.cpp msgid "Uninstall these templates." -msgstr "" +msgstr "إزالة تثبيت هذه القوالب." #: editor/export_template_manager.cpp #, fuzzy @@ -3678,7 +3702,7 @@ msgstr "يستقبل المرايا، من فضلك إنتظر..." #: editor/export_template_manager.cpp msgid "Starting the download..." -msgstr "" +msgstr "الشروع بالتنزيل..." #: editor/export_template_manager.cpp msgid "Error requesting URL:" @@ -3721,7 +3745,7 @@ msgstr "فشل الطلب." #: editor/export_template_manager.cpp msgid "Download complete; extracting templates..." -msgstr "" +msgstr "اكتمل التحميل؛ استخراج القوالب..." #: editor/export_template_manager.cpp msgid "Cannot remove temporary file:" @@ -3748,7 +3772,7 @@ msgstr "" #: editor/export_template_manager.cpp msgid "Best available mirror" -msgstr "" +msgstr "أفضل بديل متوافر" #: editor/export_template_manager.cpp msgid "" @@ -3847,11 +3871,11 @@ msgstr "النسخة الحالية:" #: editor/export_template_manager.cpp msgid "Export templates are missing. Download them or install from a file." -msgstr "" +msgstr "قوالب التصدير مفقودة. حمّلها أو نصبّها من ملف." #: editor/export_template_manager.cpp msgid "Export templates are installed and ready to be used." -msgstr "" +msgstr "تم تنصيب قوالب التصدير وهي جاهزة للاستعمال." #: editor/export_template_manager.cpp #, fuzzy @@ -3860,7 +3884,7 @@ msgstr "افتح الملف" #: editor/export_template_manager.cpp msgid "Open the folder containing installed templates for the current version." -msgstr "" +msgstr "افتح المجلد الحاوي على القوالب المنصبة بالنسبة للإصدار الحالي." #: editor/export_template_manager.cpp msgid "Uninstall" @@ -3888,13 +3912,13 @@ msgstr "خطأ في نسخ" #: editor/export_template_manager.cpp msgid "Download and Install" -msgstr "" +msgstr "حمّل ونصّب" #: editor/export_template_manager.cpp msgid "" "Download and install templates for the current version from the best " "possible mirror." -msgstr "" +msgstr "حمّل ونصّب قوالب الإصدار الحالي من أفضل مصدر متوفر." #: editor/export_template_manager.cpp msgid "Official export templates aren't available for development builds." @@ -3943,6 +3967,8 @@ msgid "" "The templates will continue to download.\n" "You may experience a short editor freeze when they finish." msgstr "" +"ستستمر القوالب بالتحميل.\n" +"ربما تلاحظ تجمداً بسيطاً بالمحرر عندما ينتهي تحميلهم." #: editor/filesystem_dock.cpp msgid "Favorites" @@ -4088,19 +4114,19 @@ msgstr "بحث الملفات" #: editor/filesystem_dock.cpp msgid "Sort by Name (Ascending)" -msgstr "" +msgstr "صنف وفقا للاسم (تصاعدياً)" #: editor/filesystem_dock.cpp msgid "Sort by Name (Descending)" -msgstr "" +msgstr "صنف وفقاً للاسم (تنازلياً)" #: editor/filesystem_dock.cpp msgid "Sort by Type (Ascending)" -msgstr "" +msgstr "صنّف وفقاً للنوع (تصاعدياً)" #: editor/filesystem_dock.cpp msgid "Sort by Type (Descending)" -msgstr "" +msgstr "صنّف وفقاً للنوع (تنازلياً)" #: editor/filesystem_dock.cpp #, fuzzy @@ -4122,7 +4148,7 @@ msgstr "إعادة تسمية..." #: editor/filesystem_dock.cpp msgid "Focus the search box" -msgstr "" +msgstr "حدد صندوق البحث" #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -5484,11 +5510,11 @@ msgstr "الكل" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Search templates, projects, and demos" -msgstr "" +msgstr "ابحث في القوالب، والمشاريع والنماذج" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Search assets (excluding templates, projects, and demos)" -msgstr "" +msgstr "ابحث في الوسائط (عدا القوالب، والمشاريع، والنماذج)" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." @@ -5532,7 +5558,7 @@ msgstr "ملف أصول مضغوط" #: editor/plugins/audio_stream_editor_plugin.cpp msgid "Audio Preview Play/Pause" -msgstr "" +msgstr "معاينة الصوت شغّل/أوقف" #: editor/plugins/baked_lightmap_editor_plugin.cpp #, fuzzy @@ -5696,6 +5722,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "تحريك العنصر القماشي" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "حُدد القفل" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "المجموعات" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -5805,11 +5843,14 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy msgid "" "Project Camera Override\n" "No project instance running. Run the project from the editor to use this " "feature." msgstr "" +"تجاوز كاميرا المشروع.\n" +"ليس هناك مشروع يعمل حالياً. شغل المشروع من المحرر لاستعمال هذه الميزة." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5899,7 +5940,7 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "RMB: Add node at position clicked." -msgstr "" +msgstr "زر-الفأرة-الأيمن: ضف العقد عند موقع الضغط." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -6159,15 +6200,15 @@ msgstr "إظهار شامل" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 3.125%" -msgstr "" +msgstr "التكبير حتى 3.125%" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 6.25%" -msgstr "" +msgstr "التكبير حتى 6.25%" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 12.5%" -msgstr "" +msgstr "التكبير حتى 12.5%" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -6201,7 +6242,7 @@ msgstr "تصغير" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 1600%" -msgstr "" +msgstr "التكبير حتى 1600%" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" @@ -6331,7 +6372,7 @@ msgstr "السطح 0" #: editor/plugins/curve_editor_plugin.cpp msgid "Flat 1" -msgstr "السطح 1" +msgstr "المستوى 1" #: editor/plugins/curve_editor_plugin.cpp editor/property_editor.cpp msgid "Ease In" @@ -6639,7 +6680,13 @@ msgid "Remove Selected Item" msgstr "مسح العنصر المحدد" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +#, fuzzy +msgid "Import from Scene (Ignore Transforms)" +msgstr "إستيراد من المشهد" + +#: editor/plugins/mesh_library_editor_plugin.cpp +#, fuzzy +msgid "Import from Scene (Apply Transforms)" msgstr "إستيراد من المشهد" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7239,6 +7286,16 @@ msgstr "عدد النقاط المولدة:" msgid "Flip Portal" msgstr "القلب أفقياً" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "محو التَحَوّل" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "إنشاء عقدة" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "لا تملك شجرة الرسومات المتحركة مساراً لمشغل الرسومات المتحركة" @@ -7740,12 +7797,14 @@ msgid "Skeleton2D" msgstr "هيكل ثنائي البُعد" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "إنشاء وضعية الراحة (من العظام)" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "تحديد العظام لتكون في وضعية الراحة" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "تحديد العظام لتكون في وضعية الراحة" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "الكتابة المُتراكبة Overwrite" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7772,6 +7831,71 @@ msgid "Perspective" msgstr "منظوري" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Orthogonal" +msgstr "متعامد" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Perspective" +msgstr "منظوري" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Orthogonal" +msgstr "متعامد" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "منظوري" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Left Orthogonal" +msgstr "متعامد" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Perspective" +msgstr "منظوري" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Orthogonal" +msgstr "متعامد" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Orthogonal" +msgstr "متعامد" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Perspective" +msgstr "منظوري" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Orthogonal" +msgstr "متعامد" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Perspective" +msgstr "منظوري" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "أجهض التحول." @@ -7879,7 +8003,7 @@ msgstr "القمم" #: editor/plugins/spatial_editor_plugin.cpp msgid "FPS: %d (%s ms)" -msgstr "" +msgstr "FPS: %d (%s جزء من الثانية)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Top View." @@ -7890,42 +8014,22 @@ msgid "Bottom View." msgstr "الواجهة السفلية." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "الأسفل" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "الواجهة اليُسرى." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "اليسار" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "الواجهة اليُمنى." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "اليمين" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "الواجهة الأمامية." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "الأمام" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "الواجهة الخلفية." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "الخلف" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "محاذاة التحوّل مع الواجهة" @@ -8200,6 +8304,11 @@ msgid "View Portal Culling" msgstr "إعدادات إطار العرض" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "إعدادات إطار العرض" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "اعدادات..." @@ -8265,8 +8374,9 @@ msgid "Post" msgstr "لاحق" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" -msgstr "أداة (gizmo) غير مسماة" +#, fuzzy +msgid "Unnamed Gizmo" +msgstr "مشروع غير مسمى" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Mesh2D" @@ -8542,7 +8652,7 @@ msgstr "الأسلوب" #: editor/plugins/theme_editor_plugin.cpp msgid "{num} color(s)" -msgstr "" +msgstr "{num} لون (ألوان)" #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8561,7 +8671,7 @@ msgstr "ثابت اللون." #: editor/plugins/theme_editor_plugin.cpp msgid "{num} font(s)" -msgstr "" +msgstr "{num} خط (خطوط)" #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8570,7 +8680,7 @@ msgstr "لم يوجد!" #: editor/plugins/theme_editor_plugin.cpp msgid "{num} icon(s)" -msgstr "" +msgstr "{num} أيقونة (أيقونات)" #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8588,11 +8698,11 @@ msgstr "لا مصدر للسطح تم تحديده." #: editor/plugins/theme_editor_plugin.cpp msgid "{num} currently selected" -msgstr "" +msgstr "{num} المختارة حالياً" #: editor/plugins/theme_editor_plugin.cpp msgid "Nothing was selected for the import." -msgstr "" +msgstr "لم يتم اختيار شيء لأجل عملية الاستيراد." #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8601,7 +8711,7 @@ msgstr "استيراد الموضوع Theme" #: editor/plugins/theme_editor_plugin.cpp msgid "Importing items {n}/{n}" -msgstr "" +msgstr "استيراد العناصر {n}/{n}" #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8620,7 +8730,7 @@ msgstr "تنقيات:" #: editor/plugins/theme_editor_plugin.cpp msgid "With Data" -msgstr "" +msgstr "مع البيانات" #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8629,15 +8739,15 @@ msgstr "اختر عُقدة" #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible color items." -msgstr "" +msgstr "اختيار جميع العناصر اللونية المرئية." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible color items and their data." -msgstr "" +msgstr "اختر جميع العناصر المرئية الملونة والبيانات المتعلقة بها." #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all visible color items." -msgstr "" +msgstr "أزل اختيار العناصر الملونة المرئية." #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8646,11 +8756,11 @@ msgstr "اختر عنصر إعدادات بدايةً!" #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible constant items and their data." -msgstr "" +msgstr "اختر جميع العناصر الثابتة المرئية والبيانات المتعلقة بها." #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all visible constant items." -msgstr "" +msgstr "أزل اختيار العناصر الثابتة المرئية." #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8659,11 +8769,11 @@ msgstr "اختر عنصر إعدادات بدايةً!" #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible font items and their data." -msgstr "" +msgstr "اختر جميع عناصر الخط المرئية والبيانات المتعلقة بها." #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all visible font items." -msgstr "" +msgstr "أزل اختيار جميع عناصر الخط المرئية." #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8682,21 +8792,23 @@ msgstr "اختر عنصر إعدادات بدايةً!" #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible stylebox items." -msgstr "" +msgstr "اختر جميع عناصر صندوق المظهر المرئية." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible stylebox items and their data." -msgstr "" +msgstr "اختر جميع عناصر صندوق المصدر المرئية والبيانات المتعلقة بها." #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all visible stylebox items." -msgstr "" +msgstr "أزل اختيار جميع عناصر صندوق المظهر المرئية." #: editor/plugins/theme_editor_plugin.cpp msgid "" "Caution: Adding icon data may considerably increase the size of your Theme " "resource." msgstr "" +"تحذير: إن إضافة بيانات الأيقونة من الممكن أن تزيد حجم مورد الثيم الخاص بك " +"بصورة معتبرة." #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8720,7 +8832,7 @@ msgstr "إختر النقاط" #: editor/plugins/theme_editor_plugin.cpp msgid "Select all Theme items with item data." -msgstr "" +msgstr "اختر جميع عناصر الثيم والبيانات المتعلقة بهم." #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8729,7 +8841,7 @@ msgstr "تحديد الكل" #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all Theme items." -msgstr "" +msgstr "أزل اختيار جميع عناصر الثيم." #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8742,12 +8854,17 @@ msgid "" "closing this window.\n" "Close anyway?" msgstr "" +"تبويب استيراد العناصر يحوي عناصر مختارة. بإغلاقك النافذة ستخسر جميع العناصر " +"المختارة.\n" +"الإغلاق على أية حال؟" #: editor/plugins/theme_editor_plugin.cpp msgid "" "Select a theme type from the list to edit its items.\n" "You can add a custom type or import a type with its items from another theme." msgstr "" +"اختر نوعاً للثيم من القائمة جانباً لتحرير عناصره.\n" +"يمكنك إضافة نوع خاص أو استيراد نوع آخر مترافق من عناصره من ثيم آخر." #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8784,6 +8901,8 @@ msgid "" "This theme type is empty.\n" "Add more items to it manually or by importing from another theme." msgstr "" +"نوع الثيم هذا فارغ.\n" +"ضف المزيد من العناصر يدوياً أو عن طريق استيرادها من ثيم آخر." #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8842,7 +8961,7 @@ msgstr "ملف خطأ، ليس ملف نسق مسار الصوت." #: editor/plugins/theme_editor_plugin.cpp msgid "Invalid file, same as the edited Theme resource." -msgstr "" +msgstr "ملف غير صالح، مماثل لمصدر الثيم المحرر." #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8938,29 +9057,28 @@ msgid "Cancel Item Rename" msgstr "إعادة تسمية الدفعة" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Override Item" -msgstr "يتجاوز" +msgstr "تجاوز العنصر" #: editor/plugins/theme_editor_plugin.cpp msgid "Unpin this StyleBox as a main style." -msgstr "" +msgstr "أزل تثبيت صندوق المظهر هذا على أنه المظهر الرئيس." #: editor/plugins/theme_editor_plugin.cpp msgid "" "Pin this StyleBox as a main style. Editing its properties will update the " "same properties in all other StyleBoxes of this type." msgstr "" +"ثبّت صندوق المظهر هذا ليكون المظهر الرئيس. تحرير خاصياته سيحدث جميع الخاصيات " +"المشابهة في جميع صناديق المظهر من هذا النوع." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Type" -msgstr "النوع" +msgstr "إضافة نوع" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Item Type" -msgstr "إضافة عنصر" +msgstr "إضافة نوع للعنصر" #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8974,7 +9092,7 @@ msgstr "تحميل الإفتراضي" #: editor/plugins/theme_editor_plugin.cpp msgid "Show default type items alongside items that have been overridden." -msgstr "" +msgstr "أظهر عناصر النمط الافتراضي إلى جانب العناصر التي تم تجاوزها." #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8983,7 +9101,7 @@ msgstr "يتجاوز" #: editor/plugins/theme_editor_plugin.cpp msgid "Override all default type items." -msgstr "" +msgstr "تجاوز جميع أنواع العناصر الافتراضية." #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8997,7 +9115,7 @@ msgstr "إدارة قوالب التصدير..." #: editor/plugins/theme_editor_plugin.cpp msgid "Add, remove, organize and import Theme items." -msgstr "" +msgstr "أضف، أزل، رتّب واستورد عناصر القالب." #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -9018,7 +9136,7 @@ msgstr "حدد مصدر ميش:" msgid "" "Toggle the control picker, allowing to visually select control types for " "edit." -msgstr "" +msgstr "فعّل مُختار التحديد، مما يسمح لك باختيار أنواع التحديد بصرياً لتحريرها." #: editor/plugins/theme_editor_preview.cpp msgid "Toggle Button" @@ -9108,10 +9226,13 @@ msgstr "يمتلك، خيارات، عديدة" #: editor/plugins/theme_editor_preview.cpp msgid "Invalid path, the PackedScene resource was probably moved or removed." msgstr "" +"مسار غير صالح، غالباً مصدر المشهد الموضب PackedScene قد تمت إزالته أو نقله." #: editor/plugins/theme_editor_preview.cpp msgid "Invalid PackedScene resource, must have a Control node at its root." msgstr "" +"مصدر للمشهد الموضب PackedScene غير صالح، يجب أن يملك عقدة تحكم Control node " +"كعقدة رئيسة." #: editor/plugins/theme_editor_preview.cpp #, fuzzy @@ -9120,7 +9241,7 @@ msgstr "ملف خطأ، ليس ملف نسق مسار الصوت." #: editor/plugins/theme_editor_preview.cpp msgid "Reload the scene to reflect its most actual state." -msgstr "" +msgstr "أعد تحميل المشهد لإظهار الشكل الأقرب لحالته." #: editor/plugins/tile_map_editor_plugin.cpp msgid "Erase Selection" @@ -11086,7 +11207,7 @@ msgstr "مسح الكل" #: editor/project_manager.cpp msgid "Also delete project contents (no undo!)" -msgstr "" +msgstr "كذلك ستحذف محتويات المشروع (لا تراجع!)" #: editor/project_manager.cpp msgid "Can't run project" @@ -11122,7 +11243,7 @@ msgstr "زر " #: editor/project_settings_editor.cpp msgid "Physical Key" -msgstr "" +msgstr "الزر الفيزيائي" #: editor/project_settings_editor.cpp msgid "Joy Button" @@ -11170,7 +11291,7 @@ msgstr "الجهاز" #: editor/project_settings_editor.cpp msgid " (Physical)" -msgstr "" +msgstr " (فيزيائي)" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "Press a Key..." @@ -11772,13 +11893,13 @@ msgstr "حذف العقدة \"%s\"؟" #: editor/scene_tree_dock.cpp msgid "" "Saving the branch as a scene requires having a scene open in the editor." -msgstr "" +msgstr "يتطلب حفظ المشهد كفرع وجود مشهد مفتوح في المحرر." #: editor/scene_tree_dock.cpp msgid "" "Saving the branch as a scene requires selecting only one node, but you have " "selected %d nodes." -msgstr "" +msgstr "يتطلب حفظ المشهد كفرع اختيارك عقدة واحدة فقط، ولكنك اخترت %d من العقد." #: editor/scene_tree_dock.cpp msgid "" @@ -11787,6 +11908,10 @@ msgid "" "FileSystem dock context menu\n" "or create an inherited scene using Scene > New Inherited Scene... instead." msgstr "" +"فشلت عملية حفظ العقدة الرئيسة كفرع في المشهد الموروث instanced scene.\n" +"لإنشاء نسخة قابلة للتحرير من المشهد الحالي، ضاعف المشهد مستخدماً قائمة رصيف " +"الملفات FileSystem\n" +"أو أنشئ مشهداً موروثاً مستعملاً مشهد > مشهد موروث جديد... بدلاً عما قمت بفعله." #: editor/scene_tree_dock.cpp msgid "" @@ -11794,6 +11919,9 @@ msgid "" "To create a variation of a scene, you can make an inherited scene based on " "the instanced scene using Scene > New Inherited Scene... instead." msgstr "" +"لا يمكن حفظ الفرع باستخدام مشهد منسوخ أساساً.\n" +"لإنشاء تعديلة عن المشهد، يمكنك إنشاء مشهد موروث عن مشهد منسوخ مستخدماً مشهد > " +"مشهد جديد موروث… بدلاً عن ذلك." #: editor/scene_tree_dock.cpp msgid "Save New Scene As..." @@ -12199,6 +12327,8 @@ msgid "" "Warning: Having the script name be the same as a built-in type is usually " "not desired." msgstr "" +"تحذير: من غير المستحسن امتلاك النص البرمجي اسماً مماثلاً للأنواع المشابهة " +"المدمجة بالمحرر." #: editor/script_create_dialog.cpp msgid "Class Name:" @@ -12270,7 +12400,7 @@ msgstr "خطأ في نسخ" #: editor/script_editor_debugger.cpp msgid "Open C++ Source on GitHub" -msgstr "" +msgstr "افتح مصدر ++C على GitHub" #: editor/script_editor_debugger.cpp msgid "Video RAM" @@ -12459,6 +12589,16 @@ msgstr "حدد موقع نقطة الإنحناء" msgid "Set Portal Point Position" msgstr "حدد موقع نقطة الإنحناء" +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Radius" +msgstr "تعديل نصف قطر الشكل الأسطواني" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr "ضع الإنحناء في الموقع" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "تغيير نصف قطر الاسطوانة" @@ -12748,6 +12888,11 @@ msgstr "تخطيط الإضاءات" msgid "Class name can't be a reserved keyword" msgstr "لا يمكن أن يكون اسم الصف كلمة محجوزة" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "تعبئة المُحدد" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "نهاية تتبع مكدس الاستثناء الداخلي" @@ -13230,144 +13375,151 @@ msgstr "بحث VisualScript" msgid "Get %s" msgstr "جلب %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "اسم الرُزمة مفقود." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "أقسام الرُزمة ينبغي أن تكون ذات مسافات غير-صفرية non-zero length." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "إن الحرف '%s' غير مسموح في أسماء حِزم تطبيقات الأندرويد." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "لا يمكن أن يكون الرقم هو أول حرف في مقطع الرُزمة." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "الحرف '%s' لا يمكن أن يكون الحرف الأول من مقطع الرُزمة." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "يجب أن تتضمن الرزمة على الأقل واحد من الفواصل '.' ." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "اختر جهازاً من القائمة" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" -msgstr "" +msgstr "يعمل على %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting APK..." msgstr "تصدير الكُل" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Uninstalling..." msgstr "إلغاء التثبيت" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Installing to device, please wait..." msgstr "يستقبل المرايا، من فضلك إنتظر..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not install to device: %s" msgstr "لا يمكن بدء عملية جانبية!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Running on device..." msgstr "تشغيل النص البرمجي المُخصص..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not execute on device." msgstr "لا يمكن إنشاء المجلد." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "تعذر العثور على أداة توقيع تطبيق اندرويد\"apksigner\"." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" "لم يتم تنزيل قالب بناء Android لهذا المشروع. نزّل واحداً من قائمة المشروع." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" +"إما أن يتم يتكوين مفتاح-المتجر للتنقيح البرمجي debug keystore، أو إعدادات " +"ملف وكلمة مرور التنقيح البرمجي سويةً debug user AND debug password، أو لاشيء " +"مما سبق." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" "مُنقح أخطاء مفتاح المتجر keystore غير مُهيئ في إعدادت المُحرر أو في الإعدادات " "الموضوعة سلفاً." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" +"إم أن يتم تكوين إعدادات مفتاح التصدير release keystore، أو ملف وكلمة مرور " +"التصدير سوية Release User AND Release Password، أو من دونهم جميعاً." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "تحرر مخزن المفاتيح غير مُهيئ بشكل صحيح في إعدادت المسبقة للتصدير." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "A valid Android SDK path is required in Editor Settings." msgstr "" "مسار حزمة تطوير Android SDK للبُنى المخصوصة، غير صالح في إعدادات المُحرر." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Invalid Android SDK path in Editor Settings." msgstr "" "مسار حزمة تطوير Android SDK للبُنى المخصوصة، غير صالح في إعدادات المُحرر." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" -msgstr "" +msgstr "دليل ملفات \"أدوات-المنصة platform-tools\" مفقود!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." -msgstr "" +msgstr "تعذر العثور على أمر adb الخاص بأدوات النظام الأساسي لـ Android SDK." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" "مسار حزمة تطوير Android SDK للبُنى المخصوصة، غير صالح في إعدادات المُحرر." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" -msgstr "" +msgstr "ملف \"أدوات البناء\"build-tools مفقود!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" +"تعذر العثور على أمر أدوات البناء الخاص بالأندرويد Android SDK build-tools " +"الخاص بتوقيع ملف apk (apksigner)." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "مفتاح عام غير صالح لأجل تصدير حزمة تطبيق أندرويد APK." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "اسم رُزمة غير صالح:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" @@ -13375,95 +13527,87 @@ msgstr "" "وحدة \"GodotPaymentV3\" المضمنة في إعدادات المشروع \"android / modules\" غير " "صالحة (تم تغييره في Godot 3.2.2).\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "يجب تفعيل \"Use Custom Build\" لإستخدام الإضافات." -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" -"\"Degrees Of Freedom\" تكون صالحة فقط عندما يكون وضع ال \"Xr Mode\"هو " -"\"Oculus Mobile VR\"." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" "\"Hand Tracking\" تكون صالحة فقط عندما يكون وضع ال \"Xr Mode\"هو \"Oculus " "Mobile VR\"." -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" -"\"Focus Awareness\" تكون صالحة فقط عندما يكون وضع ال \"Xr Mode\"هو \"Oculus " -"Mobile VR\"." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" +"يصبح خيار \"تصدير ABB\" صالحاً فقط عندما يتم اختيار \"استعمال تصدير مخصص " +"Custom Build\"." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " "directory.\n" "The resulting %s is unsigned." msgstr "" +"تعذر العثور على 'apksigner'.\n" +"تأكد من فضلك إن كان الأمر موجوداً في دليل ملفات أدوات-بناء الأندرويد Android " +"SDK build-tools.\n" +"لم يتم توقيع الناتج %s." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." -msgstr "" +msgstr "يتم توقيع نسخة التنقيح البرمجي %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Signing release %s..." msgstr "" "يفحص الملفات،\n" "من فضلك إنتظر..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not find keystore, unable to export." msgstr "لا يمكن فتح القالب من أجل التصدير:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" -msgstr "" +msgstr "أعاد 'apksigner' الخطأ التالي #%d" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Verifying %s..." msgstr "إضافة %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." -msgstr "" +msgstr "فشلت عملية توثيق 'apksigner' ل %s." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting for Android" msgstr "تصدير الكُل" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" +"اسم ملف غير صالح! تتطلب حزمة تطبيق الأندرويد Android App Bundle لاحقة *.aab." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." -msgstr "" +msgstr "توسيع APK غير متوافق مع حزمة تطبيق الأندرويد Android App Bundle." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." -msgstr "" +msgstr "إسم ملف غير صالح! يتطلب ملف APK اللاحقة *.apk" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" -msgstr "" +msgstr "صيغة تصدير غير مدعومة!\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." @@ -13471,7 +13615,7 @@ msgstr "" "تتم محاولة البناء من قالب بناء مُخصص، ولكن لا تتواجد معلومات النسخة. من فضلك " "أعد التحميل من قائمة \"المشروع\"." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13483,26 +13627,27 @@ msgstr "" "\tإصدار غودوت: %s\n" "من فضلك أعد تنصيب قالب بناء الأندرويد Android من قائمة \"المشروع\"." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" +"تعذرت كتابة overwrite ملفات res://android/build/res/*.xml مع اسم المشروع" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files to gradle project\n" msgstr "لا قدرة على تحرير project.godot في مسار المشروع." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not write expansion package file!" msgstr "لا يمكن كتابة الملف:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "بناء مشروع الأندرويد (gradle)" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." @@ -13510,58 +13655,61 @@ msgstr "" "أخفق بناء مشروع الأندرويد، تفقد المُخرجات للإطلاع على الخطأ.\n" "بصورة بديلة يمكنك زيارة docs.godotengine.org لأجل مستندات البناء للأندرويد." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" -msgstr "" +msgstr "نقل المخرجات" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." -msgstr "" +msgstr "تعذر نسخ وإعادة تسمية الملف المصدر، تفقد ملف مشروع gradle للمخرجات." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "لم يتم إيجاد الرسم المتحرك: '%s'" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Creating APK..." msgstr "إنشاء المحيط..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" "Could not find template APK to export:\n" "%s" msgstr "لا يمكن فتح القالب من أجل التصدير:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" +"هنالك مكاتب قوالب تصدير ناقصة بالنسبة للمعمارية المختارة: %s.\n" +"ابن قالب التصدير متضمناً جميع المكتبات الضرورية، أو أزال اختيار المعماريات " +"الناقصة من خيارات التصدير المعدّة مسبقاً." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Adding files..." msgstr "إضافة %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files" msgstr "لا يمكن كتابة الملف:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." -msgstr "" +msgstr "محاذاة ملف APK..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." -msgstr "" +msgstr "تعذر إزالة ضغط ملف APK المؤقت غير المصفوف unaligned." #: platform/iphone/export/export.cpp platform/osx/export/export.cpp msgid "Identifier is missing." @@ -13636,19 +13784,19 @@ msgstr "مُحدد غير صالح:" #: platform/osx/export/export.cpp msgid "Notarization: code signing required." -msgstr "" +msgstr "التوثيق: إن توقيع الشفرة البرمجية مطلوب." #: platform/osx/export/export.cpp msgid "Notarization: hardened runtime required." -msgstr "" +msgstr "التوثيق: إن تمكين وقت التشغيل hardened runtime مطلوب." #: platform/osx/export/export.cpp msgid "Notarization: Apple ID name not specified." -msgstr "" +msgstr "التوثيق: لم يتم تحديد اسم معرف Apple ID." #: platform/osx/export/export.cpp msgid "Notarization: Apple ID password not specified." -msgstr "" +msgstr "التوثيق: لم يتم تحديد كلمة مرور Apple ID." #: platform/uwp/export/export.cpp msgid "Invalid package short name." @@ -13751,10 +13899,14 @@ msgstr "" #: scene/2d/collision_polygon_2d.cpp msgid "Invalid polygon. At least 3 points are needed in 'Solids' build mode." msgstr "" +"مضلع غير صالح. يتطلب الأمر 3 نقاط على الأقل في نمط بناء \"المواد الصلبة " +"Solids\"." #: scene/2d/collision_polygon_2d.cpp msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode." msgstr "" +"مضلع غير صالح. يتطلب الأمر على الأقل نقطتين في نمط البناء \"المتجزئ Segments" +"\"." #: scene/2d/collision_shape_2d.cpp msgid "" @@ -13798,22 +13950,25 @@ msgstr "" #: scene/2d/joints_2d.cpp msgid "Node A and Node B must be PhysicsBody2Ds" msgstr "" +"يجب على العقدة A والعقدة B أن يكونا PhysicsBody2Ds (جسم فيزيائي ثنائي البُعد)" #: scene/2d/joints_2d.cpp msgid "Node A must be a PhysicsBody2D" -msgstr "" +msgstr "يجب أن تكون العقدة A من النوع PhysicsBody2D (جسم فيزيائي ثنائي البُعد)" #: scene/2d/joints_2d.cpp msgid "Node B must be a PhysicsBody2D" -msgstr "" +msgstr "يجب أن تكون العقدة B من النوع PhysicsBody2D (جسم فيزيائي ثنائي البُعد)" #: scene/2d/joints_2d.cpp msgid "Joint is not connected to two PhysicsBody2Ds" msgstr "" +"إن المفصل غير متصل مع اثنين من PhysicsBody2Ds (الأجسام الفيزيائية ثنائية " +"البعد)" #: scene/2d/joints_2d.cpp msgid "Node A and Node B must be different PhysicsBody2Ds" -msgstr "" +msgstr "على العقدة A وكذلك العقدة B أن يكونا PhysicsBody2Ds مختلفين" #: scene/2d/light_2d.cpp msgid "" @@ -13979,7 +14134,7 @@ msgstr "" #: scene/3d/baked_lightmap.cpp msgid "Finding meshes and lights" -msgstr "" +msgstr "إيجاد السطوح meshes والأضواء" #: scene/3d/baked_lightmap.cpp msgid "Preparing geometry (%d/%d)" @@ -14115,6 +14270,14 @@ msgstr "" "يجب أن يكون نموذج-مجسم-التنقل (NavigationMeshInstance) تابعًا أو حفيدًا لعقدة " "التنقل (Navigation node). انه يوفر فقط بيانات التنقل." +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14442,6 +14605,14 @@ msgstr "يجب أن يستخدم صيغة صحيحة." msgid "Enable grid minimap." msgstr "تفعيل الخريطة المصغرة للشبكة." +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14492,6 +14663,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "ينبغي أن يكون حجم إطار العرض أكبر من 0 ليتم الإخراج البصري لأي شيء." +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " @@ -14543,6 +14718,41 @@ msgstr "التعين للإنتظام." msgid "Constants cannot be modified." msgstr "لا يمكن تعديل الثوابت." +#~ msgid "Make Rest Pose (From Bones)" +#~ msgstr "إنشاء وضعية الراحة (من العظام)" + +#~ msgid "Bottom" +#~ msgstr "الأسفل" + +#~ msgid "Left" +#~ msgstr "اليسار" + +#~ msgid "Right" +#~ msgstr "اليمين" + +#~ msgid "Front" +#~ msgstr "الأمام" + +#~ msgid "Rear" +#~ msgstr "الخلف" + +#~ msgid "Nameless gizmo" +#~ msgstr "أداة (gizmo) غير مسماة" + +#~ msgid "" +#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile " +#~ "VR\"." +#~ msgstr "" +#~ "\"Degrees Of Freedom\" تكون صالحة فقط عندما يكون وضع ال \"Xr Mode\"هو " +#~ "\"Oculus Mobile VR\"." + +#~ msgid "" +#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" +#~ "\"." +#~ msgstr "" +#~ "\"Focus Awareness\" تكون صالحة فقط عندما يكون وضع ال \"Xr Mode\"هو " +#~ "\"Oculus Mobile VR\"." + #~ msgid "Package Contents:" #~ msgstr "محتويات الرزمة:" diff --git a/editor/translations/az.po b/editor/translations/az.po index 6c07f98d38..1965e41921 100644 --- a/editor/translations/az.po +++ b/editor/translations/az.po @@ -4,18 +4,19 @@ # This file is distributed under the same license as the Godot source code. # # Jafar Tarverdiyev <cefertarverdiyevv@gmail.com>, 2021. +# Lucifer25x <umudyt2006@gmail.com>, 2021. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2021-05-14 11:20+0000\n" -"Last-Translator: Jafar Tarverdiyev <cefertarverdiyevv@gmail.com>\n" +"PO-Revision-Date: 2021-09-16 14:36+0000\n" +"Last-Translator: Lucifer25x <umudyt2006@gmail.com>\n" "Language-Team: Azerbaijani <https://hosted.weblate.org/projects/godot-engine/" "godot/az/>\n" "Language: az\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.7-dev\n" +"X-Generator: Weblate 4.9-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -402,8 +403,9 @@ msgstr "AnimationPlayer özünü canlandıra bilməz, yalnız digər playerlər. #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp +#, fuzzy msgid "property '%s'" -msgstr "" +msgstr "özəllik '%s'" #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -497,7 +499,7 @@ msgstr "Animasya Köçürmə Açarları" #: editor/animation_track_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Clipboard is empty!" -msgstr "" +msgstr "Pano boşdur!" #: editor/animation_track_editor.cpp #, fuzzy @@ -621,7 +623,7 @@ msgstr "Əvvəlki addıma keç" #: editor/animation_track_editor.cpp msgid "Apply Reset" -msgstr "" +msgstr "Sıfırla" #: editor/animation_track_editor.cpp msgid "Optimize Animation" @@ -990,11 +992,11 @@ msgstr "Yeni %s yarat" #: editor/create_dialog.cpp editor/plugins/asset_library_editor_plugin.cpp msgid "No results for \"%s\"." -msgstr "" +msgstr "\"%s\" üçün nəticə yoxdur." #: editor/create_dialog.cpp editor/property_selector.cpp msgid "No description available for %s." -msgstr "" +msgstr "%s üçün heç bir təsvir yoxdur." #: editor/create_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp @@ -1054,7 +1056,7 @@ msgstr "" msgid "Dependencies" msgstr "Asılılıqlar" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Mənbə" @@ -1189,7 +1191,7 @@ msgstr "Godot topluluğundan təşəkkürlər!" #: editor/editor_about.cpp editor/editor_node.cpp editor/project_manager.cpp msgid "Click to copy." -msgstr "" +msgstr "Kopyalamaq üçün vurun." #: editor/editor_about.cpp msgid "Godot Engine contributors" @@ -1287,20 +1289,24 @@ msgid "Licenses" msgstr "Lisenziyalar" #: editor/editor_asset_installer.cpp +#, fuzzy msgid "Error opening asset file for \"%s\" (not in ZIP format)." -msgstr "" +msgstr "\"%S\" üçün aktiv faylını açarkən xəta oldu (ZIP formatında deyil)." #: editor/editor_asset_installer.cpp msgid "%s (already exists)" -msgstr "" +msgstr "%s (artıq mövcuddur)" #: editor/editor_asset_installer.cpp msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:" msgstr "" +"\" %S\" aktivinin məzmunu - %d fayl(lar) layihənizlə ziddiyyət təşkil edir:" #: editor/editor_asset_installer.cpp +#, fuzzy msgid "Contents of asset \"%s\" - No files conflict with your project:" msgstr "" +"\"%s\" aktivinin məzmunu - Layihənizlə heç bir fayl ziddiyyət təşkil etmir:" #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" @@ -1321,11 +1327,11 @@ msgstr "" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Success!" -msgstr "" +msgstr "Uğur!" #: editor/editor_asset_installer.cpp editor/editor_node.cpp msgid "Install" -msgstr "" +msgstr "Quraşdır" #: editor/editor_asset_installer.cpp msgid "Asset Installer" @@ -1385,7 +1391,7 @@ msgstr "" #: editor/editor_audio_buses.cpp msgid "Mute" -msgstr "" +msgstr "Səssiz" #: editor/editor_audio_buses.cpp msgid "Bypass" @@ -1697,13 +1703,13 @@ msgid "" "Enabled'." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2075,7 +2081,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "" @@ -2553,6 +2559,30 @@ msgid "Current scene not saved. Open anyway?" msgstr "" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Undo: %s" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Redo: %s" +msgstr "" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "" @@ -3176,6 +3206,11 @@ msgid "Merge With Existing" msgstr "" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Animasya transformasiyasını dəyiş" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "" @@ -3418,6 +3453,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "" @@ -5462,6 +5501,16 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Locked" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Grouped" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6367,7 +6416,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -6953,6 +7006,14 @@ msgstr "Bezier Nöqtələrini Köçür" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Occluder Set Transform" +msgstr "" + +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Center Node" +msgstr "" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7447,11 +7508,11 @@ msgid "Skeleton2D" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" +msgid "Reset to Rest Pose" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" +msgid "Overwrite Rest Pose" msgstr "" #: editor/plugins/skeleton_editor_plugin.cpp @@ -7479,6 +7540,60 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7586,42 +7701,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -7883,6 +7978,10 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Occlusion Culling" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "" @@ -7948,7 +8047,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -11854,6 +11953,14 @@ msgstr "" msgid "Set Portal Point Position" msgstr "" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Position" +msgstr "" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12135,6 +12242,10 @@ msgstr "" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Build Solution" +msgstr "" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -12603,159 +12714,148 @@ msgstr "" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Uninstalling..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Installing to device, please wait..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not execute on device." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -12763,57 +12863,57 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -12821,54 +12921,54 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package not found: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -12876,19 +12976,19 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Adding files..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13338,6 +13438,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -13627,6 +13735,14 @@ msgstr "" msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13667,6 +13783,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/bg.po b/editor/translations/bg.po index 3045c7b781..7aab99c847 100644 --- a/editor/translations/bg.po +++ b/editor/translations/bg.po @@ -17,7 +17,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2021-03-10 22:14+0000\n" +"PO-Revision-Date: 2021-09-20 14:46+0000\n" "Last-Translator: Любомир Василев <lyubomirv@gmx.com>\n" "Language-Team: Bulgarian <https://hosted.weblate.org/projects/godot-engine/" "godot/bg/>\n" @@ -26,7 +26,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.5.2-dev\n" +"X-Generator: Weblate 4.9-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -377,15 +377,13 @@ msgstr "" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "node '%s'" -msgstr "Избиране на всичко" +msgstr "възел „%s“" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "animation" -msgstr "Анимация" +msgstr "анимация" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." @@ -393,9 +391,8 @@ msgstr "" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "property '%s'" -msgstr "Свойство" +msgstr "свойство „%s“" #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -610,9 +607,8 @@ msgid "Use Bezier Curves" msgstr "" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Create RESET Track(s)" -msgstr "Поставяне на пътечки" +msgstr "Създаване на пътечка/и за НУЛИРАНЕ" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" @@ -933,9 +929,8 @@ msgid "Edit..." msgstr "Редактиране..." #: editor/connections_dialog.cpp -#, fuzzy msgid "Go to Method" -msgstr "Преминаване към метода" +msgstr "Към метода" #: editor/create_dialog.cpp msgid "Change %s Type" @@ -1011,7 +1006,7 @@ msgstr "" msgid "Dependencies" msgstr "Зависимости" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "" @@ -1051,14 +1046,14 @@ msgid "Owners Of:" msgstr "" #: editor/dependency_editor.cpp -#, fuzzy msgid "" "Remove the selected files from the project? (Cannot be undone.)\n" "Depending on your filesystem configuration, the files will either be moved " "to the system trash or deleted permanently." msgstr "" -"Да се премахнат ли избраните файлове от проекта? (Действието е необратимо)\n" -"Ще можете да ги откриете в кошчето, ако искате да ги възстановите." +"Да се премахнат ли избраните файлове от проекта? (Действието е необратимо.)\n" +"Според настройката на файловата Ви система, файловете ще бъдат или " +"преместени в кошчето, или окончателно изтрити." #: editor/dependency_editor.cpp msgid "" @@ -1237,9 +1232,8 @@ msgid "Error opening asset file for \"%s\" (not in ZIP format)." msgstr "" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "%s (already exists)" -msgstr "%s (Вече съществува)" +msgstr "%s (вече съществува)" #: editor/editor_asset_installer.cpp msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:" @@ -1254,16 +1248,12 @@ msgid "Uncompressing Assets" msgstr "Разархивиране на ресурсите" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "The following files failed extraction from asset \"%s\":" -msgstr "" -"Следните файлове са по-нови на диска.\n" -"Кое действие трябва да се предприеме?:" +msgstr "Следните файлове не успяха да бъдат изнесени от материала „%s“:" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "(and %s more files)" -msgstr "И още %s файл(а)." +msgstr "(и още %s файла)" #: editor/editor_asset_installer.cpp msgid "Asset \"%s\" installed successfully!" @@ -1279,9 +1269,8 @@ msgid "Install" msgstr "Инсталиране" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Asset Installer" -msgstr "Инсталиране" +msgstr "Инсталатор на ресурси" #: editor/editor_audio_buses.cpp msgid "Speakers" @@ -1344,7 +1333,6 @@ msgid "Bypass" msgstr "" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Bus Options" msgstr "Настройки на шината" @@ -1541,9 +1529,8 @@ msgid "Name" msgstr "" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Global Variable" -msgstr "Преименуване на променливата" +msgstr "Глобална променлива" #: editor/editor_data.cpp msgid "Paste Params" @@ -1651,13 +1638,13 @@ msgid "" "Enabled'." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -1772,18 +1759,16 @@ msgid "Enable Contextual Editor" msgstr "" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Class Properties:" -msgstr "Свиване на всички свойства" +msgstr "Свойства на класа:" #: editor/editor_feature_profile.cpp msgid "Main Features:" msgstr "" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Nodes and Classes:" -msgstr "Включени класове:" +msgstr "Възли и класове:" #: editor/editor_feature_profile.cpp msgid "File '%s' format is invalid, import aborted." @@ -1800,7 +1785,6 @@ msgid "Error saving profile to path: '%s'." msgstr "Грешка при запазването на профила в: „%s“." #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Reset to Default" msgstr "Връщане на стандартните настройки" @@ -1809,14 +1793,12 @@ msgid "Current Profile:" msgstr "Текущ профил:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Create Profile" -msgstr "Изтриване на профила" +msgstr "Създаване на профил" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Remove Profile" -msgstr "Премахване на плочката" +msgstr "Изтриване на профила" #: editor/editor_feature_profile.cpp msgid "Available Profiles:" @@ -1836,14 +1818,12 @@ msgid "Export" msgstr "Изнасяне" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Configure Selected Profile:" -msgstr "Текущ профил:" +msgstr "Настройка на избрания профил:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Extra Options:" -msgstr "Настройки на класа:" +msgstr "Допълнителни настройки:" #: editor/editor_feature_profile.cpp msgid "Create or import a profile to edit available classes and properties." @@ -1874,7 +1854,6 @@ msgid "Select Current Folder" msgstr "Избиране на текущата папка" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "File exists, overwrite?" msgstr "Файлът съществува. Искате ли да го презапишете?" @@ -2035,7 +2014,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "(Повторно) внасяне на ресурсите" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "" @@ -2513,6 +2492,30 @@ msgid "Current scene not saved. Open anyway?" msgstr "Текущата сцена не е запазена. Отваряне въпреки това?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Undo: %s" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Redo: %s" +msgstr "" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "Сцена, която никога не е била запазвана, не може да бъде презаредена." @@ -2589,14 +2592,14 @@ msgid "Unable to load addon script from path: '%s'." msgstr "Не може да се зареди добавката-скрипт от: „%s“." #: editor/editor_node.cpp -#, fuzzy msgid "" "Unable to load addon script from path: '%s'. This might be due to a code " "error in that script.\n" "Disabling the addon at '%s' to prevent further errors." msgstr "" -"Не може да се зареди добавката-скрипт от: „%s“. Изглежда има грешка в кода. " -"Моля, проверете синтаксиса." +"Не може да се зареди добавката-скрипт от: „%s“. Възможно е да има грешка в " +"кода.\n" +"Добавката „%s“ ще бъде изключена, за да се предотвратят последващи проблеми." #: editor/editor_node.cpp msgid "" @@ -2861,9 +2864,8 @@ msgid "Orphan Resource Explorer..." msgstr "" #: editor/editor_node.cpp -#, fuzzy msgid "Reload Current Project" -msgstr "Преименуване на проекта" +msgstr "Презареждане на текущия проект" #: editor/editor_node.cpp msgid "Quit to Project List" @@ -3001,9 +3003,8 @@ msgid "Help" msgstr "" #: editor/editor_node.cpp -#, fuzzy msgid "Online Documentation" -msgstr "Отваряне на документацията" +msgstr "Документация в Интернет" #: editor/editor_node.cpp msgid "Questions & Answers" @@ -3026,9 +3027,8 @@ msgid "Community" msgstr "" #: editor/editor_node.cpp -#, fuzzy msgid "About Godot" -msgstr "Относно" +msgstr "Относно Godot" #: editor/editor_node.cpp msgid "Support Godot Development" @@ -3120,9 +3120,8 @@ msgid "Manage Templates" msgstr "Управление на шаблоните" #: editor/editor_node.cpp -#, fuzzy msgid "Install from file" -msgstr "Инсталиране и редактиране" +msgstr "Инсталиране от файл" #: editor/editor_node.cpp #, fuzzy @@ -3165,6 +3164,11 @@ msgid "Merge With Existing" msgstr "" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Промяна на трансформация (Анимация)" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "" @@ -3187,9 +3191,8 @@ msgid "Resave" msgstr "Презаписване" #: editor/editor_node.cpp -#, fuzzy msgid "New Inherited" -msgstr "Нов скрипт" +msgstr "Нова наследена сцена" #: editor/editor_node.cpp msgid "Load Errors" @@ -3200,9 +3203,8 @@ msgid "Select" msgstr "" #: editor/editor_node.cpp -#, fuzzy msgid "Select Current" -msgstr "Избиране на текущата папка" +msgstr "Избиране на текущото" #: editor/editor_node.cpp msgid "Open 2D Editor" @@ -3265,14 +3267,12 @@ msgid "Update" msgstr "" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Version" -msgstr "Версия:" +msgstr "Версия" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Author" -msgstr "Автори" +msgstr "Автор" #: editor/editor_plugin_settings.cpp #: editor/plugins/version_control_editor_plugin.cpp @@ -3285,9 +3285,8 @@ msgid "Measure:" msgstr "" #: editor/editor_profiler.cpp -#, fuzzy msgid "Frame Time (ms)" -msgstr "Време (сек): " +msgstr "Продължителност на кадъра (мсек)" #: editor/editor_profiler.cpp msgid "Average Time (ms)" @@ -3412,6 +3411,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "" @@ -3431,9 +3434,8 @@ msgid "Paste" msgstr "Поставяне" #: editor/editor_resource_picker.cpp editor/property_editor.cpp -#, fuzzy msgid "Convert to %s" -msgstr "Преобразуване в Mesh2D" +msgstr "Преобразуване в %s" #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "New %s" @@ -3511,9 +3513,8 @@ msgid "There are no mirrors available." msgstr "" #: editor/export_template_manager.cpp -#, fuzzy msgid "Retrieving the mirror list..." -msgstr "Свързване с огледалното местоположение..." +msgstr "Получаване на списъка с огледални местоположения..." #: editor/export_template_manager.cpp msgid "Starting the download..." @@ -3524,7 +3525,6 @@ msgid "Error requesting URL:" msgstr "Грешка при заявката за адрес:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Connecting to the mirror..." msgstr "Свързване с огледалното местоположение..." @@ -3533,9 +3533,8 @@ msgid "Can't resolve the requested address." msgstr "" #: editor/export_template_manager.cpp -#, fuzzy msgid "Can't connect to the mirror." -msgstr "Свързване с огледалното местоположение..." +msgstr "Огледалното местоположение е недостъпно." #: editor/export_template_manager.cpp msgid "No response from the mirror." @@ -3547,14 +3546,12 @@ msgid "Request failed." msgstr "Заявката беше неуспешна." #: editor/export_template_manager.cpp -#, fuzzy msgid "Request ended up in a redirect loop." -msgstr "Заявката се провали. Твърде много пренасочвания" +msgstr "Заявката попадна в цикъл от пренасочвания." #: editor/export_template_manager.cpp -#, fuzzy msgid "Request failed:" -msgstr "Заявката беше неуспешна." +msgstr "Заявката беше неуспешна:" #: editor/export_template_manager.cpp msgid "Download complete; extracting templates..." @@ -3631,9 +3628,8 @@ msgid "SSL Handshake Error" msgstr "" #: editor/export_template_manager.cpp -#, fuzzy msgid "Can't open the export templates file." -msgstr "Управление на шаблоните за изнасяне..." +msgstr "Файлът с шаблоните за изнасяне не може да се отвори." #: editor/export_template_manager.cpp msgid "Invalid version.txt format inside the export templates file: %s." @@ -3644,9 +3640,8 @@ msgid "No version.txt found inside the export templates file." msgstr "" #: editor/export_template_manager.cpp -#, fuzzy msgid "Error creating path for extracting templates:" -msgstr "Грешка при създаването на път за шаблоните:" +msgstr "Грешка при създаването на път за разархивиране на шаблоните:" #: editor/export_template_manager.cpp msgid "Extracting Export Templates" @@ -3681,9 +3676,8 @@ msgid "Export templates are installed and ready to be used." msgstr "" #: editor/export_template_manager.cpp -#, fuzzy msgid "Open Folder" -msgstr "Отваряне на файл" +msgstr "Отваряне на папката" #: editor/export_template_manager.cpp msgid "Open the folder containing installed templates for the current version." @@ -3698,19 +3692,16 @@ msgid "Uninstall templates for the current version." msgstr "" #: editor/export_template_manager.cpp -#, fuzzy msgid "Download from:" -msgstr "Грешка при свалянето" +msgstr "Сваляне от:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Open in Web Browser" -msgstr "Отваряне във файловия мениджър" +msgstr "Отваряне в уеб браузъра" #: editor/export_template_manager.cpp -#, fuzzy msgid "Copy Mirror URL" -msgstr "Копиране на грешката" +msgstr "Копиране на адреса на огледалното местоположение" #: editor/export_template_manager.cpp msgid "Download and Install" @@ -3727,14 +3718,12 @@ msgid "Official export templates aren't available for development builds." msgstr "" #: editor/export_template_manager.cpp -#, fuzzy msgid "Install from File" -msgstr "Инсталиране и редактиране" +msgstr "Инсталиране от файл" #: editor/export_template_manager.cpp -#, fuzzy msgid "Install templates from a local file." -msgstr "Внасяне на шаблони от архив във формат ZIP" +msgstr "Внасяне на шаблони от локален файл." #: editor/export_template_manager.cpp editor/find_in_files.cpp #: editor/progress_dialog.cpp scene/gui/dialogs.cpp @@ -3746,14 +3735,12 @@ msgid "Cancel the download of the templates." msgstr "" #: editor/export_template_manager.cpp -#, fuzzy msgid "Other Installed Versions:" -msgstr "Инсталирани версии:" +msgstr "Други инсталирани версии:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Uninstall Template" -msgstr "Управление на шаблоните" +msgstr "Деинсталиране на шаблона" #: editor/export_template_manager.cpp msgid "Select Template File" @@ -3905,9 +3892,8 @@ msgid "Collapse All" msgstr "Свиване на всичко" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Sort files" -msgstr "Търсене на файлове" +msgstr "Сортиране на файлове" #: editor/filesystem_dock.cpp msgid "Sort by Name (Ascending)" @@ -4245,14 +4231,12 @@ msgid "Failed to load resource." msgstr "Ресурсът не може да бъде зареден." #: editor/inspector_dock.cpp -#, fuzzy msgid "Copy Properties" -msgstr "Свиване на всички свойства" +msgstr "Копиране на свойствата" #: editor/inspector_dock.cpp -#, fuzzy msgid "Paste Properties" -msgstr "Свойства на темата" +msgstr "Поставяне на свойствата" #: editor/inspector_dock.cpp msgid "Make Sub-Resources Unique" @@ -4277,14 +4261,12 @@ msgid "Save As..." msgstr "Запазване като..." #: editor/inspector_dock.cpp -#, fuzzy msgid "Extra resource options." -msgstr "Не е в пътя на ресурсите." +msgstr "Допълнителни настройки на ресурса." #: editor/inspector_dock.cpp -#, fuzzy msgid "Edit Resource from Clipboard" -msgstr "Няма ресурс–анимация в буфера за обмен!" +msgstr "Редактиране на ресурс от буфера за обмен" #: editor/inspector_dock.cpp msgid "Copy Resource" @@ -4307,9 +4289,8 @@ msgid "History of recently edited objects." msgstr "История на последно редактираните обекти." #: editor/inspector_dock.cpp -#, fuzzy msgid "Open documentation for this object." -msgstr "Отваряне на документацията" +msgstr "Отваряне на документацията за този обект." #: editor/inspector_dock.cpp editor/scene_tree_dock.cpp msgid "Open Documentation" @@ -4320,9 +4301,8 @@ msgid "Filter properties" msgstr "Филтриране на свойствата" #: editor/inspector_dock.cpp -#, fuzzy msgid "Manage object properties." -msgstr "Свойства на обекта." +msgstr "Управление на свойствата на обекта." #: editor/inspector_dock.cpp msgid "Changes may be lost!" @@ -4567,9 +4547,8 @@ msgid "Blend:" msgstr "Смесване:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Parameter Changed:" -msgstr "Параметърът е променен" +msgstr "Параметърът е променен:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -5203,9 +5182,8 @@ msgid "Got:" msgstr "Получено:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Failed SHA-256 hash check" -msgstr "Неуспешна проверка на хеш от вид „sha256“" +msgstr "Неуспешна проверка на хеш от вид SHA-256" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Asset Download Error:" @@ -5353,13 +5331,13 @@ msgstr "" "Запазете сцената и опитайте отново." #: editor/plugins/baked_lightmap_editor_plugin.cpp -#, fuzzy msgid "" "No meshes to bake. Make sure they contain an UV2 channel and that the 'Use " "In Baked Light' and 'Generate Lightmap' flags are on." msgstr "" "Няма полигонни мрежи за изпичане. Уверете се, че те съдържат канал UV2 и че " -"флагът „Изпичане на светлината“ е включен." +"флаговете „Използване при изпичане на светлината“ и „Създаване на карта на " +"осветеност“ са включени." #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Failed creating lightmap images, make sure path is writable." @@ -5382,7 +5360,6 @@ msgstr "" "принадлежат на квадратната област [0.0,1.0]." #: editor/plugins/baked_lightmap_editor_plugin.cpp -#, fuzzy msgid "" "Godot editor was built without ray tracing support, lightmaps can't be baked." msgstr "" @@ -5503,6 +5480,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "Заключване на избраното" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Групи" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -5677,27 +5666,23 @@ msgstr "Режим на избиране" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Drag: Rotate selected node around pivot." -msgstr "Премахване на избрания възел или преход." +msgstr "Влачене: Въртене на избрания възел около централната му точка." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Alt+Drag: Move selected node." -msgstr "Alt+Влачене: преместване" +msgstr "Alt+Влачене: преместване на избрания възел." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "V: Set selected node's pivot position." -msgstr "Премахване на избрания възел или преход." +msgstr "V: Задаване на централната точка на възела." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Alt+RMB: Show list of all nodes at position clicked, including locked." msgstr "" -"Показване на списък с всички обекти на щракнатата позиция\n" -"(същото като Alt+Десен бутон в режим на избиране)." +"Alt+Десен бутон: Показване на списък с всички обекти на щракнатата позиция, " +"включително заключените." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "RMB: Add node at position clicked." @@ -5729,7 +5714,7 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Click to change object's rotation pivot." -msgstr "" +msgstr "Щракнете, за да промените централната точка за въртене на обекта." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Pan Mode" @@ -5934,14 +5919,12 @@ msgid "Clear Pose" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Add Node Here" -msgstr "Добавяне на възел" +msgstr "Добавяне на възел тук" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Instance Scene Here" -msgstr "Вмъкване на ключ тук" +msgstr "Инстанциране на сцената тук" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Multiply grid step by 2" @@ -5968,34 +5951,28 @@ msgid "Zoom to 12.5%" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 25%" -msgstr "Отдалечаване" +msgstr "Мащабиране на 25%" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 50%" -msgstr "Отдалечаване" +msgstr "Мащабиране на 50%" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 100%" -msgstr "Отдалечаване" +msgstr "Мащабиране на 100%" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 200%" -msgstr "Отдалечаване" +msgstr "Мащабиране на 200%" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 400%" -msgstr "Отдалечаване" +msgstr "Мащабиране на 400%" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 800%" -msgstr "Отдалечаване" +msgstr "Мащабиране на 800%" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 1600%" @@ -6162,9 +6139,8 @@ msgid "Remove Point" msgstr "Премахване на точката" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Left Linear" -msgstr "Линейно" +msgstr "Линейно отляво" #: editor/plugins/curve_editor_plugin.cpp msgid "Right Linear" @@ -6219,9 +6195,9 @@ msgid "Mesh is empty!" msgstr "Полигонната мрежа е празна!" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Couldn't create a Trimesh collision shape." -msgstr "Неуспешно създаване на папка." +msgstr "" +"Не може да се създаде форма за колизия от тип полигонна мрежа от триъгълници." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Static Trimesh Body" @@ -6244,9 +6220,8 @@ msgid "Couldn't create a single convex collision shape." msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Simplified Convex Shape" -msgstr "Създаване на единична изпъкнала форма" +msgstr "Създаване на опростена изпъкнала форма" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Single Convex Shape" @@ -6431,7 +6406,13 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +#, fuzzy +msgid "Import from Scene (Ignore Transforms)" +msgstr "Внасяне от сцена" + +#: editor/plugins/mesh_library_editor_plugin.cpp +#, fuzzy +msgid "Import from Scene (Apply Transforms)" msgstr "Внасяне от сцена" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7009,19 +6990,27 @@ msgid "Flip Portals" msgstr "" #: editor/plugins/room_manager_editor_plugin.cpp -#, fuzzy msgid "Room Generate Points" -msgstr "Преместване на точки на Безие" +msgstr "Точки за генериране на стая" #: editor/plugins/room_manager_editor_plugin.cpp -#, fuzzy msgid "Generate Points" -msgstr "Изтриване на точка" +msgstr "Генериране на точки" #: editor/plugins/room_manager_editor_plugin.cpp msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "Изчистване на трансформацията" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Създаване на възел" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7520,11 +7509,12 @@ msgid "Skeleton2D" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "Връщане на стандартните настройки" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" +msgid "Overwrite Rest Pose" msgstr "" #: editor/plugins/skeleton_editor_plugin.cpp @@ -7552,6 +7542,63 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "Долу вляво" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Left Orthogonal" +msgstr "Ляв бутон" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Orthogonal" +msgstr "Десен бутон" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7578,24 +7625,21 @@ msgid "None" msgstr "Няма" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Rotate" -msgstr "Режим на завъртане" +msgstr "Ротация" #. TRANSLATORS: This refers to the movement that changes the position of an object. #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Translate" -msgstr "Транслиране: " +msgstr "Транслиране" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Scale" -msgstr "Мащаб:" +msgstr "Скалиране" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scaling: " -msgstr "" +msgstr "Скалиране: " #: editor/plugins/spatial_editor_plugin.cpp msgid "Translating: " @@ -7603,7 +7647,7 @@ msgstr "Транслиране: " #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." -msgstr "" +msgstr "Завъртане на %s градуса." #: editor/plugins/spatial_editor_plugin.cpp msgid "Keying is disabled (no key inserted)." @@ -7622,37 +7666,32 @@ msgid "Yaw:" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Size:" -msgstr "Изглед Отпред." +msgstr "Размер:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn:" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Material Changes:" -msgstr "Параметърът е променен" +msgstr "Промени в материала:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Shader Changes:" -msgstr "Параметърът е променен" +msgstr "Промени в шейдъра:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Surface Changes:" -msgstr "Точки на повърхността" +msgstr "Промени в повърхнината:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Draw Calls:" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Vertices:" -msgstr "Вертикала:" +msgstr "Вертекси:" #: editor/plugins/spatial_editor_plugin.cpp msgid "FPS: %d (%s ms)" @@ -7667,42 +7706,22 @@ msgid "Bottom View." msgstr "Изглед отдолу." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "Изглед отляво." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "Изглед отдясно." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "Изглед отпред." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "Изглед отзад." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "Подравняване на трансформацията с изгледа" @@ -7811,9 +7830,8 @@ msgid "Freelook Slow Modifier" msgstr "Модификатор за забавяне на свободния изглед" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Toggle Camera Preview" -msgstr "Превключване на любимите" +msgstr "Превключване на изгледа за преглед на камерата" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Rotation Locked" @@ -7831,9 +7849,8 @@ msgid "" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Convert Rooms" -msgstr "Преобразуване в Mesh2D" +msgstr "Преобразуване на стаите" #: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" @@ -7849,9 +7866,8 @@ msgid "" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Snap Nodes to Floor" -msgstr "Следващ под" +msgstr "Прилепване на възлите към пода" #: editor/plugins/spatial_editor_plugin.cpp msgid "Couldn't find a solid floor to snap the selection to." @@ -7967,6 +7983,11 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "Редактиране на полигона за прикриване" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "Настройки…" @@ -8032,7 +8053,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -8276,33 +8297,28 @@ msgid "Step:" msgstr "Стъпка:" #: editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "Separation:" -msgstr "Версия:" +msgstr "Разделение:" #: editor/plugins/texture_region_editor_plugin.cpp msgid "TextureRegion" msgstr "Текстурна област" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Colors" -msgstr "Цват" +msgstr "Цветове" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Fonts" -msgstr "Шрифт" +msgstr "Шрифтове" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Icons" -msgstr "Иконка" +msgstr "Иконки" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Styleboxes" -msgstr "Стил" +msgstr "Стилове" #: editor/plugins/theme_editor_plugin.cpp msgid "{num} color(s)" @@ -8313,14 +8329,12 @@ msgid "No colors found." msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "{num} constant(s)" -msgstr "Константи" +msgstr "{num} константа/и" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "No constants found." -msgstr "Константа за цвят." +msgstr "Няма намерени константи." #: editor/plugins/theme_editor_plugin.cpp msgid "{num} font(s)" @@ -8355,28 +8369,24 @@ msgid "Nothing was selected for the import." msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Importing Theme Items" -msgstr "Внасяне на тема" +msgstr "Внасяне на елементите на темата" #: editor/plugins/theme_editor_plugin.cpp msgid "Importing items {n}/{n}" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Updating the editor" -msgstr "Обновяване на сцената" +msgstr "Обновяване на редактора" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Finalizing" -msgstr "Анализиране" +msgstr "Завършване" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Filter:" -msgstr "Филтри:" +msgstr "Филтриране:" #: editor/plugins/theme_editor_plugin.cpp msgid "With Data" @@ -8387,9 +8397,8 @@ msgid "Select by data type:" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select all visible color items." -msgstr "Избери разделение и го изтрий" +msgstr "Избиране на всички видими цветни елементи." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible color items and their data." @@ -8454,23 +8463,20 @@ msgid "" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Collapse types." -msgstr "Свиване на всичко" +msgstr "Свиване на типовете." #: editor/plugins/theme_editor_plugin.cpp msgid "Expand types." msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select all Theme items." -msgstr "Избор на шаблонен файл" +msgstr "Избиране на всички елементи – теми." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select With Data" -msgstr "Избиране на метод" +msgstr "Избиране с данните" #: editor/plugins/theme_editor_plugin.cpp msgid "Select all Theme items with item data." @@ -8486,9 +8492,8 @@ msgid "Deselect all Theme items." msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Import Selected" -msgstr "Внасяне на сцена" +msgstr "Внасяне на избраното" #: editor/plugins/theme_editor_plugin.cpp msgid "" @@ -8504,34 +8509,28 @@ msgid "" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Color Items" -msgstr "Премахване на всички елементи" +msgstr "Премахване на всички елементи – цветове" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Item" -msgstr "Преименуван" +msgstr "Преименуване на елемента" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Constant Items" -msgstr "Премахване на всички елементи" +msgstr "Премахване на всички елементи – константи" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Font Items" -msgstr "Премахване на всички елементи" +msgstr "Премахване на всички елементи – шрифтове" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Icon Items" -msgstr "Премахване на всички елементи" +msgstr "Премахване на всички елементи – иконки" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All StyleBox Items" -msgstr "Премахване на всички елементи" +msgstr "Премахване на всички елементи – стилове" #: editor/plugins/theme_editor_plugin.cpp msgid "" @@ -8540,149 +8539,124 @@ msgid "" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Color Item" -msgstr "Добавяне на всички елементи" +msgstr "Добавяне на елемент – цвят" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Constant Item" -msgstr "Константа" +msgstr "Добавяне на елемент – константа" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Font Item" -msgstr "Добавяне на всички елементи" +msgstr "Добавяне на елемент – шрифт" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Icon Item" -msgstr "Добавяне на всички елементи" +msgstr "Добавяне на елемент – иконка" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Stylebox Item" -msgstr "Добавяне на всички елементи" +msgstr "Добавяне на елемент – стил" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Color Item" -msgstr "Премахване на всички елементи" +msgstr "Преименуване на елемента – цвят" #: editor/plugins/theme_editor_plugin.cpp msgid "Rename Constant Item" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Font Item" -msgstr "Преименуване на функцията" +msgstr "Преименуване на елемента – шрифт" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Icon Item" -msgstr "Преименуване на функцията" +msgstr "Преименуване на елемента – иконка" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Stylebox Item" -msgstr "Премахване на всички елементи" +msgstr "Преименуване на елемента – стил" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Invalid file, not a Theme resource." -msgstr "Ресурсът не може да бъде зареден." +msgstr "Неправилен файл – не е ресурс от тип тема." #: editor/plugins/theme_editor_plugin.cpp msgid "Invalid file, same as the edited Theme resource." msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Manage Theme Items" -msgstr "Управление на шаблоните" +msgstr "Управление на елементите на темата" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Edit Items" -msgstr "Редактируем елемент" +msgstr "Редактиране на елементите" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Types:" -msgstr "Тип:" +msgstr "Типове:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Type:" -msgstr "Тип:" +msgstr "Добавяне на тип:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Item:" -msgstr "Добавяне на всички елементи" +msgstr "Добавяне на елемент:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add StyleBox Item" -msgstr "Добавяне на всички елементи" +msgstr "Добавяне на елемент на стила" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove Items:" -msgstr "Премахване на всички елементи" +msgstr "Премахване на елементи:" #: editor/plugins/theme_editor_plugin.cpp msgid "Remove Class Items" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove Custom Items" -msgstr "Премахване на всички елементи" +msgstr "Премахване на персонализираните елементи" #: editor/plugins/theme_editor_plugin.cpp msgid "Remove All Items" msgstr "Премахване на всички елементи" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Theme Item" -msgstr "Добавяне на всички елементи" +msgstr "Добавяне на елемент на темата" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Old Name:" -msgstr "Име:" +msgstr "Старо име:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Import Items" -msgstr "Внасяне на тема" +msgstr "Внасяне на елементи" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Default Theme" -msgstr "Презареждане на темата" +msgstr "Тема по подразбиране" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Editor Theme" -msgstr "Редактиране на темата" +msgstr "Тема на редактора" #: editor/plugins/theme_editor_plugin.cpp msgid "Select Another Theme Resource:" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Another Theme" -msgstr "Внасяне на тема" +msgstr "Друга тема" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Confirm Item Rename" -msgstr "Настройване на прилепването" +msgstr "Потвърждаване на преименуването на елемента" #: editor/plugins/theme_editor_plugin.cpp msgid "Cancel Item Rename" @@ -8703,66 +8677,56 @@ msgid "" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Type" -msgstr "Добавяне на възел" +msgstr "Добавяне на тип" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Item Type" -msgstr "Добавяне на всички елементи" +msgstr "Добавяне на тип елемент" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Node Types:" -msgstr "Тип на възела" +msgstr "Типове на възлите:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Show Default" -msgstr "Внасяне на преводи" +msgstr "Показване на стандартните" #: editor/plugins/theme_editor_plugin.cpp msgid "Show default type items alongside items that have been overridden." msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Override All" -msgstr "Запазване на всичко" +msgstr "Замяна на всичко" #: editor/plugins/theme_editor_plugin.cpp msgid "Override all default type items." msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Theme:" -msgstr "Тема" +msgstr "Тема:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Manage Items..." -msgstr "Управление на шаблоните за изнасяне..." +msgstr "Управление на елементите..." #: editor/plugins/theme_editor_plugin.cpp msgid "Add, remove, organize and import Theme items." msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Preview" -msgstr "Преглед" +msgstr "Добавяне на преглед" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Default Preview" -msgstr "Обновяване на предварителния преглед" +msgstr "Стандартен предварителен преглед" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select UI Scene:" -msgstr "Изберете източник за полигонна мрежа:" +msgstr "Изберете сцена за потребителски интерфейс:" #: editor/plugins/theme_editor_preview.cpp msgid "" @@ -8803,9 +8767,8 @@ msgid "Checked Radio Item" msgstr "" #: editor/plugins/theme_editor_preview.cpp -#, fuzzy msgid "Named Separator" -msgstr "Именуван разд." +msgstr "Именуван разделител" #: editor/plugins/theme_editor_preview.cpp msgid "Submenu" @@ -9021,9 +8984,8 @@ msgid "Collision" msgstr "Колизия" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Occlusion" -msgstr "Приставки" +msgstr "Прикриване" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Navigation" @@ -9054,9 +9016,8 @@ msgid "Collision Mode" msgstr "Режим на колизии" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Occlusion Mode" -msgstr "Приставки" +msgstr "Режим на прикриване" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Navigation Mode" @@ -10190,9 +10151,8 @@ msgid "VisualShader" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Edit Visual Property:" -msgstr "Редактиране на визуалното свойство" +msgstr "Редактиране на визуално свойство:" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Visual Shader Mode Changed" @@ -10233,7 +10193,7 @@ msgstr "" #: editor/project_export.cpp msgid "Export templates for this platform are missing/corrupted:" -msgstr "" +msgstr "Шаблоните за изнасяне за тази платформа липсват или са повредени:" #: editor/project_export.cpp msgid "Presets" @@ -10241,7 +10201,7 @@ msgstr "" #: editor/project_export.cpp editor/project_settings_editor.cpp msgid "Add..." -msgstr "" +msgstr "Добавяне..." #: editor/project_export.cpp msgid "" @@ -10255,7 +10215,7 @@ msgstr "Път за изнасяне" #: editor/project_export.cpp msgid "Resources" -msgstr "" +msgstr "Ресурси" #: editor/project_export.cpp msgid "Export all resources in the project" @@ -10282,12 +10242,16 @@ msgid "" "Filters to export non-resource files/folders\n" "(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" +"Филтри за изнасяне на нересурсни файлове/папки\n" +"(разделени със запетая, например: *.json, *.txt, docs/*)" #: editor/project_export.cpp msgid "" "Filters to exclude files/folders from project\n" "(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" +"Филтри за изключване на файлове/папки от проекта\n" +"(разделени със запетая, например: *.json, *.txt, docs/*)" #: editor/project_export.cpp msgid "Features" @@ -10306,29 +10270,30 @@ msgid "Script" msgstr "Скрипт" #: editor/project_export.cpp -#, fuzzy msgid "GDScript Export Mode:" -msgstr "Режим на изнасяне на скриптове:" +msgstr "Режим на изнасяне на файловете с код на GDScript:" #: editor/project_export.cpp msgid "Text" -msgstr "" +msgstr "Като текст" #: editor/project_export.cpp msgid "Compiled Bytecode (Faster Loading)" -msgstr "" +msgstr "Компилиран байт-код (по-бързо зареждане)" #: editor/project_export.cpp msgid "Encrypted (Provide Key Below)" -msgstr "" +msgstr "Шифровани (въведете ключ по-долу)" #: editor/project_export.cpp msgid "Invalid Encryption Key (must be 64 hexadecimal characters long)" msgstr "" +"Неправилен ключ за шифроване (трябва да бъде с дължина 64 шестнадесетични " +"знака)" #: editor/project_export.cpp msgid "GDScript Encryption Key (256-bits as hexadecimal):" -msgstr "" +msgstr "Ключ за шифроване на GDScript (256 бита, в шестнадесетичен формат):" #: editor/project_export.cpp msgid "Export PCK/Zip" @@ -10352,32 +10317,33 @@ msgstr "Файл ZIP" #: editor/project_export.cpp msgid "Godot Game Pack" -msgstr "" +msgstr "Игрален пакет на Godot" #: editor/project_export.cpp msgid "Export templates for this platform are missing:" -msgstr "" +msgstr "Шаблоните за изнасяне за тази система липсват:" #: editor/project_export.cpp msgid "Manage Export Templates" -msgstr "" +msgstr "Управление на шаблоните за изнасяне" #: editor/project_export.cpp msgid "Export With Debug" -msgstr "" +msgstr "Изнасяне с данни за дебъгване" #: editor/project_manager.cpp msgid "The path specified doesn't exist." -msgstr "" +msgstr "Посоченият път не съществува." #: editor/project_manager.cpp msgid "Error opening package file (it's not in ZIP format)." -msgstr "" +msgstr "Грешка при отваряне на пакета (не е във формат ZIP)." #: editor/project_manager.cpp msgid "" "Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file." msgstr "" +"Неправилен проектен файл „.zip“. В него не се съдържа файл „project.godot“." #: editor/project_manager.cpp msgid "Please choose an empty folder." @@ -10389,20 +10355,19 @@ msgstr "Моля, изберете файл от тип „project.godot“ ил #: editor/project_manager.cpp msgid "This directory already contains a Godot project." -msgstr "" +msgstr "Тази папка вече съдържа проект на Godot." #: editor/project_manager.cpp msgid "New Game Project" -msgstr "" +msgstr "Нов игрален проект" #: editor/project_manager.cpp msgid "Imported Project" msgstr "Внесен проект" #: editor/project_manager.cpp -#, fuzzy msgid "Invalid project name." -msgstr "Неправилно име на проект." +msgstr "Неправилно име на проекта." #: editor/project_manager.cpp msgid "Couldn't create folder." @@ -10410,21 +10375,23 @@ msgstr "Папката не може да бъде създадена." #: editor/project_manager.cpp msgid "There is already a folder in this path with the specified name." -msgstr "" +msgstr "В този път вече съществува папка с това име." #: editor/project_manager.cpp msgid "It would be a good idea to name your project." -msgstr "" +msgstr "Няма да е лошо да дадете име на проекта си." #: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." -msgstr "" +msgstr "Неправилен път до проекта (Променяли ли сте нещо?)." #: editor/project_manager.cpp msgid "" "Couldn't load project.godot in project path (error %d). It may be missing or " "corrupted." msgstr "" +"Файлът „project.godot“ не може да бъде зареден от пътя на проекта (грешка " +"%d). Възможно е той да липсва или да е повреден." #: editor/project_manager.cpp msgid "Couldn't edit project.godot in project path." @@ -10622,37 +10589,32 @@ msgid "Project Manager" msgstr "Управление на проектите" #: editor/project_manager.cpp -#, fuzzy msgid "Local Projects" -msgstr "Проекти" +msgstr "Локални проекти" #: editor/project_manager.cpp -#, fuzzy msgid "Loading, please wait..." -msgstr "Зареждане…" +msgstr "Зареждане. Моля, изчакайте…" #: editor/project_manager.cpp msgid "Last Modified" msgstr "" #: editor/project_manager.cpp -#, fuzzy msgid "Edit Project" -msgstr "Изнасяне на проекта" +msgstr "Редактиране на проекта" #: editor/project_manager.cpp -#, fuzzy msgid "Run Project" -msgstr "Преименуване на проекта" +msgstr "Пускане на проекта" #: editor/project_manager.cpp msgid "Scan" msgstr "Сканиране" #: editor/project_manager.cpp -#, fuzzy msgid "Scan Projects" -msgstr "Проекти" +msgstr "Сканиране за проекти" #: editor/project_manager.cpp msgid "Select a Folder to Scan" @@ -10663,14 +10625,12 @@ msgid "New Project" msgstr "Нов проект" #: editor/project_manager.cpp -#, fuzzy msgid "Import Project" -msgstr "Внесен проект" +msgstr "Внасяне на проект" #: editor/project_manager.cpp -#, fuzzy msgid "Remove Project" -msgstr "Преименуване на проекта" +msgstr "Премахване на проекта" #: editor/project_manager.cpp msgid "Remove Missing" @@ -10681,9 +10641,8 @@ msgid "About" msgstr "Относно" #: editor/project_manager.cpp -#, fuzzy msgid "Asset Library Projects" -msgstr "Библиотека с ресурси" +msgstr "Проекти от Библиотеката с ресурси" #: editor/project_manager.cpp msgid "Restart Now" @@ -10708,9 +10667,8 @@ msgid "" msgstr "" #: editor/project_manager.cpp -#, fuzzy msgid "Filter projects" -msgstr "Филтриране на свойствата" +msgstr "Филтриране на проектите" #: editor/project_manager.cpp msgid "" @@ -10912,9 +10870,8 @@ msgid "Override for Feature" msgstr "" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Add %d Translations" -msgstr "Добавяне на превод" +msgstr "Добавяне на %d превода" #: editor/project_settings_editor.cpp msgid "Remove Translation" @@ -11300,9 +11257,8 @@ msgid "Can't paste root node into the same scene." msgstr "" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Paste Node(s)" -msgstr "Поставяне на възлите" +msgstr "Поставяне на възела(възлите)" #: editor/scene_tree_dock.cpp msgid "Detach Script" @@ -11447,9 +11403,8 @@ msgid "Attach Script" msgstr "Закачане на скрипт" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Cut Node(s)" -msgstr "Изрязване на възлите" +msgstr "Изрязване на възела(възлите)" #: editor/scene_tree_dock.cpp msgid "Remove Node(s)" @@ -12021,6 +11976,14 @@ msgstr "" msgid "Set Portal Point Position" msgstr "" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Position" +msgstr "" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12098,7 +12061,6 @@ msgid "Step argument is zero!" msgstr "Аргументът за стъпката е нула!" #: modules/gdscript/gdscript_functions.cpp -#, fuzzy msgid "Not a script with an instance" msgstr "Скриптът няма инстанция" @@ -12134,14 +12096,12 @@ msgid "Object can't provide a length." msgstr "" #: modules/gltf/editor_scene_exporter_gltf_plugin.cpp -#, fuzzy msgid "Export Mesh GLTF2" -msgstr "Изнасяне на библиотека с полигонни мрежи" +msgstr "Изнасяне на полигонна мрежа като GLTF2" #: modules/gltf/editor_scene_exporter_gltf_plugin.cpp -#, fuzzy msgid "Export GLTF..." -msgstr "Изнасяне..." +msgstr "Изнасяне на GLTF..." #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" @@ -12200,29 +12160,28 @@ msgid "Snap View" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Clip Disabled" -msgstr "Изключено" +msgstr "Отрязването е изключено" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Above" -msgstr "" +msgstr "Отрязване над" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Below" -msgstr "" +msgstr "Отрязване под" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit X Axis" -msgstr "" +msgstr "Редактиране на оста X" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit Y Axis" -msgstr "" +msgstr "Редактиране на оста Y" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit Z Axis" -msgstr "" +msgstr "Редактиране на оста Z" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Rotate X" @@ -12303,9 +12262,8 @@ msgid "Indirect lighting" msgstr "" #: modules/lightmapper_cpu/lightmapper_cpu.cpp -#, fuzzy msgid "Post processing" -msgstr "Задаване на израз" +msgstr "Постобработка" #: modules/lightmapper_cpu/lightmapper_cpu.cpp msgid "Plotting lightmaps" @@ -12315,6 +12273,11 @@ msgstr "" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "Запълване на избраното" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -12438,14 +12401,12 @@ msgid "Add Output Port" msgstr "Добавяне на изходящ порт" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Port Type" -msgstr "Промяна на типа на входящия порт" +msgstr "Промяна на типа на порта" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Port Name" -msgstr "Промяна на името на входящия порт" +msgstr "Промяна на името на порт" #: modules/visual_script/visual_script_editor.cpp msgid "Override an existing built-in function." @@ -12556,9 +12517,8 @@ msgid "Add Preload Node" msgstr "" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Add Node(s)" -msgstr "Добавяне на възел" +msgstr "Добавяне на възел(възли)" #: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" @@ -12599,14 +12559,12 @@ msgid "Disconnect Nodes" msgstr "Разкачане на възлите" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Node Data" -msgstr "Изрязване на възелите" +msgstr "Свързване на данните на възела" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Node Sequence" -msgstr "Изрязване на възелите" +msgstr "Свързване на последователност от възли" #: modules/visual_script/visual_script_editor.cpp msgid "Script already has function '%s'" @@ -12786,225 +12744,215 @@ msgstr "Търсене във VisualScript" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Exporting APK..." -msgstr "Изнасяне на всичко" +msgstr "Изнасяне на APK..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Uninstalling..." -msgstr "Инсталирате..." +msgstr "Деинсталиране..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Installing to device, please wait..." -msgstr "Зареждане…" +msgstr "Инсталиране на устройството. Моля, изчакайте…" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" -msgstr "Файлът не може да бъде записан:" +msgstr "Не може да се инсталира на устройство: %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Could not execute on device." -msgstr "Папката не може да бъде създадена." +msgstr "Изпълнението на устройството е невъзможно." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" +"В настройките на редактора трябва да бъде посочен правилен път към Android " +"SDK." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." -msgstr "" +msgstr "Пътят до Android SDK в настройките на редактора е грешен." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" -msgstr "" +msgstr "Липсва папката „platform-tools“!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." -msgstr "" +msgstr "Не е намерена командата „adb“ от Android SDK – platform-tools." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" +"Моля, проверете папката на Android SDK, която е посочена в настройките на " +"редактора." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" -msgstr "" +msgstr "Липсва папката „build-tools“!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." -msgstr "" +msgstr "Не е намерена командата „apksigner “ от Android SDK – build-tools." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." -msgstr "" +msgstr "Неправилен публичен ключ за разширение към APK." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "Неправилно име на пакет:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" +"В настройките на проекта, раздел „android/modules“, присъства неправилен " +"модул „GodotPaymentV3“ (това е променено във Godot 3.2.2).\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " "directory.\n" "The resulting %s is unsigned." msgstr "" +"Командата „apksigner“ не може да бъде намерена.\n" +"Проверете дали командата е налична в папката „build-tools“ на Android SDK.\n" +"Резултатният файл „%s“ не е подписан." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." msgstr "" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." -msgstr "Шаблонът не може да се отвори за изнасяне:" +msgstr "Не е намерено хранилище за ключове. Изнасянето е невъзможно." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." -msgstr "Добавяне на %s..." +msgstr "Потвърждаване на %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" -msgstr "Изнасяне на всичко" +msgstr "Изнасяне за Android" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13012,58 +12960,56 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" -msgstr "Файлът не може да бъде записан:" +msgstr "Файлът с пакета за разширение не може да бъде записан!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Package not found: %s" -msgstr "Съдържание на пакета:" +msgstr "Пакетът не е намерен: %s" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." -msgstr "Създаване на полигонна мрежа…" +msgstr "Създаване на APK…" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" -msgstr "Шаблонът не може да се отвори за изнасяне:" +msgstr "" +"Не е намерен шаблонен файл APK за изнасяне:\n" +"%s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13071,21 +13017,19 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Adding files..." -msgstr "Добавяне на %s..." +msgstr "Добавяне на файлове..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Could not export project files" -msgstr "Файлът не може да бъде записан:" +msgstr "Файловете на проекта не могат да бъдат изнесени" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13134,29 +13078,24 @@ msgid "Could not write file:" msgstr "Файлът не може да бъде записан:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not read file:" -msgstr "Файлът не може да бъде записан:" +msgstr "Файлът не може да бъде прочетен:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not read HTML shell:" -msgstr "Не може да се прочете персонализирана HTML-обвивка:" +msgstr "Персонализираната HTML-обвивка не може да бъде прочетена:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not create HTTP server directory:" -msgstr "Папката не може да бъде създадена." +msgstr "Папката на HTTP-сървъра не може да бъде създадена:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Error starting HTTP server:" -msgstr "Грешка при записването:" +msgstr "Грешка при стартирането на HTTP-сървър:" #: platform/osx/export/export.cpp -#, fuzzy msgid "Invalid bundle identifier:" -msgstr "Името не е правилен идентификатор:" +msgstr "Неправилен идентификатор на пакета:" #: platform/osx/export/export.cpp msgid "Notarization: code signing required." @@ -13576,6 +13515,14 @@ msgstr "" "NavigationMeshInstance трябва да бъде дъщерен или под-дъщерен на възел от " "тип Navigation. Той само предоставя данните за навигирането." +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -13871,6 +13818,14 @@ msgstr "Трябва да се използва правилно разшире msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13911,6 +13866,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/bn.po b/editor/translations/bn.po index 6cd9e3a81c..6c958956bc 100644 --- a/editor/translations/bn.po +++ b/editor/translations/bn.po @@ -1052,7 +1052,7 @@ msgstr "" msgid "Dependencies" msgstr "নির্ভরতা-সমূহ" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "রিসোর্স" @@ -1723,14 +1723,14 @@ msgid "" "Enabled'." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Custom debug template not found." msgstr "স্বনির্মিত ডিবাগ (debug) প্যাকেজ খুঁজে পাওয়া যায়নি।" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp #, fuzzy @@ -2147,7 +2147,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "পুনরায় ইম্পোর্ট হচ্ছে" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "শীর্ষ" @@ -2689,6 +2689,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "বর্তমান দৃশ্যটি সংরক্ষিত হয়নি। তবুও খুলবেন?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "সাবেক অবস্থায় যান/আনডু" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "পুনরায় করুন" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "পূর্বে কখনোই সংরক্ষিত হয়নি এমন দৃশ্য পুনরায়-লোড (রিলোড) করা অসম্ভব।" @@ -3407,6 +3433,11 @@ msgid "Merge With Existing" msgstr "বিদ্যমানের সাথে একত্রিত করুন" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "অ্যানিমেশন (Anim) ট্রান্সফর্ম পরিবর্তন করুন" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "একটি স্ক্রিপ্ট খুলুন এবং চালান" @@ -3681,6 +3712,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp #, fuzzy msgid "Make Unique" @@ -5971,6 +6006,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "CanvasItem সম্পাদন করুন" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "নির্বাচন করুন" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "গ্রুপ" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6977,7 +7024,13 @@ msgid "Remove Selected Item" msgstr "নির্বাচিত বস্তুটি অপসারণ করুন" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +#, fuzzy +msgid "Import from Scene (Ignore Transforms)" +msgstr "দৃশ্য হতে ইম্পোর্ট করুন" + +#: editor/plugins/mesh_library_editor_plugin.cpp +#, fuzzy +msgid "Import from Scene (Apply Transforms)" msgstr "দৃশ্য হতে ইম্পোর্ট করুন" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7609,6 +7662,16 @@ msgstr "উৎপাদিত বিন্দুর সংখ্যা:" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "রুপান্তর" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "নোড তৈরি করুন" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -8158,12 +8221,14 @@ msgid "Skeleton2D" msgstr "স্কেলেটন/কাঠাম..." #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "প্রাথমিক sRGB ব্যবহার করুন" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "প্রতিস্থাপন" #: editor/plugins/skeleton_editor_plugin.cpp #, fuzzy @@ -8194,6 +8259,71 @@ msgid "Perspective" msgstr "পরিপ্রেক্ষিত (Perspective)" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Orthogonal" +msgstr "সমকোণীয় (Orthogonal)" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Perspective" +msgstr "পরিপ্রেক্ষিত (Perspective)" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Orthogonal" +msgstr "সমকোণীয় (Orthogonal)" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "পরিপ্রেক্ষিত (Perspective)" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Left Orthogonal" +msgstr "সমকোণীয় (Orthogonal)" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Perspective" +msgstr "পরিপ্রেক্ষিত (Perspective)" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Orthogonal" +msgstr "সমকোণীয় (Orthogonal)" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Orthogonal" +msgstr "সমকোণীয় (Orthogonal)" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Perspective" +msgstr "পরিপ্রেক্ষিত (Perspective)" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Orthogonal" +msgstr "সমকোণীয় (Orthogonal)" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Perspective" +msgstr "পরিপ্রেক্ষিত (Perspective)" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "রুপান্তর নিষ্ফলা করা হয়েছে।" @@ -8315,42 +8445,22 @@ msgid "Bottom View." msgstr "নিম্ন দর্শন।" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "নিম্ন" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "বাম দর্শন।" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "বাম" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "ডান দর্শন।" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "ডান" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "সন্মুখ দর্শন।" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "সন্মুখ" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "পশ্চাৎ দর্শন।" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "পশ্চাৎ" - -#: editor/plugins/spatial_editor_plugin.cpp #, fuzzy msgid "Align Transform with View" msgstr "দর্শনের সাথে সারিবদ্ধ করুন" @@ -8637,6 +8747,11 @@ msgid "View Portal Culling" msgstr "Viewport সেটিংস" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "Viewport সেটিংস" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy msgid "Settings..." @@ -8703,8 +8818,9 @@ msgid "Post" msgstr "পরবর্তী (Post)" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" -msgstr "" +#, fuzzy +msgid "Unnamed Gizmo" +msgstr "নামহীন প্রকল্প" #: editor/plugins/sprite_editor_plugin.cpp #, fuzzy @@ -13073,6 +13189,16 @@ msgstr "বক্ররেখার বিন্দুর স্থান নি msgid "Set Portal Point Position" msgstr "বক্ররেখার বিন্দুর স্থান নির্ধারণ করুন" +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Radius" +msgstr "Capsule Shape এর ব্যাসার্ধ পরিবর্তন করুন" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr "আন্ত-বক্ররেখার স্থান নির্ধারণ করুন" + #: modules/csg/csg_gizmos.cpp #, fuzzy msgid "Change Cylinder Radius" @@ -13391,6 +13517,11 @@ msgstr "ছবিসমূহ ব্লিটিং (Blitting) করা হচ msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "সব সিলেক্ট করুন" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -13927,166 +14058,155 @@ msgstr "Shader Graph Node অপসারণ করুন" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "লিস্ট থেকে ডিভাইস সিলেক্ট করুন" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting APK..." msgstr "%s এর জন্য এক্সপোর্ট (export) হচ্ছে" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Uninstalling..." msgstr "ইন্সটল" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Installing to device, please wait..." msgstr "মিরর রিট্রাইভ করা হচ্ছে, দযা করে অপেক্ষা করুন..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not install to device: %s" msgstr "দৃশ্য ইন্সট্যান্স করা সম্ভব হয়নি!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Running on device..." msgstr "স্বনির্মিত স্ক্রিপ্ট চালানো হচ্ছে..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not execute on device." msgstr "ফোল্ডার তৈরী করা সম্ভব হয়নি।" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Invalid package name:" msgstr "অগ্রহণযোগ্য ক্লাস নাম" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -14094,63 +14214,63 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Signing release %s..." msgstr "" "ফাইল স্ক্যান করা হচ্ছে,\n" "অনুগ্রহপূর্বক অপেক্ষা করুন..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not find keystore, unable to export." msgstr "ফোল্ডার তৈরী করা সম্ভব হয়নি।" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Verifying %s..." msgstr "%s সংযুক্ত হচ্ছে..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting for Android" msgstr "%s এর জন্য এক্সপোর্ট (export) হচ্ছে" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -14158,59 +14278,59 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files to gradle project\n" msgstr "প্রকল্পের পথে engine.cfg তৈরি করা সম্ভব হয়নি।" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not write expansion package file!" msgstr "টাইলটি খুঁজে পাওয়া যায়নি:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "অ্যানিমেশনের সরঞ্জামসমূহ" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Creating APK..." msgstr "ওকট্রী (octree) গঠনবিন্যাস তৈরি করা হচ্ছে" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" "Could not find template APK to export:\n" "%s" msgstr "ফোল্ডার তৈরী করা সম্ভব হয়নি।" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -14218,21 +14338,21 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Adding files..." msgstr "%s সংযুক্ত হচ্ছে..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files" msgstr "টাইলটি খুঁজে পাওয়া যায়নি:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -14744,6 +14864,14 @@ msgstr "" "NavigationMeshInstance-কে অবশ্যই Navigation-এর অংশ অথবা অংশের অংশ হতে হবে। " "এটা শুধুমাত্র ন্যাভিগেশনের তথ্য প্রদান করে।" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -15047,6 +15175,14 @@ msgstr "একটি কার্যকর এক্সটেনশন ব্য msgid "Enable grid minimap." msgstr "স্ন্যাপ সক্রিয় করুন" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp #, fuzzy msgid "" @@ -15095,6 +15231,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " @@ -15148,6 +15288,21 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#~ msgid "Bottom" +#~ msgstr "নিম্ন" + +#~ msgid "Left" +#~ msgstr "বাম" + +#~ msgid "Right" +#~ msgstr "ডান" + +#~ msgid "Front" +#~ msgstr "সন্মুখ" + +#~ msgid "Rear" +#~ msgstr "পশ্চাৎ" + #, fuzzy #~ msgid "Package Contents:" #~ msgstr "ধ্রুবকসমূহ:" @@ -17072,9 +17227,6 @@ msgstr "" #~ msgid "Images:" #~ msgstr "ছবিসমূহ:" -#~ msgid "Group" -#~ msgstr "গ্রুপ" - #~ msgid "Sample Conversion Mode: (.wav files):" #~ msgstr "নমুনা রূপান্তর মোড: (.wav ফাইল):" diff --git a/editor/translations/br.po b/editor/translations/br.po index adee6daaba..4db566b371 100644 --- a/editor/translations/br.po +++ b/editor/translations/br.po @@ -1009,7 +1009,7 @@ msgstr "" msgid "Dependencies" msgstr "" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "" @@ -1638,13 +1638,13 @@ msgid "" "Enabled'." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2015,7 +2015,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "" @@ -2493,6 +2493,30 @@ msgid "Current scene not saved. Open anyway?" msgstr "" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Undo: %s" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Redo: %s" +msgstr "" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "" @@ -3116,6 +3140,11 @@ msgid "Merge With Existing" msgstr "" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Cheñch Treuzfurmadur ar Fiñvskeudenn" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "" @@ -3357,6 +3386,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "" @@ -5397,6 +5430,16 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Locked" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Grouped" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6296,7 +6339,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -6882,6 +6929,14 @@ msgstr "Fiñval ar Poentoù Bezier" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Occluder Set Transform" +msgstr "" + +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Center Node" +msgstr "" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7376,11 +7431,11 @@ msgid "Skeleton2D" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" +msgid "Reset to Rest Pose" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" +msgid "Overwrite Rest Pose" msgstr "" #: editor/plugins/skeleton_editor_plugin.cpp @@ -7408,6 +7463,60 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7515,42 +7624,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -7812,6 +7901,10 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Occlusion Culling" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "" @@ -7877,7 +7970,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -11777,6 +11870,14 @@ msgstr "" msgid "Set Portal Point Position" msgstr "" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Position" +msgstr "" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12057,6 +12158,10 @@ msgstr "" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Build Solution" +msgstr "" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -12524,159 +12629,148 @@ msgstr "" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Uninstalling..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Installing to device, please wait..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not execute on device." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -12684,57 +12778,57 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -12742,54 +12836,54 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package not found: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -12797,19 +12891,19 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Adding files..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13259,6 +13353,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -13548,6 +13650,14 @@ msgstr "" msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13588,6 +13698,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/ca.po b/editor/translations/ca.po index 347fea679b..e2580e35d9 100644 --- a/editor/translations/ca.po +++ b/editor/translations/ca.po @@ -1039,7 +1039,7 @@ msgstr "" msgid "Dependencies" msgstr "Dependències" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Recurs" @@ -1708,13 +1708,13 @@ msgstr "" "Activeu \"Import Etc\" a Configuració del Projecte o desactiveu la opció " "'Driver Fallback Enabled''." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "No s'ha trobat cap plantilla de depuració personalitzada." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2100,7 +2100,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "(Re)Important Recursos" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "Dalt" @@ -2611,6 +2611,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "L'escena actual no s'ha desat. Voleu obrir-la igualment?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "Desfés" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "Refés" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "No es pot recarregar una escena mai desada." @@ -3320,6 +3346,11 @@ msgid "Merge With Existing" msgstr "Combina amb Existents" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Modifica la Transformació de l'Animació" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "Obre i Executa un Script" @@ -3579,6 +3610,10 @@ msgstr "" "El recurs seleccionat (%s) no coincideix amb cap tipus esperat per aquesta " "propietat (%s)." +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "Fes-lo Únic" @@ -5758,6 +5793,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "Modifica el elementCanvas" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "Bloca la selecció" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Grups" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6741,7 +6788,13 @@ msgid "Remove Selected Item" msgstr "Elimina l'Element Seleccionat" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +#, fuzzy +msgid "Import from Scene (Ignore Transforms)" +msgstr "Importa des de l'Escena" + +#: editor/plugins/mesh_library_editor_plugin.cpp +#, fuzzy +msgid "Import from Scene (Apply Transforms)" msgstr "Importa des de l'Escena" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7350,6 +7403,16 @@ msgstr "Recompte de punts generats:" msgid "Flip Portal" msgstr "Invertir Horitzontalment" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "Restablir Transformació" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Crea un Node" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "L'AnimationTree no té ruta assignada cap a un AnimationPlayer" @@ -7869,13 +7932,13 @@ msgstr "Esquelet2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp #, fuzzy -msgid "Make Rest Pose (From Bones)" -msgstr "Crear Pose de Repòs (A partir dels Ossos)" +msgid "Reset to Rest Pose" +msgstr "Establir els ossos a la postura de repós" #: editor/plugins/skeleton_2d_editor_plugin.cpp #, fuzzy -msgid "Set Bones to Rest Pose" -msgstr "Establir els ossos a la postura de repós" +msgid "Overwrite Rest Pose" +msgstr "Sobreescriu" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7903,6 +7966,71 @@ msgid "Perspective" msgstr "Perspectiva" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Perspective" +msgstr "Perspectiva" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "Perspectiva" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Left Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Perspective" +msgstr "Perspectiva" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Perspective" +msgstr "Perspectiva" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Perspective" +msgstr "Perspectiva" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "S'ha interromput la Transformació ." @@ -8021,42 +8149,22 @@ msgid "Bottom View." msgstr "Vista inferior." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "Part inferior" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "Vista esquerra." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "Esquerra" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "Vista Dreta." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "Dreta" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "Vista Frontal." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "Davant" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "Vista Posterior." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "Darrere" - -#: editor/plugins/spatial_editor_plugin.cpp #, fuzzy msgid "Align Transform with View" msgstr "Alinear amb la Vista" @@ -8334,6 +8442,11 @@ msgid "View Portal Culling" msgstr "Configuració de la Vista" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "Configuració de la Vista" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "Configuració..." @@ -8403,8 +8516,8 @@ msgstr "Post" #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy -msgid "Nameless gizmo" -msgstr "Gizmo sense nom" +msgid "Unnamed Gizmo" +msgstr "Projecte sense nom" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Mesh2D" @@ -12771,6 +12884,16 @@ msgstr "Estableix la Posició del Punt de la Corba" msgid "Set Portal Point Position" msgstr "Estableix la Posició del Punt de la Corba" +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Radius" +msgstr "Modifica el radi d'una Forma Càpsula" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr "Estableix la Posició d'Entrada de la Corba" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "Canviar Radi del Cilindre" @@ -13073,6 +13196,11 @@ msgstr "S'està traçant l'Il·luminació:" msgid "Class name can't be a reserved keyword" msgstr "El nom de la classe no pot ser una paraula clau reservada" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "Omplir la Selecció" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "Final de la traça de la pila d'excepció interna" @@ -13584,78 +13712,78 @@ msgstr "Elimina el Node de VisualScript" msgid "Get %s" msgstr "Obtenir %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "El nom del paquet falta." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package segments must be of non-zero length." msgstr "Els segments de paquets han de ser de longitud no zero." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" "El caràcter '%s' no està permès als noms de paquets d'aplicacions Android." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "A digit cannot be the first character in a package segment." msgstr "Un dígit no pot ser el primer caràcter d'un segment de paquets." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "The character '%s' cannot be the first character in a package segment." msgstr "" "El caràcter '%s' no pot ser el primer caràcter d'un segment de paquets." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "El paquet ha de tenir com a mínim un separador '. '." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "Selecciona un dispositiu de la llista" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting APK..." msgstr "Exportant tot" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Uninstalling..." msgstr "Desinstal·lar" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Installing to device, please wait..." msgstr "S'estan buscant rèpliques..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not install to device: %s" msgstr "No s'ha pogut començar el subprocés!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Running on device..." msgstr "Executant Script Personalitzat..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not execute on device." msgstr "No s'ha pogut crear el directori." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" "Android build template not installed in the project. Install it from the " @@ -13664,102 +13792,91 @@ msgstr "" "El projecte Android no està instal·lat per a la compilació. Instal·leu-lo " "des del menú Editor." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "A valid Android SDK path is required in Editor Settings." msgstr "" "El camí de l'SDK d'Android no és vàlid per a la compilació personalitzada en " "la configuració de l'editor." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Invalid Android SDK path in Editor Settings." msgstr "" "El camí de l'SDK d'Android no és vàlid per a la compilació personalitzada en " "la configuració de l'editor." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" "El camí de l'SDK d'Android no és vàlid per a la compilació personalitzada en " "la configuració de l'editor." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "Clau pública no vàlida per a l'expansió de l'APK." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "El nom del paquet no és vàlid:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13767,57 +13884,57 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Signing release %s..." msgstr "" "Analitzant Fitxers,\n" "Si Us Plau Espereu..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not find keystore, unable to export." msgstr "No es pot obrir la plantilla per exportar:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Verifying %s..." msgstr "Afegint %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting for Android" msgstr "Exportant tot" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" "Trying to build from a custom built template, but no version info for it " @@ -13826,7 +13943,7 @@ msgstr "" "Intentant construir des d'una plantilla personalitzada, però no existeix " "informació de versió per a això. Torneu a instal·lar des del menú 'projecte'." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" "Android build version mismatch:\n" @@ -13840,27 +13957,27 @@ msgstr "" "Torneu a instal·lar la plantilla de compilació d'Android des del menú " "'Projecte'." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files to gradle project\n" msgstr "No es pot trobat el el fitxer 'project.godot' en el camí del projecte." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not write expansion package file!" msgstr "No s'ha pogut escriure el fitxer:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Building Android Project (gradle)" msgstr "Construint Projecte Android (gradle)" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" "Building of Android project failed, check output for the error.\n" @@ -13871,34 +13988,34 @@ msgstr "" "Alternativament visiteu docs.godotengine.org per a la documentació de " "compilació d'Android." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "Animació no trobada: '%s'" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Creating APK..." msgstr "Creant els contorns..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" "Could not find template APK to export:\n" "%s" msgstr "No es pot obrir la plantilla per exportar:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13906,21 +14023,21 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Adding files..." msgstr "Afegint %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files" msgstr "No s'ha pogut escriure el fitxer:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -14467,6 +14584,14 @@ msgstr "" "NavigationMeshInstance ha de ser fill o nét d'un node Navigation. Només " "proporciona dades de navegació." +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14787,6 +14912,14 @@ msgstr "Cal utilitzar una extensió vàlida." msgid "Enable grid minimap." msgstr "Activar graella del minimapa" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp #, fuzzy msgid "" @@ -14842,6 +14975,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " @@ -14894,6 +15031,29 @@ msgstr "" msgid "Constants cannot be modified." msgstr "Les constants no es poden modificar." +#, fuzzy +#~ msgid "Make Rest Pose (From Bones)" +#~ msgstr "Crear Pose de Repòs (A partir dels Ossos)" + +#~ msgid "Bottom" +#~ msgstr "Part inferior" + +#~ msgid "Left" +#~ msgstr "Esquerra" + +#~ msgid "Right" +#~ msgstr "Dreta" + +#~ msgid "Front" +#~ msgstr "Davant" + +#~ msgid "Rear" +#~ msgstr "Darrere" + +#, fuzzy +#~ msgid "Nameless gizmo" +#~ msgstr "Gizmo sense nom" + #~ msgid "Package Contents:" #~ msgstr "Contingut del Paquet:" diff --git a/editor/translations/cs.po b/editor/translations/cs.po index 266614bf96..eb257b0af6 100644 --- a/editor/translations/cs.po +++ b/editor/translations/cs.po @@ -30,7 +30,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2021-07-26 14:18+0000\n" +"PO-Revision-Date: 2021-09-15 00:46+0000\n" "Last-Translator: Zbyněk <zbynek.fiala@gmail.com>\n" "Language-Team: Czech <https://hosted.weblate.org/projects/godot-engine/godot/" "cs/>\n" @@ -39,7 +39,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Weblate 4.7.2-dev\n" +"X-Generator: Weblate 4.9-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -63,8 +63,7 @@ msgstr "Neplatný vstup %i (nepředán) ve výrazu" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" -msgstr "" -"\"self\" nemůže být použito, protože instance je \"null\" (není předána)" +msgstr "self nemůže být použit, protože jeho instance je null (není platná)" #: core/math/expression.cpp msgid "Invalid operands to operator %s, %s and %s." @@ -1047,7 +1046,7 @@ msgstr "" msgid "Dependencies" msgstr "Závislosti" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Zdroj" @@ -1712,13 +1711,13 @@ msgstr "" "Povolte 'Import Pvrtc' v nastavení projektu, nebo vypněte 'Driver Fallback " "Enabled'." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "Vlastní ladící šablona nebyla nalezena." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2100,7 +2099,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "(Re)Importování assetů" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "Horní" @@ -2608,6 +2607,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "Aktuální scéna neuložena. Přesto otevřít?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "Zpět" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "Znovu" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "Nelze načíst scénu, která nebyla nikdy uložena." @@ -3291,6 +3316,11 @@ msgid "Merge With Existing" msgstr "Sloučit s existující" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Animace: Změna transformace" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "Otevřít a spustit skript" @@ -3547,6 +3577,10 @@ msgstr "" "Vybraný zdroj (%s) neodpovídá žádnému očekávanému typu pro tuto vlastnost " "(%s)." +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "Vytvořit unikátní" @@ -5674,6 +5708,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "Přemístit CanvasItem \"%s\" na (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "Uzamčít vybraný" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Skupiny" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6492,7 +6538,7 @@ msgstr "Vytvořit obrys" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh" -msgstr "Mesh" +msgstr "Sítě (Mesh)" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" @@ -6623,7 +6669,13 @@ msgid "Remove Selected Item" msgstr "Odstranit vybranou položku" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +#, fuzzy +msgid "Import from Scene (Ignore Transforms)" +msgstr "Importovat ze scény" + +#: editor/plugins/mesh_library_editor_plugin.cpp +#, fuzzy +msgid "Import from Scene (Apply Transforms)" msgstr "Importovat ze scény" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7216,6 +7268,16 @@ msgstr "Počet vygenerovaných bodů:" msgid "Flip Portal" msgstr "Převrátit horizontálně" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "Promazat transformaci" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Vytvořit uzel" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "AnimationTree nemá nastavenou cestu k AnimstionPlayer" @@ -7716,12 +7778,14 @@ msgid "Skeleton2D" msgstr "Skeleton2D (Kostra 2D)" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "Vytvořit klidovou pózu (z kostí)" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "Umístit kosti do klidové pózy" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "Umístit kosti do klidové pózy" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "Přepsat" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7748,6 +7812,71 @@ msgid "Perspective" msgstr "Perspektivní" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Orthogonal" +msgstr "Ortogonální" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Perspective" +msgstr "Perspektivní" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Orthogonal" +msgstr "Ortogonální" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "Perspektivní" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Left Orthogonal" +msgstr "Ortogonální" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Perspective" +msgstr "Perspektivní" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Orthogonal" +msgstr "Ortogonální" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Orthogonal" +msgstr "Ortogonální" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Perspective" +msgstr "Perspektivní" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Orthogonal" +msgstr "Ortogonální" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Perspective" +msgstr "Perspektivní" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "Transformace zrušena." @@ -7866,42 +7995,22 @@ msgid "Bottom View." msgstr "Pohled zdola." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "Dolní" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "Pohled zleva." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "Levý" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "Pohled zprava." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "Pravý" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "Čelní pohled." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "Přední" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "Pohled zezadu." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "Zadní" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "Zarovnat se zobrazením" @@ -8174,6 +8283,11 @@ msgid "View Portal Culling" msgstr "Nastavení viewportu" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "Nastavení viewportu" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "Nastavení..." @@ -8239,8 +8353,9 @@ msgid "Post" msgstr "Po" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" -msgstr "Gizmo beze jména" +#, fuzzy +msgid "Unnamed Gizmo" +msgstr "Nepojmenovaný projekt" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Mesh2D" @@ -12411,6 +12526,16 @@ msgstr "Nastavit pozici bodu křivky" msgid "Set Portal Point Position" msgstr "Nastavit pozici bodu křivky" +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Radius" +msgstr "Změnit poloměr Cylinder Shape" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr "Nastavit bod do křivky" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "Změnit poloměr Cylinder" @@ -12694,6 +12819,11 @@ msgstr "Vykreslování světelných map" msgid "Class name can't be a reserved keyword" msgstr "Název třídy nemůže být rezervované klíčové slovo" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "Vyplnit výběr" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "Konec zásobníku trasování vnitřní výjimky" @@ -13173,73 +13303,73 @@ msgstr "Hledat VisualScript" msgid "Get %s" msgstr "Přijmi %d" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "Chybí jméno balíčku." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "Jméno balíčku musí být neprázdné." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "Znak '%s' není povolen v názvu balíčku Android aplikace." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "Číslice nemůže být prvním znakem segmentu balíčku." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "Znak '%s' nemůže být prvním znakem segmentu balíčku." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "Balíček musí mít alespoň jeden '.' oddělovač." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "Vyberte zařízení ze seznamu" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting APK..." msgstr "Exportování všeho" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Uninstalling..." msgstr "Odinstalovat" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Installing to device, please wait..." msgstr "Načítání, prosím čekejte..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not install to device: %s" msgstr "Nelze spustit podproces!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Running on device..." msgstr "Spouštím skript..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not execute on device." msgstr "Nelze vytvořit složku." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "Nelze najít nástroj 'apksigner'." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -13247,66 +13377,66 @@ msgstr "" "Šablona sestavení Androidu není pro projekt nainstalována. Nainstalujte jej " "z nabídky Projekt." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" "Úložiště klíčů k ladění není nakonfigurováno v Nastavení editoru nebo v " "export profilu." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" "Úložiště klíčů pro vydání je nakonfigurováno nesprávně v profilu exportu." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "Je vyžadována platná cesta Android SDK v Nastavení editoru." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "Neplatná cesta k Android SDK v Nastavení editoru." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "Chybí složka \"platform-tools\"!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "Nelze najít příkaz adb z nástrojů platformy Android SDK." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "Zkontrolujte ve složce Android SDK uvedené v Nastavení editoru." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "Chybí složka \"build-tools\"!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "Nelze najít apksigner, nástrojů Android SDK." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "Neplatný veřejný klíč pro rozšíření APK." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "Neplatné jméno balíčku:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" @@ -13314,40 +13444,25 @@ msgstr "" "Neplatný modul \"GodotPaymentV3\" v nastavení projektu \"Android / moduly" "\" (změněno v Godot 3.2.2).\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" "Chcete-li používat doplňky, musí být povoleno \"použít vlastní build\"." -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" -"\"Stupně svobody\" je platné pouze v případě, že \"Xr Mode\" je \"Oculus " -"Mobile VR\"." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" "\"Hand Tracking\" je platné pouze v případě, že \"Režim Xr\" má hodnotu " "\"Oculus Mobile VR\"." -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" -"\"Focus Awareness\" je platné pouze v případě, že \"Režim Xr\" má hodnotu " -"\"Oculus Mobile VR\"." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" "\"Export AAB\" je validní pouze v případě, že je povolena možnost \"Použít " "vlastní sestavu\"." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13355,57 +13470,56 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Signing release %s..." msgstr "" "Skenování souborů,\n" "Prosím, čekejte..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not find keystore, unable to export." msgstr "Nelze otevřít šablonu pro export:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Verifying %s..." msgstr "Přidávám %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" -msgstr "Exportování všeho" +msgstr "Export pro systém Android" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "Neplatné jméno souboru! Android App Bundle vyžaduje příponu *.aab." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "Rozšíření APK není kompatibilní s Android App Bundle." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "Neplatné jméno souboru! Android APK vyžaduje příponu *.apk." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." @@ -13413,7 +13527,7 @@ msgstr "" "Pokus o sestavení z vlastní šablony, ale neexistují pro ni žádné informace o " "verzi. Přeinstalujte jej z nabídky \"Projekt\"." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13425,26 +13539,26 @@ msgstr "" " Verze Godot: %s\n" "Přeinstalujte šablonu pro sestavení systému Android z nabídky \"Projekt\"." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files to gradle project\n" msgstr "Nelze upravit project.godot v umístění projektu." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not write expansion package file!" msgstr "Nelze zapsat soubor:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "Buildování projektu pro Android (gradle)" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." @@ -13452,11 +13566,11 @@ msgstr "" "Buildování projektu pro Android se nezdařilo, zkontrolujte chybový výstup.\n" "Případně navštivte dokumentaci o build pro Android na docs.godotengine.org." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "Přesunout výstup" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." @@ -13464,24 +13578,24 @@ msgstr "" "Nelze kopírovat či přejmenovat exportovaný soubor, zkontrolujte výstupy v " "adresáři projektu gradle." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "Animace nenalezena: '%s'" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Creating APK..." msgstr "Vytvářím kontury..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" "Could not find template APK to export:\n" "%s" msgstr "Nelze otevřít šablonu pro export:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13489,21 +13603,21 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Adding files..." msgstr "Přidávám %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files" msgstr "Nelze zapsat soubor:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "Zarovnávání APK..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -14029,6 +14143,14 @@ msgstr "" "NavigationMeshInstance musí být dítětem nebo vnoučetem uzlu Navigation. " "Poskytuje pouze data pro navigaci." +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14352,6 +14474,14 @@ msgstr "Je nutné použít platnou příponu." msgid "Enable grid minimap." msgstr "Povolit minimapu mřížky." +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14406,6 +14536,10 @@ msgid "Viewport size must be greater than 0 to render anything." msgstr "" "Velikost pohledu musí být větší než 0, aby bylo možné cokoliv renderovat." +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " @@ -14459,6 +14593,41 @@ msgstr "Přiřazeno uniformu." msgid "Constants cannot be modified." msgstr "Konstanty není možné upravovat." +#~ msgid "Make Rest Pose (From Bones)" +#~ msgstr "Vytvořit klidovou pózu (z kostí)" + +#~ msgid "Bottom" +#~ msgstr "Dolní" + +#~ msgid "Left" +#~ msgstr "Levý" + +#~ msgid "Right" +#~ msgstr "Pravý" + +#~ msgid "Front" +#~ msgstr "Přední" + +#~ msgid "Rear" +#~ msgstr "Zadní" + +#~ msgid "Nameless gizmo" +#~ msgstr "Gizmo beze jména" + +#~ msgid "" +#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile " +#~ "VR\"." +#~ msgstr "" +#~ "\"Stupně svobody\" je platné pouze v případě, že \"Xr Mode\" je \"Oculus " +#~ "Mobile VR\"." + +#~ msgid "" +#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" +#~ "\"." +#~ msgstr "" +#~ "\"Focus Awareness\" je platné pouze v případě, že \"Režim Xr\" má hodnotu " +#~ "\"Oculus Mobile VR\"." + #~ msgid "Package Contents:" #~ msgstr "Obsah balíčku:" diff --git a/editor/translations/da.po b/editor/translations/da.po index 2ab69b5f05..008f3b947c 100644 --- a/editor/translations/da.po +++ b/editor/translations/da.po @@ -1078,7 +1078,7 @@ msgstr "" msgid "Dependencies" msgstr "Afhængigheder" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Ressource" @@ -1757,13 +1757,13 @@ msgstr "" "Aktivér 'Import Pvrtc' i Projektindstillingerne, eller deaktivér 'Driver " "Fallback Aktiveret'." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "Brugerdefineret debug skabelonfil ikke fundet." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2171,7 +2171,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "(Gen)Importér Aktiver" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "Top" @@ -2685,6 +2685,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "Nuværende scene er ikke gemt. Åbn alligevel?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "Fortryd" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "Annuller Fortyd" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "Kan ikke genindlæse en scene, der aldrig blev gemt." @@ -3383,6 +3409,11 @@ msgid "Merge With Existing" msgstr "Flet Med Eksisterende" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Anim Skift Transformering" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "Åben & Kør et Script" @@ -3635,6 +3666,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "" @@ -5847,6 +5882,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "Vælg værktøj" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Grupper" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6799,7 +6846,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7407,6 +7458,16 @@ msgstr "Indsæt Punkt" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "Anim Skift Transformering" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Vælg Node" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7943,11 +8004,12 @@ msgid "Skeleton2D" msgstr "Singleton" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "Indlæs Default" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" +msgid "Overwrite Rest Pose" msgstr "" #: editor/plugins/skeleton_editor_plugin.cpp @@ -7978,6 +8040,61 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Orthogonal" +msgstr "Højre knap." + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -8093,42 +8210,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -8395,6 +8492,11 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "Rediger Poly" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy msgid "Settings..." @@ -8461,7 +8563,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -12655,6 +12757,15 @@ msgstr "Fjern Kurve Punktets Position" msgid "Set Portal Point Position" msgstr "Fjern Kurve Punktets Position" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr "Fjern Signal" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12952,6 +13063,11 @@ msgstr "Generering af lightmaps" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "All selection" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -13456,166 +13572,155 @@ msgstr "Fjern VisualScript Node" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "Vælg enhed fra listen" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting APK..." msgstr "Eksporter" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Uninstalling..." msgstr "Afinstaller" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Installing to device, please wait..." msgstr "Henter spejle, vent venligst ..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not install to device: %s" msgstr "Kunne ikke starte underproces!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Running on device..." msgstr "Kører Brugerdefineret Script..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not execute on device." msgstr "Kunne ikke oprette mappe." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Invalid package name:" msgstr "Ugyldigt navn." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13623,63 +13728,63 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Signing release %s..." msgstr "" "Scanner Filer,\n" "Vent Venligst..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not find keystore, unable to export." msgstr "Kan ikke åbne skabelon til eksport:\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Verifying %s..." msgstr "Tester" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting for Android" msgstr "Eksporter" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13687,58 +13792,58 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not write expansion package file!" msgstr "Kunne ikke skrive til fil:\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "Animations Længde (i sekunder)." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Creating APK..." msgstr "Forbinder..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" "Could not find template APK to export:\n" "%s" msgstr "Kan ikke åbne skabelon til eksport:\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13746,21 +13851,21 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Adding files..." msgstr "Filtrer filer..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files" msgstr "Kunne ikke skrive til fil:\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -14273,6 +14378,14 @@ msgstr "" "NavigationMeshInstance skal være et barn eller barnebarn til en Navigation " "node. Det giver kun navigationsdata." +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14575,6 +14688,14 @@ msgstr "Du skal bruge en gyldig udvidelse." msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp #, fuzzy msgid "" @@ -14623,6 +14744,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/de.po b/editor/translations/de.po index 6d57f3dcad..b0ca136093 100644 --- a/editor/translations/de.po +++ b/editor/translations/de.po @@ -71,12 +71,13 @@ # Stephan Kerbl <stephankerbl@gmail.com>, 2021. # Philipp Wabnitz <philipp.wabnitz@s2011.tu-chemnitz.de>, 2021. # jmih03 <joerni@mail.de>, 2021. +# Dominik Moos <dominik.moos@protonmail.com>, 2021. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2021-08-06 06:47+0000\n" -"Last-Translator: So Wieso <sowieso@dukun.de>\n" +"PO-Revision-Date: 2021-08-27 08:25+0000\n" +"Last-Translator: Dominik Moos <dominik.moos@protonmail.com>\n" "Language-Team: German <https://hosted.weblate.org/projects/godot-engine/" "godot/de/>\n" "Language: de\n" @@ -84,7 +85,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.8-dev\n" +"X-Generator: Weblate 4.8.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -433,13 +434,11 @@ msgstr "Einfügen" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "node '%s'" -msgstr "‚%s‘ kann nicht geöffnet werden." +msgstr "Node ‚%s‘" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "animation" msgstr "Animation" @@ -449,9 +448,8 @@ msgstr "AnimationPlayer kann sich nicht selbst animieren, nur andere Objekte." #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "property '%s'" -msgstr "Eigenschaft ‚%s‘ existiert nicht." +msgstr "Eigenschaft ‚%s‘" #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -1092,7 +1090,7 @@ msgstr "" msgid "Dependencies" msgstr "Abhängigkeiten" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Ressource" @@ -1756,13 +1754,13 @@ msgstr "" "Bitte ‚Import Pvrtc‘ in den Projekteinstellungen aktivieren oder ‚Driver " "Fallback Enabled‘ ausschalten." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "Selbst konfigurierte Debug-Exportvorlage nicht gefunden." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -1942,7 +1940,7 @@ msgstr "Als aktuell auswählen" #: editor/editor_feature_profile.cpp editor/editor_node.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp msgid "Import" -msgstr "Import" +msgstr "Importieren" #: editor/editor_feature_profile.cpp editor/project_export.cpp msgid "Export" @@ -2149,7 +2147,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "Importiere Nutzerinhalte erneut" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "Oben" @@ -2386,6 +2384,9 @@ msgid "" "Update Continuously is enabled, which can increase power usage. Click to " "disable it." msgstr "" +"Dreht sich wenn das Editorfenster neu gezeichnet wird.\n" +"Fortlaufendes Aktualisieren ist aktiviert, was den Energieverbrauch erhöht. " +"Zum Deaktivieren klicken." #: editor/editor_node.cpp msgid "Spins when the editor window redraws." @@ -2664,6 +2665,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "Die aktuelle Szene ist nicht gespeichert. Trotzdem öffnen?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "Rückgängig machen" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "Wiederherstellen" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "" "Szene kann nicht neu geladen werden, wenn sie vorher nicht gespeichert wurde." @@ -3361,6 +3388,11 @@ msgid "Merge With Existing" msgstr "Mit existierendem vereinen" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Transformation bearbeiten" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "Skript öffnen und ausführen" @@ -3395,9 +3427,8 @@ msgid "Select" msgstr "Auswählen" #: editor/editor_node.cpp -#, fuzzy msgid "Select Current" -msgstr "Aktuelles auswählen" +msgstr "Aktuelle auswählen" #: editor/editor_node.cpp msgid "Open 2D Editor" @@ -3620,6 +3651,10 @@ msgstr "" "Die ausgewählte Ressource (%s) stimmt mit keinem erwarteten Typ dieser " "Eigenschaft (%s) überein." +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "Einzigartig machen" @@ -3912,14 +3947,12 @@ msgid "Download from:" msgstr "Herunterladen von:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Open in Web Browser" -msgstr "Im Browser ausführen" +msgstr "In Web-Browser öffnen" #: editor/export_template_manager.cpp -#, fuzzy msgid "Copy Mirror URL" -msgstr "Fehlermeldung kopieren" +msgstr "Mirror-URL kopieren" #: editor/export_template_manager.cpp msgid "Download and Install" @@ -5730,6 +5763,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "CanvasItem „%s“ zu (%d, d%) verschieben" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "Sperren ausgewählt" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Gruppe" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6589,7 +6634,6 @@ msgid "Create Simplified Convex Collision Sibling" msgstr "Vereinfachtes konvexes Kollisionsnachbarelement erzeugen" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "" "Creates a simplified convex collision shape.\n" "This is similar to single collision shape, but can result in a simpler " @@ -6604,7 +6648,6 @@ msgid "Create Multiple Convex Collision Siblings" msgstr "Mehrere konvexe Kollisionsunterelemente erzeugen" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "" "Creates a polygon-based collision shape.\n" "This is a performance middle-ground between a single convex collision and a " @@ -6679,7 +6722,13 @@ msgid "Remove Selected Item" msgstr "Ausgewähltes Element entfernen" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +#, fuzzy +msgid "Import from Scene (Ignore Transforms)" +msgstr "Aus Szene importieren" + +#: editor/plugins/mesh_library_editor_plugin.cpp +#, fuzzy +msgid "Import from Scene (Apply Transforms)" msgstr "Aus Szene importieren" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7273,6 +7322,16 @@ msgstr "Generiere Punkte" msgid "Flip Portal" msgstr "Portal umdrehen" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "Transform leeren" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Erzeuge Node" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7779,12 +7838,14 @@ msgid "Skeleton2D" msgstr "Skelett2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "Ruhe-Pose erstellen (aus Knochen)" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "Kochen in Ruhe-Pose setzen" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "Kochen in Ruhe-Pose setzen" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "Überschreiben" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7811,6 +7872,71 @@ msgid "Perspective" msgstr "Perspektivisch" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Orthogonal" +msgstr "Senkrecht" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Perspective" +msgstr "Perspektivisch" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Orthogonal" +msgstr "Senkrecht" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "Perspektivisch" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Left Orthogonal" +msgstr "Senkrecht" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Perspective" +msgstr "Perspektivisch" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Orthogonal" +msgstr "Senkrecht" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Orthogonal" +msgstr "Senkrecht" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Perspective" +msgstr "Perspektivisch" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Orthogonal" +msgstr "Senkrecht" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Perspective" +msgstr "Perspektivisch" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "Transformation abgebrochen." @@ -7918,42 +8044,22 @@ msgid "Bottom View." msgstr "Sicht von unten." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "Unten" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "Sicht von links." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "Links" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "Sicht von Rechts." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "Rechts" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "Sicht von vorne." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "Vorne" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "Sicht von hinten." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "Hinten" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "Transform auf Sicht ausrichten" @@ -8228,6 +8334,11 @@ msgid "View Portal Culling" msgstr "Portal-Culling anzeigen" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "Portal-Culling anzeigen" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "Einstellungen…" @@ -8293,8 +8404,9 @@ msgid "Post" msgstr "Nachher" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" -msgstr "Namenloser Manipulator" +#, fuzzy +msgid "Unnamed Gizmo" +msgstr "Unbenanntes Projekt" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Mesh2D" @@ -8620,7 +8732,7 @@ msgstr "Am Importieren von Elementen {n}/{n}" #: editor/plugins/theme_editor_plugin.cpp msgid "Updating the editor" -msgstr "Den Editor aktualisieren?" +msgstr "Am Aktualisieren des Editors" #: editor/plugins/theme_editor_plugin.cpp msgid "Finalizing" @@ -8753,6 +8865,9 @@ msgid "" "Select a theme type from the list to edit its items.\n" "You can add a custom type or import a type with its items from another theme." msgstr "" +"Einen Thementyp aus der Liste auswählen um dessen Elementen zu bearbeiten.\n" +"Weiter kann ein eigener Typ hinzugefügt oder ein Typ inklusive seiner " +"Elemente aus einem andern Thema importiert werden." #: editor/plugins/theme_editor_plugin.cpp msgid "Remove All Color Items" @@ -8783,6 +8898,9 @@ msgid "" "This theme type is empty.\n" "Add more items to it manually or by importing from another theme." msgstr "" +"Dieser Thementyp ist leer.\n" +"Zusätzliche Elemente können manuell oder durch Importieren aus einem andern " +"Thema hinzugefügt werden." #: editor/plugins/theme_editor_plugin.cpp msgid "Add Color Item" @@ -9715,7 +9833,7 @@ msgstr "UniformRef-Name geändert" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vertex" -msgstr "Eckpunkt" +msgstr "Vertex" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Fragment" @@ -11001,7 +11119,7 @@ msgstr "Projekt ausführen" #: editor/project_manager.cpp msgid "Scan" -msgstr "Scannen" +msgstr "Durchsuchen" #: editor/project_manager.cpp msgid "Scan Projects" @@ -11297,7 +11415,7 @@ msgstr "Ressourcen-Umleitung entfernen" #: editor/project_settings_editor.cpp msgid "Remove Resource Remap Option" -msgstr "Ressourcen-Umleitungsoption entfernen" +msgstr "Ressourcen-Neuzuordungsoption entfernen" #: editor/project_settings_editor.cpp msgid "Changed Locale Filter" @@ -12426,14 +12544,22 @@ msgid "Change Ray Shape Length" msgstr "Ändere Länge der Strahlenform" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Set Room Point Position" -msgstr "Kurvenpunktposition festlegen" +msgstr "Room-Point-Position festlegen" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Set Portal Point Position" -msgstr "Kurvenpunktposition festlegen" +msgstr "Portal-Point-Position festlegen" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Radius" +msgstr "Zylinderformradius ändern" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr "Kurven-Eingangsposition festlegen" #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" @@ -12717,6 +12843,11 @@ msgstr "Lightmaps auftragen" msgid "Class name can't be a reserved keyword" msgstr "Der Klassenname kann nicht ein reserviertes Schlüsselwort sein" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "Auswahl füllen" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "Ende des inneren Exception-Stack-Traces" @@ -13205,68 +13336,68 @@ msgstr "VisualScript suchen" msgid "Get %s" msgstr "%s abrufen" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "Paketname fehlt." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "Paketsegmente dürfen keine Länge gleich Null haben." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "Das Zeichen ‚%s‘ ist in Android-Anwendungspaketnamen nicht gestattet." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "Eine Ziffer kann nicht das erste Zeichen eines Paketsegments sein." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" "Das Zeichen ‚%s‘ kann nicht das erste Zeichen in einem Paketsegment sein." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "Das Paket muss mindestens einen Punkt-Unterteiler ‚.‘ haben." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "Gerät aus Liste auswählen" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "Läuft auf %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting APK..." msgstr "APK exportieren…" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Uninstalling..." msgstr "Am Deinstallieren…" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Installing to device, please wait..." msgstr "Am Installieren auf Gerät, bitte warten..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" msgstr "Konnte Installation auf Gerät nicht durchführen: %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "Auf Gerät ausführen…" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not execute on device." msgstr "Ließ sich nicht auf Gerät ausführen." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "Das ‚apksigner‘-Hilfswerkzeug konnte nicht gefunden werden." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -13274,7 +13405,7 @@ msgstr "" "Es wurde keine Android-Buildvorlage für dieses Projekt installiert. Es kann " "im Projektmenü installiert werden." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." @@ -13282,13 +13413,13 @@ msgstr "" "Die drei Einstellungen Debug Keystore, Debug User und Debug Password müssen " "entweder alle angegeben, oder alle nicht angegeben sein." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" "Debug-Keystore wurde weder in den Editoreinstellungen noch in der Vorlage " "konfiguriert." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." @@ -13296,54 +13427,54 @@ msgstr "" "Die drei Einstellungen Release Keystore, Release User und Release Password " "müssen entweder alle angegeben, oder alle nicht angegeben sein." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" "Release-Keystore wurde nicht korrekt konfiguriert in den Exporteinstellungen." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" "Es wird ein gültiger Android-SDK-Pfad in den Editoreinstellungen benötigt." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "Ungültiger Android-SDK-Pfad in den Editoreinstellungen." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "‚platform-tools‘-Verzeichnis fehlt!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" "‚adb‘-Anwendung der Android-SDK-Platform-Tools konnte nicht gefunden werden." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" "Schauen Sie im Android-SDK-Verzeichnis das in den Editoreinstellungen " "angegeben wurde nach." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "‚build-tools‘-Verzeichnis fehlt!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" "‚apksigner‘-Anwendung der Android-SDK-Build-Tools konnte nicht gefunden " "werden." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "Ungültiger öffentlicher Schlüssel für APK-Erweiterung." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "Ungültiger Paketname:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" @@ -13351,38 +13482,23 @@ msgstr "" "Ungültiges „GodotPaymentV3“-Modul eingebunden in den „android/modules“-" "Projekteinstellungen (wurde in Godot 3.2.2 geändert).\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" "„Use Custom Build“ muss aktiviert werden um die Plugins nutzen zu können." -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" -"„Degrees Of Freedom“ ist nur gültig wenn „Xr Mode“ als „Occulus Mobile VR“ " -"gesetzt wurde." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" "„Hand Tracking“ ist nur gültig wenn „Xr Mode“ als „Occulus Mobile VR“ " "gesetzt wurde." -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" -"„Focus Awareness“ ist nur gültig wenn „Xr Mode“ als „Occulus Mobile VR“ " -"gesetzt wurde." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "„Export AAB“ ist nur gültig wenn „Use Custom Build“ aktiviert ist." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13393,54 +13509,54 @@ msgstr "" "Ist das Programm im Android SDK build-tools-Verzeichnis vorhanden?\n" "Das resultierende %s ist nicht signiert." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "Signiere Debug-Build %s…" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." msgstr "Signiere Release-Build %s…" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "Keystore konnte nicht gefunden werden, Export fehlgeschlagen." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "‚apksigner‘ gab Fehlercode #%d zurück" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." msgstr "Verifiziere %s…" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "‚apksigner‘-Verifizierung von %s fehlgeschlagen." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "Exportiere für Android" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" "Ungültiger Dateiname. Android App Bundles benötigen .aab als " "Dateinamenendung." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "APK-Expansion ist nicht kompatibel mit Android App Bundles." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" "Ungültiger Dateiname. Android APKs benötigen .apk als Dateinamenendung." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "Nicht unterstütztes Exportformat!\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." @@ -13449,7 +13565,7 @@ msgstr "" "existieren keine Versionsinformation für sie. Neuinstallation im ‚Projekt‘-" "Menü benötigt." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13461,26 +13577,26 @@ msgstr "" " Godot-Version: %s\n" "Bitte Android-Build-Vorlage im ‚Projekt‘-Menü neu installieren." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" "Kann res://android/build/res/*.xml Dateien nicht mit Projektnamen " "überschreiben" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "Konnte Projektdateien nicht als Gradle-Projekt exportieren\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "Konnte Expansion-Package-Datei nicht schreiben!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "Baue Android-Projekt (gradle)" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." @@ -13490,11 +13606,11 @@ msgstr "" "Alternativ befindet sich die Android-Build-Dokumentation auf docs." "godotengine.org." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "Verschiebe Ausgabe" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." @@ -13502,15 +13618,15 @@ msgstr "" "Exportdatei kann nicht kopiert und umbenannt werden. Fehlermeldungen sollten " "im Gradle Projektverzeichnis erscheinen." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package not found: %s" msgstr "Paket nicht gefunden: %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." msgstr "Erzeuge APK…" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" @@ -13518,7 +13634,7 @@ msgstr "" "Konnte keine APK-Vorlage zum Exportieren finden:\n" "%s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13530,19 +13646,19 @@ msgstr "" "Es muss entweder eine Exportvorlage mit den allen benötigten Bibliotheken " "gebaut werden oder die angegebenen Architekturen müssen abgewählt werden." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Adding files..." msgstr "Füge Dateien hinzu…" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files" msgstr "Projektdateien konnten nicht exportiert werden" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "Richte APK aus..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "Temporäres unausgerichtetes APK konnte nicht entpackt werden." @@ -14093,6 +14209,14 @@ msgstr "" "NavigationMeshInstance muss ein Unterobjekt erster oder zweiter Ordnung " "eines Navigation-Nodes sein. Es liefert nur Navigationsinformationen." +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14237,36 +14361,46 @@ msgid "" "RoomList path is invalid.\n" "Please check the RoomList branch has been assigned in the RoomManager." msgstr "" +"RoomList-Pfad ist ungültig.\n" +"Wurde der RoomList-Zweig im RoomManager zugewiesen?" #: scene/3d/room_manager.cpp msgid "RoomList contains no Rooms, aborting." -msgstr "" +msgstr "RoomList einhält keine Rooms, breche ab." #: scene/3d/room_manager.cpp msgid "Misnamed nodes detected, check output log for details. Aborting." msgstr "" +"Falsch benannte Nodes entdeckt, siehe Log-Ausgabe für Details. Breche ab." #: scene/3d/room_manager.cpp msgid "Portal link room not found, check output log for details." -msgstr "" +msgstr "Portal-Link-Room nicht gefunden, siehe Log-Ausgabe für Details." #: scene/3d/room_manager.cpp msgid "" "Portal autolink failed, check output log for details.\n" "Check the portal is facing outwards from the source room." msgstr "" +"Portal-Autolink fehlgeschlagen, siehe Log-Ausgabe für Details.\n" +"Zeigt das Portal nach außen vom Quellraum ausgesehen?" #: scene/3d/room_manager.cpp msgid "" "Room overlap detected, cameras may work incorrectly in overlapping area.\n" "Check output log for details." msgstr "" +"Raumüberlappung festgestellt, Kameras werden im Überlappungsbereich " +"wahrscheinlich nicht richtig funktionieren.\n" +"Siehe Log-Ausgabe für Details." #: scene/3d/room_manager.cpp msgid "" "Error calculating room bounds.\n" "Ensure all rooms contain geometry or manual bounds." msgstr "" +"Fehler beim Berechnen der Raumbegrenzungen.\n" +"Enthalten alle Räume Geometrie oder manuelle Begrenzungen?" #: scene/3d/soft_body.cpp msgid "This body will be ignored until you set a mesh." @@ -14440,6 +14574,14 @@ msgstr "Eine gültige Datei-Endung muss verwendet werden." msgid "Enable grid minimap." msgstr "Gitterübersichtskarte aktivieren." +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14497,6 +14639,10 @@ msgid "Viewport size must be greater than 0 to render anything." msgstr "" "Die Größe des Viewports muss größer als 0 sein um etwas rendern zu können." +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " @@ -14555,6 +14701,41 @@ msgstr "Zuweisung an Uniform." msgid "Constants cannot be modified." msgstr "Konstanten können nicht verändert werden." +#~ msgid "Make Rest Pose (From Bones)" +#~ msgstr "Ruhe-Pose erstellen (aus Knochen)" + +#~ msgid "Bottom" +#~ msgstr "Unten" + +#~ msgid "Left" +#~ msgstr "Links" + +#~ msgid "Right" +#~ msgstr "Rechts" + +#~ msgid "Front" +#~ msgstr "Vorne" + +#~ msgid "Rear" +#~ msgstr "Hinten" + +#~ msgid "Nameless gizmo" +#~ msgstr "Namenloser Manipulator" + +#~ msgid "" +#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile " +#~ "VR\"." +#~ msgstr "" +#~ "„Degrees Of Freedom“ ist nur gültig wenn „Xr Mode“ als „Occulus Mobile " +#~ "VR“ gesetzt wurde." + +#~ msgid "" +#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" +#~ "\"." +#~ msgstr "" +#~ "„Focus Awareness“ ist nur gültig wenn „Xr Mode“ als „Occulus Mobile VR“ " +#~ "gesetzt wurde." + #~ msgid "Package Contents:" #~ msgstr "Paketinhalte:" @@ -16714,9 +16895,6 @@ msgstr "Konstanten können nicht verändert werden." #~ msgid "Images:" #~ msgstr "Bilder:" -#~ msgid "Group" -#~ msgstr "Gruppe" - #~ msgid "Sample Conversion Mode: (.wav files):" #~ msgstr "Audio-Umwandlungs-Modus: (.wav-Dateien):" diff --git a/editor/translations/editor.pot b/editor/translations/editor.pot index 0f3b125484..47aa1d3a22 100644 --- a/editor/translations/editor.pot +++ b/editor/translations/editor.pot @@ -987,7 +987,7 @@ msgstr "" msgid "Dependencies" msgstr "" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "" @@ -1616,13 +1616,13 @@ msgid "" "Enabled'." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -1992,7 +1992,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "" @@ -2470,6 +2470,30 @@ msgid "Current scene not saved. Open anyway?" msgstr "" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Undo: %s" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Redo: %s" +msgstr "" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "" @@ -3093,6 +3117,10 @@ msgid "Merge With Existing" msgstr "" #: editor/editor_node.cpp +msgid "Apply MeshInstance Transforms" +msgstr "" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "" @@ -3333,6 +3361,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "" @@ -5373,6 +5405,16 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Locked" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Grouped" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6271,7 +6313,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -6855,6 +6901,14 @@ msgstr "" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Occluder Set Transform" +msgstr "" + +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Center Node" +msgstr "" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7349,11 +7403,11 @@ msgid "Skeleton2D" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" +msgid "Reset to Rest Pose" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" +msgid "Overwrite Rest Pose" msgstr "" #: editor/plugins/skeleton_editor_plugin.cpp @@ -7381,6 +7435,60 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7488,42 +7596,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -7785,6 +7873,10 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Occlusion Culling" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "" @@ -7850,7 +7942,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -11750,6 +11842,14 @@ msgstr "" msgid "Set Portal Point Position" msgstr "" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Position" +msgstr "" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12030,6 +12130,10 @@ msgstr "" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Build Solution" +msgstr "" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -12496,159 +12600,148 @@ msgstr "" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Uninstalling..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Installing to device, please wait..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not execute on device." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -12656,57 +12749,57 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -12714,54 +12807,54 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package not found: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -12769,19 +12862,19 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Adding files..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13231,6 +13324,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -13520,6 +13621,14 @@ msgstr "" msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13560,6 +13669,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/el.po b/editor/translations/el.po index 93b5941f64..ea1c91f4b5 100644 --- a/editor/translations/el.po +++ b/editor/translations/el.po @@ -1041,7 +1041,7 @@ msgstr "" msgid "Dependencies" msgstr "Εξαρτήσεις" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Πόρος" @@ -1709,13 +1709,13 @@ msgstr "" "Ενεργοποιήστε το 'Εισαγωγή PVRTC' στις Ρυθμίσεις Έργου, ή απενεργοποιήστε το " "'Ενεργοποίηση εναλλαγής οδηγού'." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "Δεν βρέθηκε προσαρμοσμένο πακέτο αποσφαλμάτωσης." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2099,7 +2099,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "(Επαν)εισαγωγή" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "Κορυφή" @@ -2614,6 +2614,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "Η τρέχουσα σκηνή δεν έχει αποθηκευτεί. Συνέχεια με το άνοιγμα;" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "Αναίρεση" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "Ακύρωση αναίρεσης" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "" "Δεν είναι δυνατό να φορτώσετε εκ νέου μια σκηνή που δεν αποθηκεύτηκε ποτέ." @@ -3319,6 +3345,11 @@ msgid "Merge With Existing" msgstr "Συγχώνευση με υπάρχων" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Αλλαγή Μετασχηματισμού Κίνησης" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "Άνοιξε & Τρέξε μία δέσμη ενεργειών" @@ -3575,6 +3606,10 @@ msgstr "" "Ο επιλεγμένος πόρος (%s) δεν ταιριάζει σε κανέναν αναμενόμενο τύπο γι'αυτήν " "την ιδιότητα (%s)." +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "Κάνε μοναδικό" @@ -5722,6 +5757,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "Μετακίνηση CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "Κλείδωσε το Επιλεγμένο" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Ομάδες" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6678,7 +6725,13 @@ msgid "Remove Selected Item" msgstr "Αφαίρεση του επιλεγμένου στοιοχείου" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +#, fuzzy +msgid "Import from Scene (Ignore Transforms)" +msgstr "Εισαγωγή από την σκηνή" + +#: editor/plugins/mesh_library_editor_plugin.cpp +#, fuzzy +msgid "Import from Scene (Apply Transforms)" msgstr "Εισαγωγή από την σκηνή" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7283,6 +7336,16 @@ msgstr "Αριθμός δημιουργημένων σημείων:" msgid "Flip Portal" msgstr "Αναστροφή Οριζόντια" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "Εκκαθάριση Μετασχηματισμού" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Δημιουργία κόμβου" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "Το AnimationTree δεν έχει διαδρομή σε AnimationPlayer" @@ -7792,12 +7855,14 @@ msgid "Skeleton2D" msgstr "Skeleton2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "Κάνε Στάση Αδράνειας (Από Οστά)" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "Θέσε Οστά σε Στάση Αδράνειας" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "Θέσε Οστά σε Στάση Αδράνειας" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "Αντικατάσταση" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7824,6 +7889,71 @@ msgid "Perspective" msgstr "Προοπτική" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Orthogonal" +msgstr "Αξονομετρική" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Perspective" +msgstr "Προοπτική" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Orthogonal" +msgstr "Αξονομετρική" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "Προοπτική" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Left Orthogonal" +msgstr "Αξονομετρική" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Perspective" +msgstr "Προοπτική" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Orthogonal" +msgstr "Αξονομετρική" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Orthogonal" +msgstr "Αξονομετρική" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Perspective" +msgstr "Προοπτική" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Orthogonal" +msgstr "Αξονομετρική" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Perspective" +msgstr "Προοπτική" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "Ο μετασχηματισμός ματαιώθηκε." @@ -7943,42 +8073,22 @@ msgid "Bottom View." msgstr "Κάτω όψη." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "Κάτω" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "Αριστερή όψη." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "Αριστερά" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "Δεξιά όψη." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "Δεξιά" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "Εμπρόσθια όψη." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "Μπροστά" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "Πίσω όψη." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "Πίσω" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "Στοίχιση Μετασχηματισμού με Προβολή" @@ -8254,6 +8364,11 @@ msgid "View Portal Culling" msgstr "Ρυθμίσεις οπτικής γωνίας" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "Ρυθμίσεις οπτικής γωνίας" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "Ρυθμίσεις..." @@ -8319,8 +8434,9 @@ msgid "Post" msgstr "Μετά" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" -msgstr "Ανώνυμο μαραφέτι" +#, fuzzy +msgid "Unnamed Gizmo" +msgstr "Ανώνυμο έργο" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Mesh2D" @@ -12528,6 +12644,16 @@ msgstr "Ορισμός θέσης σημείου καμπύλης" msgid "Set Portal Point Position" msgstr "Ορισμός θέσης σημείου καμπύλης" +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Radius" +msgstr "Αλλαγή Ακτίνας Σχήματος Κυλίνδρου" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr "Ορισμός θέσης εισόδου καμπύλης" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "Αλλαγή Ακτίνας Κυλίνδρου" @@ -12818,6 +12944,11 @@ msgstr "Τοποθέτηση φώτων:" msgid "Class name can't be a reserved keyword" msgstr "Το όνομα της κλάσης δεν μπορεί να είναι λέξη-κλειδί" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "Γέμισμα Επιλογής" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "Τέλος ιχνηλάτησης στοίβας εσωτερικής εξαίρεσης" @@ -13309,77 +13440,77 @@ msgstr "Αναζήτηση VisualScript" msgid "Get %s" msgstr "Διάβασε %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "Το όνομα του πακέτου λείπει." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "Τα τμήματα του πακέτου πρέπει να έχουν μη μηδενικό μήκος." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" "Ο χαρακτήρας «%s» απαγορεύεται στο όνομα πακέτου των εφαρμογών Android." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" "Ένα ψηφίο δεν μπορεί να είναι ο πρώτος χαρακτήρας σε ένα τμήμα πακέτου." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" "Ο χαρακτήρας '%s' δεν μπορεί να είναι ο πρώτος χαρακτήρας σε ένα τμήμα " "πακέτου." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "Το πακέτο πρέπει να έχει τουλάχιστον έναν '.' διαχωριστή." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "Επιλέξτε συσκευή από την λίστα" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting APK..." msgstr "Εξαγωγή Όλων" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Uninstalling..." msgstr "Απεγκατάσταση" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Installing to device, please wait..." msgstr "Ανάκτηση δεδοένων κατοπτρισμού, παρακαλώ περιμένετε..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not install to device: %s" msgstr "Δεν ήταν δυνατή η δημιουργία στιγμιοτύπου της σκηνής!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Running on device..." msgstr "Εκτέλεση Προσαρμοσμένης Δέσμης Ενεργειών..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not execute on device." msgstr "Αδύνατη η δημιουργία φακέλου." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -13387,75 +13518,75 @@ msgstr "" "Λείπει το πρότυπο δόμησης Android από το έργο. Εγκαταστήστε το από το μενού " "«Έργο»." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" "Το «debug keystore» δεν έχει καθοριστεί στις Ρυθμίσεις Επεξεργαστή ή την " "διαμόρφωση." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" "Εσφαλμένη ρύθμιση αποθετηρίου κλειδιών διανομής στην διαμόρφωση εξαγωγής." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "A valid Android SDK path is required in Editor Settings." msgstr "" "Μη έγκυρη διαδρομή Android SDK για προσαρμοσμένη δόμηση στις Ρυθμίσεις " "Επεξεργαστή." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Invalid Android SDK path in Editor Settings." msgstr "" "Μη έγκυρη διαδρομή Android SDK για προσαρμοσμένη δόμηση στις Ρυθμίσεις " "Επεξεργαστή." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" "Μη έγκυρη διαδρομή Android SDK για προσαρμοσμένη δόμηση στις Ρυθμίσεις " "Επεξεργαστή." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "Μη έγκυρο δημόσιο κλειδί (public key) για επέκταση APK." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "Άκυρο όνομα πακέτου:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" @@ -13463,38 +13594,23 @@ msgstr "" "Εσφαλμένη λειτουργική μονάδα «GodotPaymentV3» στην ρύθμιση εργου «Android/" "Modules» (άλλαξε στην Godot 3.2.2).\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" "Η επιλογή «Use Custom Build» πρέπει να ενεργοποιηθεί για χρήση προσθέτων." -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" -"Το «Degrees Of Freedom» είναι έγκυρο μόνο όταν το «Xr Mode» είναι «Oculus " -"Mobile VR»." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" "Το «Hand Tracking» είναι έγκυρο μόνο όταν το «Xr Mode» είναι «Oculus Mobile " "VR»." -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" -"Το «Focus Awareness» είναι έγκυρο μόνο όταν το «Xr Mode» είναι «Oculus " -"Mobile VR»." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13502,57 +13618,57 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Signing release %s..." msgstr "" "Σάρωση αρχείων,\n" "Παρακαλώ περιμένετε..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not find keystore, unable to export." msgstr "Σφάλμα κατά το άνοιγμα προτύπου για εξαγωγή:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Verifying %s..." msgstr "Προσθήκη %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting for Android" msgstr "Εξαγωγή Όλων" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." @@ -13560,7 +13676,7 @@ msgstr "" "Δοκιμή δόμησης από προσαρμοσμένο πρότυπο δόμησης, αλλά δεν υπάρχουν " "πληροφορίες έκδοσης. Παρακαλούμε κάντε επανεγκατάσταση από το μενού «Έργο»." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13573,26 +13689,26 @@ msgstr "" "Παρακαλούμε να επανεγκαταστήσετε το πρότυπο δόμησης Android από το μενού " "«Έργο»." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files to gradle project\n" msgstr "Δεν βρέθηκε το project.godot στη διαδρομή του έργου." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not write expansion package file!" msgstr "Απέτυχε η εγγραφή σε αρχείο:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "Δόμηση Έργου Android (gradle)" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." @@ -13601,34 +13717,34 @@ msgstr "" "Εναλλακτικά, επισκεφτείτε τη σελίδα docs.godotengine.org για τεκμηρίωση " "δόμησης Android." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "Δεν βρέθηκε η κίνηση: «%s»" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Creating APK..." msgstr "Δημιουργία περιγραμμάτων..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" "Could not find template APK to export:\n" "%s" msgstr "Σφάλμα κατά το άνοιγμα προτύπου για εξαγωγή:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13636,21 +13752,21 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Adding files..." msgstr "Προσθήκη %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files" msgstr "Απέτυχε η εγγραφή σε αρχείο:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -14197,6 +14313,14 @@ msgstr "" "Ένας κόμβος τύπου στιγμιοτύπου πλέγματος πλοήγησης πρέπει να κληρονομεί έναν " "κόμβο τύπου πλοήγηση, διότι διαθέτει μόνο δεδομένα πλοήγησης." +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14525,6 +14649,14 @@ msgstr "Απαιτείται η χρήση έγκυρης επέκτασης." msgid "Enable grid minimap." msgstr "Ενεργοποίηση κουμπώματος" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14582,6 +14714,10 @@ msgstr "" "Το μέγεθος της οπτικής γωνίας πρέπει να είναι μεγαλύτερο του 0 για να γίνει " "απόδοση." +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " @@ -14633,6 +14769,41 @@ msgstr "Ανάθεση σε ενιαία μεταβλητή." msgid "Constants cannot be modified." msgstr "Οι σταθερές δεν μπορούν να τροποποιηθούν." +#~ msgid "Make Rest Pose (From Bones)" +#~ msgstr "Κάνε Στάση Αδράνειας (Από Οστά)" + +#~ msgid "Bottom" +#~ msgstr "Κάτω" + +#~ msgid "Left" +#~ msgstr "Αριστερά" + +#~ msgid "Right" +#~ msgstr "Δεξιά" + +#~ msgid "Front" +#~ msgstr "Μπροστά" + +#~ msgid "Rear" +#~ msgstr "Πίσω" + +#~ msgid "Nameless gizmo" +#~ msgstr "Ανώνυμο μαραφέτι" + +#~ msgid "" +#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile " +#~ "VR\"." +#~ msgstr "" +#~ "Το «Degrees Of Freedom» είναι έγκυρο μόνο όταν το «Xr Mode» είναι «Oculus " +#~ "Mobile VR»." + +#~ msgid "" +#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" +#~ "\"." +#~ msgstr "" +#~ "Το «Focus Awareness» είναι έγκυρο μόνο όταν το «Xr Mode» είναι «Oculus " +#~ "Mobile VR»." + #~ msgid "Package Contents:" #~ msgstr "Περιεχόμενα Πακέτου:" diff --git a/editor/translations/eo.po b/editor/translations/eo.po index 9f8c869bee..5987003cb7 100644 --- a/editor/translations/eo.po +++ b/editor/translations/eo.po @@ -17,7 +17,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2021-07-31 19:44+0000\n" +"PO-Revision-Date: 2021-08-14 19:04+0000\n" "Last-Translator: mourning20s <mourning20s@protonmail.com>\n" "Language-Team: Esperanto <https://hosted.weblate.org/projects/godot-engine/" "godot/eo/>\n" @@ -374,13 +374,12 @@ msgstr "Animado Enmetu" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp msgid "node '%s'" -msgstr "" +msgstr "nodo '%s'" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "animation" -msgstr "Animacio" +msgstr "animacio" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." @@ -388,9 +387,8 @@ msgstr "AnimationPlayer ne povas animi si mem, nur aliajn ludantojn." #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "property '%s'" -msgstr "Atributo" +msgstr "atributo" #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -601,7 +599,7 @@ msgstr "Iri al Antaŭa Paŝo" #: editor/animation_track_editor.cpp msgid "Apply Reset" -msgstr "" +msgstr "Almeti rekomencigon" #: editor/animation_track_editor.cpp msgid "Optimize Animation" @@ -620,9 +618,8 @@ msgid "Use Bezier Curves" msgstr "Uzu Bezier-kurbojn" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Create RESET Track(s)" -msgstr "Alglui trakojn" +msgstr "Krei RESET-trako(j)n" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" @@ -947,9 +944,8 @@ msgid "Edit..." msgstr "Redakti..." #: editor/connections_dialog.cpp -#, fuzzy msgid "Go to Method" -msgstr "Iru al metodo" +msgstr "Iri al metodo" #: editor/create_dialog.cpp msgid "Change %s Type" @@ -969,7 +965,7 @@ msgstr "Ne rezultoj por \"%s\"." #: editor/create_dialog.cpp editor/property_selector.cpp msgid "No description available for %s." -msgstr "" +msgstr "Ne priskribo disponeblas por %s." #: editor/create_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp @@ -1029,7 +1025,7 @@ msgstr "" msgid "Dependencies" msgstr "Dependecoj" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Rimedo" @@ -1069,17 +1065,16 @@ msgid "Owners Of:" msgstr "Proprietuloj de:" #: editor/dependency_editor.cpp -#, fuzzy msgid "" "Remove the selected files from the project? (Cannot be undone.)\n" "Depending on your filesystem configuration, the files will either be moved " "to the system trash or deleted permanently." msgstr "" -"Forigi selektajn dosierojn el la projekto? (ne malfaro)\n" -"Vi povas trovi la forigajn dosierojn en la sistema rubujo por restaŭri ilin." +"Forigi la elektitajn dosierojn el la projekto? (ne malfareblas)\n" +"Depende de la agordo de via dosiersistemo, la dosierojn aŭ movos al rubujo " +"de la sistemo aŭ forigos ĉiame." #: editor/dependency_editor.cpp -#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -1087,9 +1082,11 @@ msgid "" "Depending on your filesystem configuration, the files will either be moved " "to the system trash or deleted permanently." msgstr "" -"La forigotaj dosieroj bezonas por ke aliaj risurcoj funkciadi.\n" -"Forigu ilin iel? (ne malfaro)\n" -"Vi povas trovi la forigajn dosierojn en la sistema rubujo por restaŭri ilin." +"La forigotaj dosieroj estas bezoni de aliaj risurcoj por ke ili eblas " +"funkciadi.\n" +"Forigi ilin iel? (ne malfareblas)\n" +"Depende de la agordo de via dosiersistemo, la dosierojn aŭ movos al rubujo " +"de la sistemo aŭ forigos ĉiame." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1259,55 +1256,51 @@ msgid "Licenses" msgstr "Permesiloj" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Error opening asset file for \"%s\" (not in ZIP format)." -msgstr "Eraro dum malfermi pakaĵan dosieron (ne estas en ZIP-formo)." +msgstr "" +"Eraro dum malfermi pakaĵan dosieron por \"%s\" (ne estas de ZIP-formo)." #: editor/editor_asset_installer.cpp -#, fuzzy msgid "%s (already exists)" msgstr "%s (jam ekzistante)" #: editor/editor_asset_installer.cpp msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:" msgstr "" +"Enhavaĵoj de pakaĵo \"%s\" - %d dosiero(j) konfliktas kun via projekto:" #: editor/editor_asset_installer.cpp msgid "Contents of asset \"%s\" - No files conflict with your project:" -msgstr "" +msgstr "Enhavaĵoj de pakaĵo \"%s\" - Ne dosiero konfliktas kun via projekto:" #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" -msgstr "Maldensigas havaĵojn" +msgstr "Malkompaktigas havaĵojn" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "The following files failed extraction from asset \"%s\":" -msgstr "La jenaj dosieroj malplenumis malkompaktigi el la pakaĵo:" +msgstr "La jenajn dosierojn malsukcesis malkompaktigi el la pakaĵo \"%s\":" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "(and %s more files)" -msgstr "Kaj %s pli dosieroj." +msgstr "(kaj %s pli dosieroj)" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Asset \"%s\" installed successfully!" -msgstr "Pakaĵo instalis sukcese!" +msgstr "Pakaĵo \"%s\" instalis sukcese!" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Success!" -msgstr "Sukcese!" +msgstr "Sukceso!" #: editor/editor_asset_installer.cpp editor/editor_node.cpp msgid "Install" msgstr "Instali" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Asset Installer" -msgstr "Pakaĵa instalilo" +msgstr "Instalilo de pakaĵo" #: editor/editor_audio_buses.cpp msgid "Speakers" @@ -1334,9 +1327,8 @@ msgid "Toggle Audio Bus Mute" msgstr "Baskuli la muta reĝimo de la aŭdia buso" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Toggle Audio Bus Bypass Effects" -msgstr "Baskuli preterpasajn efektojn de aŭdia buso" +msgstr "Baskuli la preterpasajn efektojn de aŭdbuso" #: editor/editor_audio_buses.cpp msgid "Select Audio Bus Send" @@ -1371,9 +1363,8 @@ msgid "Bypass" msgstr "Preterpase" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Bus Options" -msgstr "Busaj agordoj" +msgstr "Agordoj de buso" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp #: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp @@ -1539,13 +1530,13 @@ msgid "Can't add autoload:" msgstr "Ne aldoneblas aŭtoŝargon:" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "%s is an invalid path. File does not exist." -msgstr "Dosiero ne ekzistas." +msgstr "%s estas invalida dosierindiko. Dosiero ne ekzistas." #: editor/editor_autoload_settings.cpp msgid "%s is an invalid path. Not in resource path (res://)." msgstr "" +"%s estas invalida dosierindiko. Ne estas ĉe risurca dosierindiko (res://)." #: editor/editor_autoload_settings.cpp msgid "Add AutoLoad" @@ -1569,9 +1560,8 @@ msgid "Name" msgstr "Nomo" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Global Variable" -msgstr "Renomi variablon" +msgstr "Malloka variablo" #: editor/editor_data.cpp msgid "Paste Params" @@ -1695,22 +1685,21 @@ msgstr "" "Ebligu 'Import Pvrtc' en projektaj agordoj, aŭ malŝalti 'Driver Fallback " "Enabled'." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "Propra sencimiga ŝablonon ne trovitis." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." msgstr "Propra eldona ŝablono ne trovitis." #: editor/editor_export.cpp platform/javascript/export/export.cpp -#, fuzzy msgid "Template file not found:" -msgstr "Ŝablonan dosieron ne trovitis:" +msgstr "Ŝablonan dosieron ne trovis:" #: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." @@ -1731,7 +1720,7 @@ msgstr "Biblioteko de havaĵoj" #: editor/editor_feature_profile.cpp msgid "Scene Tree Editing" -msgstr "Redaktado de scena arbo" +msgstr "Redaktado de scenoarbo" #: editor/editor_feature_profile.cpp msgid "Node Dock" @@ -1747,48 +1736,51 @@ msgstr "Doko de enporto" #: editor/editor_feature_profile.cpp msgid "Allows to view and edit 3D scenes." -msgstr "" +msgstr "Permesas vidi kaj redakti 3D-scenojn." #: editor/editor_feature_profile.cpp msgid "Allows to edit scripts using the integrated script editor." -msgstr "" +msgstr "Permesas redakti skriptojn per la integrita skript-redaktilo." #: editor/editor_feature_profile.cpp msgid "Provides built-in access to the Asset Library." -msgstr "" +msgstr "Provizas integritan atingon al la Biblioteko de havaĵoj." #: editor/editor_feature_profile.cpp msgid "Allows editing the node hierarchy in the Scene dock." -msgstr "" +msgstr "Permesas redakti la hierarkion de nodoj en la Sceno-doko." #: editor/editor_feature_profile.cpp msgid "" "Allows to work with signals and groups of the node selected in the Scene " "dock." msgstr "" +"Permesas labori la signalojn kaj la grupojn de la nodo elektitas en la Sceno-" +"doko." #: editor/editor_feature_profile.cpp msgid "Allows to browse the local file system via a dedicated dock." -msgstr "" +msgstr "Permesas esplori la lokan dosiersistemon per dediĉita doko." #: editor/editor_feature_profile.cpp msgid "" "Allows to configure import settings for individual assets. Requires the " "FileSystem dock to function." msgstr "" +"Permesas agordi enportajn agordojn por individuaj havaĵoj. Bezonas ke la " +"doko Dosiersistemo funkcias." #: editor/editor_feature_profile.cpp -#, fuzzy msgid "(current)" -msgstr "(Aktuala)" +msgstr "(aktuale)" #: editor/editor_feature_profile.cpp msgid "(none)" -msgstr "" +msgstr "(nenio)" #: editor/editor_feature_profile.cpp msgid "Remove currently selected profile, '%s'? Cannot be undone." -msgstr "" +msgstr "Forigi aktuale elektitan profilon '%s'? Ne malfareblas." #: editor/editor_feature_profile.cpp msgid "Profile must be a valid filename and must not contain '.'" @@ -1819,19 +1811,16 @@ msgid "Enable Contextual Editor" msgstr "Ŝalti kuntekstan redaktilon" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Class Properties:" -msgstr "Maletendi ĉiajn atributojn" +msgstr "Atributoj de la klaso:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Main Features:" -msgstr "Ŝaltitaj eblecoj:" +msgstr "Ĉefa eblaĵoj:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Nodes and Classes:" -msgstr "Ŝaltitaj klasoj:" +msgstr "Nodoj kaj klasoj:" #: editor/editor_feature_profile.cpp msgid "File '%s' format is invalid, import aborted." @@ -1848,7 +1837,6 @@ msgid "Error saving profile to path: '%s'." msgstr "Eraras konservi profilon al dosierindiko: '%s'." #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Reset to Default" msgstr "Rekomencigi al defaŭltoj" @@ -1857,14 +1845,12 @@ msgid "Current Profile:" msgstr "Aktuala profilo:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Create Profile" -msgstr "Viŝi profilon" +msgstr "Krei profilon" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Remove Profile" -msgstr "Forigi punkton" +msgstr "Forigi profilon" #: editor/editor_feature_profile.cpp msgid "Available Profiles:" @@ -1884,18 +1870,17 @@ msgid "Export" msgstr "Eksporti" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Configure Selected Profile:" -msgstr "Aktuala profilo:" +msgstr "Agordi elektitan profilon:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Extra Options:" -msgstr "Agordoj de klaso:" +msgstr "Pli agordoj:" #: editor/editor_feature_profile.cpp msgid "Create or import a profile to edit available classes and properties." msgstr "" +"Krei aŭ enporti profilon por redakti disponeblajn klasojn kaj atributojn." #: editor/editor_feature_profile.cpp msgid "New profile name:" @@ -1922,7 +1907,6 @@ msgid "Select Current Folder" msgstr "Elekti aktualan dosierujon" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "File exists, overwrite?" msgstr "Dosiero ekzistas, superskribi?" @@ -2085,7 +2069,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "(Re)enportas havaĵoj" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "Supro" @@ -2242,7 +2226,7 @@ msgstr "Atributo:" #: editor/editor_inspector.cpp editor/scene_tree_dock.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Set %s" -msgstr "" +msgstr "Agordis %s" #: editor/editor_inspector.cpp msgid "Set Multiple:" @@ -2322,6 +2306,9 @@ msgid "" "Update Continuously is enabled, which can increase power usage. Click to " "disable it." msgstr "" +"Rotacius kiam la fenestro de la redaktilo redesegniĝus.\n" +"'Ĝisdatigi konstante' estas ŝaltita, kiu eblas pliiĝi kurentuzado. Alklaku " +"por malŝalti ĝin." #: editor/editor_node.cpp msgid "Spins when the editor window redraws." @@ -2358,19 +2345,16 @@ msgid "Can't open file for writing:" msgstr "Ne malfermeblas dosieron por skribi:" #: editor/editor_node.cpp -#, fuzzy msgid "Requested file format unknown:" -msgstr "Petitan dosierformon senkonatas:" +msgstr "Petitan dosierformon nekonas:" #: editor/editor_node.cpp -#, fuzzy msgid "Error while saving." -msgstr "Eraro dum la konservo." +msgstr "Eraro dum la konservado." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Can't open '%s'. The file could have been moved or deleted." -msgstr "Ne malfermeblas '%s'. La dosiero estus movita aŭ forigita." +msgstr "Ne malfermeblas '%s'. La dosiero eble estis movita aŭ forigita." #: editor/editor_node.cpp msgid "Error while parsing '%s'." @@ -2559,35 +2543,34 @@ msgid "" "The current scene has no root node, but %d modified external resource(s) " "were saved anyway." msgstr "" +"La aktula sceno havas ne radika nodo, sed %d modifita(j) ekstera(j) " +"risurco(j) konserviĝis iel." #: editor/editor_node.cpp -#, fuzzy msgid "" "A root node is required to save the scene. You can add a root node using the " "Scene tree dock." -msgstr "Radika nodo estas necesita por konservi la scenon." +msgstr "" +"Radikan nodon bezonas por konservi la scenon. Vi eblas aldoni radikan nodon " +"per la Scenoarbo-doko." #: editor/editor_node.cpp msgid "Save Scene As..." msgstr "Konservi sceno kiel..." #: editor/editor_node.cpp modules/gltf/editor_scene_exporter_gltf_plugin.cpp -#, fuzzy msgid "This operation can't be done without a scene." -msgstr "Ĉi tiu funkciado ne povas fari sen sceno." +msgstr "Ĉi tian operacion ne povas fari sen sceno." #: editor/editor_node.cpp -#, fuzzy msgid "Export Mesh Library" -msgstr "Eksporti maŝajn bibliotekon" +msgstr "Eksporti bibliotekon de maŝoj" #: editor/editor_node.cpp -#, fuzzy msgid "This operation can't be done without a root node." -msgstr "Ĉi tiu funkciado ne povas fari sen radika nodo." +msgstr "Ĉi tian operacion ne povas fari sen radika nodo." #: editor/editor_node.cpp -#, fuzzy msgid "Export Tile Set" msgstr "Eksporti kahelaron" @@ -2600,13 +2583,38 @@ msgid "Current scene not saved. Open anyway?" msgstr "Nuna sceno ne estas konservita. Malfermi ĉuikaze?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "Malfari" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "Refari" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "Ne povas reŝarĝi scenon, kiu konservis neniam." #: editor/editor_node.cpp -#, fuzzy msgid "Reload Saved Scene" -msgstr "Konservi scenon" +msgstr "Reŝargi konservitan scenon" #: editor/editor_node.cpp msgid "" @@ -2650,13 +2658,12 @@ msgstr "" "Konservi ŝanĝojn al la jena(j) sceno(j) antaŭ malfermi projektan mastrumilon?" #: editor/editor_node.cpp -#, fuzzy msgid "" "This option is deprecated. Situations where refresh must be forced are now " "considered a bug. Please report." msgstr "" -"Tiu ĉi opcio estas evitinda. Statoj en kiu aktualigo deviĝi estas nun " -"konsideri kiel cimo. Bonvolu raporti." +"Tia ĉi opcio estas evitinda. Statoj en kiu bezonus ĝisdatigo nun konsideras " +"kiel cimo. Bonvolu raporti." #: editor/editor_node.cpp msgid "Pick a Main Scene" @@ -2707,13 +2714,12 @@ msgstr "" "estas en ila reĝimo." #: editor/editor_node.cpp -#, fuzzy msgid "" "Scene '%s' was automatically imported, so it can't be modified.\n" "To make changes to it, a new inherited scene can be created." msgstr "" -"Sceno '%s' aŭtomate enportiĝis, do ne eblas redakti ĝin.\n" -"Por ŝanĝu ĝin, nova heredita sceno povas kreiĝi." +"Sceno '%s' aŭtomate enportiĝis, do ĝin ne eblas modifi.\n" +"Por ŝanĝi ĝin, povas krei novan hereditan scenon." #: editor/editor_node.cpp msgid "" @@ -2908,9 +2914,8 @@ msgid "Redo" msgstr "Refari" #: editor/editor_node.cpp -#, fuzzy msgid "Miscellaneous project or scene-wide tools." -msgstr "Diversa projekto aŭ sceno-abundaj iloj." +msgstr "Diversa projekto aŭ tut-scenaj iloj." #: editor/editor_node.cpp editor/project_manager.cpp #: editor/script_create_dialog.cpp @@ -2922,14 +2927,12 @@ msgid "Project Settings..." msgstr "Projektaj agordoj..." #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Version Control" msgstr "Versikontrolo" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Set Up Version Control" -msgstr "Altlevi versitenan sistemon" +msgstr "Agordi versikontrolon" #: editor/editor_node.cpp msgid "Shut Down Version Control" @@ -2952,14 +2955,12 @@ msgid "Tools" msgstr "Iloj" #: editor/editor_node.cpp -#, fuzzy msgid "Orphan Resource Explorer..." -msgstr "Eksplorilo da orfaj risurcoj..." +msgstr "Eksplorilo de orfaj risurcoj..." #: editor/editor_node.cpp -#, fuzzy msgid "Reload Current Project" -msgstr "Renomi projekton" +msgstr "Renomi aktualan projekton" #: editor/editor_node.cpp msgid "Quit to Project List" @@ -2983,14 +2984,17 @@ msgid "" "mobile device).\n" "You don't need to enable it to use the GDScript debugger locally." msgstr "" +"Kiam ĉi tiu opcio ŝaltus, uzado de unu-alklaka disponigo igos la " +"komandodosieron provus konekti al la IP-adreso de ĉi tiu komputilo por ke la " +"rulata projekto eblus sencimigi.\n" +"Ĉi tiu opcio destiniĝas por fora sencimigado (tipe kun portebla aparato).\n" +"Vi ne devas ŝalti ĝin por uzi la GDScript-sencimigilon loke." #: editor/editor_node.cpp -#, fuzzy msgid "Small Deploy with Network Filesystem" -msgstr "Eta disponigo kun reta dosiersistemo" +msgstr "Malgranda disponigo kun reta dosiersistemo" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is enabled, using one-click deploy for Android will only " "export an executable without the project data.\n" @@ -2999,53 +3003,51 @@ msgid "" "On Android, deploying will use the USB cable for faster performance. This " "option speeds up testing for projects with large assets." msgstr "" -"Kiam ĉi tiun agordon estas ŝaltita, eksporti aŭ malfaldi produktos minimuman " -"plenumeblan dosieron.\n" -"La dosiersistemon disponigas el la projekto fare de editilo per la reto.\n" -"En Android, malfaldo uzantos la USB-kablon por pli rapida rendimento. Ĉi tui " -"agordo rapidigas testadon por ludoj kun larĝa areo." +"Kiam ĉi tiun agordon ŝaltus, uzado de unu-alklaka disponigo por Android nur " +"eksportos komandodosieron sen la datumoj de projekto.\n" +"La dosiersistemo proviziĝos el la projekto per la redaktilo per la reto.\n" +"Per Android, disponigado uzos la USB-kablon por pli rapida rendimento. Ĉi " +"tiu opcio rapidigas testadon por projektoj kun grandaj havaĵoj." #: editor/editor_node.cpp msgid "Visible Collision Shapes" msgstr "Videblaj koliziaj formoj" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is enabled, collision shapes and raycast nodes (for 2D and " "3D) will be visible in the running project." msgstr "" -"Koliziaj formoj kaj radĵetaj nodoj (por 2D kaj 3D) estos videblaj en la " -"rulas ludo, se ĉi tiu agordo estas ŝaltita." +"Kiam ĉi tia opcio ŝaltus, koliziaj formoj kaj radĵetaj nodoj (por 2D kaj 3D) " +"estos videblaj en la rula projekto." #: editor/editor_node.cpp msgid "Visible Navigation" msgstr "Videbla navigacio" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is enabled, navigation meshes and polygons will be visible " "in the running project." msgstr "" -"Navigaciaj maŝoj kaj poligonoj estos videblaj en la rulas ludo, se ĉi tiu " -"agordo estas ŝaltita." +"Kiam ĉi tiu opcio ŝaltus, navigaciaj maŝoj kaj plurlateroj estos videblaj en " +"la rula projekto." #: editor/editor_node.cpp msgid "Synchronize Scene Changes" msgstr "Sinkronigi ŝanĝojn en sceno" #: editor/editor_node.cpp -#, fuzzy msgid "" "When this option is enabled, any changes made to the scene in the editor " "will be replicated in the running project.\n" "When used remotely on a device, this is more efficient when the network " "filesystem option is enabled." msgstr "" -"Kiam tuin ĉi agordo estas ŝaltita, iuj ŝanĝoj ke faris al la scenon en la " -"editilo replikos en la rulas ludo.\n" -"Kiam uzantis malproksime en aparato, estas pli efika kun reta dosiersistemo." +"Kiam ĉi tiu opcio ŝaltus, iuj ŝanĝoj ke faris al la scenon en la redaktilo " +"replikos en la rula projekto.\n" +"Kiam uzantus fore en aparato, tiu estas pli efika kiam la reta dosiersistema " +"opcio estas ŝaltita." #: editor/editor_node.cpp msgid "Synchronize Script Changes" @@ -3284,6 +3286,11 @@ msgid "Merge With Existing" msgstr "Kunfandi kun ekzistanta" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Aliigi Transformon de Animado" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "Malfermi & ruli skripto" @@ -3541,6 +3548,10 @@ msgstr "" "La elektinta risurco (%s) ne kongruas ian atenditan tipon por ĉi tiu " "atributo (%s)." +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "Farigi unikan" @@ -5670,6 +5681,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "Movi CanvasItem \"%s\" al (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "Ŝlosi elektiton" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Grupoj" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6619,7 +6642,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7207,6 +7234,15 @@ msgstr "Nombrado de generintaj punktoj:" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Occluder Set Transform" +msgstr "" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Krei nodon" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7703,12 +7739,14 @@ msgid "Skeleton2D" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "Rekomencigi al defaŭltoj" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "Superskribi" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7735,6 +7773,63 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "Malsupre maldekstre" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Left Orthogonal" +msgstr "Maldekstra butono" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Orthogonal" +msgstr "Dekstra butono" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7851,42 +7946,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -8157,6 +8232,10 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Occlusion Culling" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "" @@ -8222,8 +8301,9 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" -msgstr "" +#, fuzzy +msgid "Unnamed Gizmo" +msgstr "Sennoma projekto" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Mesh2D" @@ -11881,7 +11961,7 @@ msgstr "Renomi nodon" #: editor/scene_tree_editor.cpp msgid "Scene Tree (Nodes):" -msgstr "Scena arbo (nodoj):" +msgstr "Scenoarbo (nodoj):" #: editor/scene_tree_editor.cpp msgid "Node Configuration Warning!" @@ -12263,6 +12343,15 @@ msgstr "" msgid "Set Portal Point Position" msgstr "" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr "Krei okludan plurlateron" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12547,6 +12636,10 @@ msgstr "" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Build Solution" +msgstr "" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -13026,165 +13119,154 @@ msgstr "" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting APK..." msgstr "Eksporti..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Uninstalling..." msgstr "Malinstali" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Installing to device, please wait..." msgstr "Ŝargas, bonvolu atendi..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not install to device: %s" msgstr "Ne eble komencas subprocezon!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Running on device..." msgstr "Rulas propran skripton..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not execute on device." msgstr "Ne povis krei dosierujon." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13192,61 +13274,61 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Signing release %s..." msgstr "" "Skanas dosierojn,\n" "Bonvolu atendi..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Verifying %s..." msgstr "Aldonas %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13254,57 +13336,57 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files to gradle project\n" msgstr "Ne eblas redakti project.godot en projekta dosierindiko." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "Enhavo de pakaĵo:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Creating APK..." msgstr "Konektas..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13312,21 +13394,21 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Adding files..." msgstr "Aldonas %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files" msgstr "Ne eble komencas subprocezon!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13781,6 +13863,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14070,6 +14160,14 @@ msgstr "" msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14110,6 +14208,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/es.po b/editor/translations/es.po index eef4affde3..95a4a08bfd 100644 --- a/editor/translations/es.po +++ b/editor/translations/es.po @@ -69,11 +69,12 @@ # pabloggomez <pgg2733@gmail.com>, 2021. # Erick Figueroa <querecuto@hotmail.com>, 2021. # jonagamerpro1234 ss <js398704@gmail.com>, 2021. +# davidrogel <david.rogel.pernas@icloud.com>, 2021. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2021-08-12 14:48+0000\n" +"PO-Revision-Date: 2021-08-27 08:25+0000\n" "Last-Translator: Javier Ocampos <xavier.ocampos@gmail.com>\n" "Language-Team: Spanish <https://hosted.weblate.org/projects/godot-engine/" "godot/es/>\n" @@ -82,7 +83,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.8-dev\n" +"X-Generator: Weblate 4.8.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -433,15 +434,13 @@ msgstr "Insertar Animación" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "node '%s'" -msgstr "No se puede abrir '%s'." +msgstr "nodo '%s'" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "animation" -msgstr "Animación" +msgstr "animación" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." @@ -449,9 +448,8 @@ msgstr "Un AnimationPlayer no puede animarse a sí mismo, solo a otros players." #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "property '%s'" -msgstr "No existe la propiedad '%s'." +msgstr "propiedad '%s'" #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -690,7 +688,7 @@ msgstr "Crear pista(s) RESET" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" -msgstr "Optimizar animación" +msgstr "Optimizar Animación" #: editor/animation_track_editor.cpp msgid "Max. Linear Error:" @@ -795,7 +793,7 @@ msgstr "%d coincidencias." #: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" -msgstr "Distinguir mayúsculas y minúsculas" +msgstr "Coincidir Mayus./Minus." #: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" @@ -1094,7 +1092,7 @@ msgstr "" msgid "Dependencies" msgstr "Dependencias" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Recursos" @@ -1755,13 +1753,13 @@ msgstr "" "Activa Import Pvrtc' en Configuración del Proyecto, o desactiva 'Driver " "Fallback Enabled'." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "No se encontró la plantilla de depuración personalizada." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2146,7 +2144,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "(Re)Importación de Assets" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "Superior" @@ -2234,7 +2232,7 @@ msgstr "Buscar en la Ayuda" #: editor/editor_help_search.cpp msgid "Case Sensitive" -msgstr "Respetar mayús/minúsculas" +msgstr "Respetar Mayus./Minus." #: editor/editor_help_search.cpp msgid "Show Hierarchy" @@ -2383,6 +2381,9 @@ msgid "" "Update Continuously is enabled, which can increase power usage. Click to " "disable it." msgstr "" +"Gira cuando la ventana del editor se vuelve a dibujar.\n" +"Si Update Continuously está habilitado puede incrementarse el consumo. Clica " +"para deshabilitarlo." #: editor/editor_node.cpp msgid "Spins when the editor window redraws." @@ -2661,6 +2662,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "Escena actual no guardada ¿Abrir de todos modos?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "Deshacer" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "Rehacer" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "No se puede volver a cargar una escena que nunca se guardó." @@ -3215,7 +3242,7 @@ msgstr "Apoyar el desarrollo de Godot" #: editor/editor_node.cpp msgid "Play the project." -msgstr "Ejecutar el proyecto." +msgstr "Reproducir el proyecto." #: editor/editor_node.cpp msgid "Play" @@ -3356,6 +3383,11 @@ msgid "Merge With Existing" msgstr "Combinar Con Existentes" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Cambiar Transformación de la Animación" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "Abrir y Ejecutar un Script" @@ -3613,6 +3645,10 @@ msgstr "" "El recurso seleccionado (%s) no coincide con ningún tipo esperado para esta " "propiedad (%s)." +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "Hacer Único" @@ -3911,14 +3947,12 @@ msgid "Download from:" msgstr "Descargar desde:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Open in Web Browser" -msgstr "Ejecutar en Navegador" +msgstr "Abrir en el Navegador Web" #: editor/export_template_manager.cpp -#, fuzzy msgid "Copy Mirror URL" -msgstr "Copiar Error" +msgstr "Copiar Mirror URL" #: editor/export_template_manager.cpp msgid "Download and Install" @@ -5731,6 +5765,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "Mover CanvasItem \"%s\" a (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "Bloqueo Seleccionado" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Grupo" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6676,7 +6722,13 @@ msgid "Remove Selected Item" msgstr "Eliminar Elemento Seleccionado" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +#, fuzzy +msgid "Import from Scene (Ignore Transforms)" +msgstr "Importar desde escena" + +#: editor/plugins/mesh_library_editor_plugin.cpp +#, fuzzy +msgid "Import from Scene (Apply Transforms)" msgstr "Importar desde escena" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7274,6 +7326,16 @@ msgstr "Generar puntos" msgid "Flip Portal" msgstr "Voltear Portal" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "Reestablecer Transformación" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Crear Nodo" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "El AnimationTree no tiene una ruta asignada a un AnimationPlayer" @@ -7605,15 +7667,15 @@ msgstr "Seleccionar Color" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Convert Case" -msgstr "Convertir Mayús./Minús." +msgstr "Convertir Mayus./Minus." #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Uppercase" -msgstr "Mayúscula" +msgstr "Mayúsculas" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Lowercase" -msgstr "Minúscula" +msgstr "Minúsculas" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Capitalize" @@ -7777,12 +7839,14 @@ msgid "Skeleton2D" msgstr "Skeleton2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "Crear Pose de Descanso (Desde Huesos)" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "Asignar Pose de Descanso a Huesos" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "Asignar Pose de Descanso a Huesos" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "Sobreescribir" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7809,6 +7873,71 @@ msgid "Perspective" msgstr "Perspectiva" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Perspective" +msgstr "Perspectiva" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "Perspectiva" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Left Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Perspective" +msgstr "Perspectiva" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Perspective" +msgstr "Perspectiva" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Perspective" +msgstr "Perspectiva" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "Transformación Abortada." @@ -7916,42 +8045,22 @@ msgid "Bottom View." msgstr "Vista Inferior." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "Abajo" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "Vista Izquierda." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "Izquierda" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "Vista Derecha." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "Derecha" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "Vista Frontal." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "Frente" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "Vista Posterior." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "Detrás" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "Alinear la Transformación con la Vista" @@ -8223,6 +8332,11 @@ msgid "View Portal Culling" msgstr "Ver Eliminación de Portales" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "Ver Eliminación de Portales" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "Configuración..." @@ -8288,8 +8402,9 @@ msgid "Post" msgstr "Posterior" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" -msgstr "Gizmo sin nombre" +#, fuzzy +msgid "Unnamed Gizmo" +msgstr "Proyecto Sin Nombre" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Mesh2D" @@ -8747,6 +8862,9 @@ msgid "" "Select a theme type from the list to edit its items.\n" "You can add a custom type or import a type with its items from another theme." msgstr "" +"Selecciona un Theme de la lista para editar sus propiedades.\n" +"Puedes añadir un Theme personalizado o importar un Theme con sus propiedades " +"desde otro Theme." #: editor/plugins/theme_editor_plugin.cpp msgid "Remove All Color Items" @@ -8777,6 +8895,8 @@ msgid "" "This theme type is empty.\n" "Add more items to it manually or by importing from another theme." msgstr "" +"Este Theme está vacío.\n" +"Añade más propiedades manualmente o impórtalas desde otro Theme." #: editor/plugins/theme_editor_plugin.cpp msgid "Add Color Item" @@ -11567,15 +11687,15 @@ msgstr "snake_case a PascalCase" #: editor/rename_dialog.cpp msgid "Case" -msgstr "Mayús./Minús." +msgstr "Mayus./Minus." #: editor/rename_dialog.cpp msgid "To Lowercase" -msgstr "A minúsculas" +msgstr "A Minúsculas" #: editor/rename_dialog.cpp msgid "To Uppercase" -msgstr "A mayúsculas" +msgstr "A Mayúsculas" #: editor/rename_dialog.cpp msgid "Reset" @@ -12417,14 +12537,22 @@ msgid "Change Ray Shape Length" msgstr "Cambiar Longitud de la Forma del Rayo" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Set Room Point Position" -msgstr "Establecer Posición de Punto de Curva" +msgstr "Establecer Posición del Room Point" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Set Portal Point Position" -msgstr "Establecer Posición de Punto de Curva" +msgstr "Establecer Posición del Portal Point" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Radius" +msgstr "Cambiar Radio de la Forma del Cilindro" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr "Establecer Posición de Entrada de Curva" #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" @@ -12711,6 +12839,11 @@ msgstr "Trazar lightmaps" msgid "Class name can't be a reserved keyword" msgstr "El nombre de la clase no puede ser una palabra reservada" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "Rellenar Selección" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "Fin del reporte de la pila de excepciones" @@ -13197,70 +13330,70 @@ msgstr "Buscar en VisualScript" msgid "Get %s" msgstr "Obtener %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "Falta el nombre del paquete." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "Los segmentos del paquete deben ser de largo no nulo." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" "El carácter '%s' no está permitido en nombres de paquete de aplicación " "Android." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "Un dígito no puede ser el primer carácter en un segmento de paquete." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" "El carácter '%s' no puede ser el primer carácter en un segmento de paquete." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "El paquete debe tener al menos un '.' como separador." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "Seleccionar dispositivo de la lista" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "Ejecutar en %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting APK..." msgstr "Exportar APK..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Uninstalling..." msgstr "Desinstalando..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Installing to device, please wait..." msgstr "Instalando en el dispositivo, espera por favor..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" msgstr "No se pudo instalar en el dispositivo: %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "Ejecutando en el dispositivo..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not execute on device." msgstr "No se ha podido ejecutar en el dispositivo." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "No se pudo encontrar la herramienta 'apksigner'." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -13268,7 +13401,7 @@ msgstr "" "La plantilla de exportación de Android no esta instalada en el proyecto. " "Instalala desde el menú de Proyecto." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." @@ -13276,12 +13409,12 @@ msgstr "" "Deben configurarse los ajustes de Depuración de Claves, Depuración de " "Usuarios Y Depuración de Contraseñas O ninguno de ellos." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" "Debug keystore no configurada en Configuración del Editor ni en el preset." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." @@ -13289,57 +13422,57 @@ msgstr "" "Deben configurarse los ajustes de Liberación del Almacén de Claves, " "Liberación del Usuario Y Liberación de la Contraseña O ninguno de ellos." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" "Release keystore no está configurado correctamente en el preset de " "exportación." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" "Se requiere una ruta válida del SDK de Android en la Configuración del " "Editor." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "Ruta del SDK de Android inválida en la Configuración del Editor." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "¡No se encontró el directorio 'platform-tools'!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" "No se pudo encontrar el comando adb de las herramientas de la plataforma SDK " "de Android." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" "Por favor, comprueba el directorio del SDK de Android especificado en la " "Configuración del Editor." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "¡No se encontró el directorio 'build-tools'!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" "No se pudo encontrar el comando apksigner de las herramientas de " "construcción del SDK de Android." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "Clave pública inválida para la expansión de APK." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "Nombre de paquete inválido:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" @@ -13347,37 +13480,22 @@ msgstr "" "El módulo \"GodotPaymentV3\" incluido en los ajustes del proyecto \"android/" "modules\" es inválido (cambiado en Godot 3.2.2).\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "\"Use Custom Build\" debe estar activado para usar los plugins." -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" -"\"Degrees Of Freedom\" sólo es válido cuando \"Xr Mode\" es \"Oculus Mobile " -"VR\"." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" "\"Hand Tracking\" sólo es válido cuando \"Xr Mode\" es \"Oculus Mobile VR\"." -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" -"\"Focus Awareness\" sólo es válido cuando \"Xr Mode\" es \"Oculus Mobile VR" -"\"." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" "\"Export AAB\" sólo es válido cuando \"Use Custom Build\" está activado." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13389,52 +13507,52 @@ msgstr "" "SDK build-tools.\n" "El resultado %s es sin firma." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "Firma de depuración %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." msgstr "Firmando liberación %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "No se pudo encontrar la keystore, no se puedo exportar." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "'apksigner' ha retornado con error #%d" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." msgstr "Verificando %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "La verificación de 'apksigner' de %s ha fallado." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "Exportando para Android" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" "¡Nombre del archivo inválido! Android App Bundle requiere la extensión *.aab." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "La Expansión APK no es compatible con Android App Bundle." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "¡Nombre de archivo inválido! Android APK requiere la extensión *.apk." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "¡Formato de exportación no compatible!\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." @@ -13443,7 +13561,7 @@ msgstr "" "información de la versión para ello. Por favor, reinstala desde el menú " "'Proyecto'." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13456,26 +13574,26 @@ msgstr "" "Por favor, reinstala la plantilla de compilación de Android desde el menú " "'Proyecto'." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" "No se puede sobrescribir los archivos res://android/build/res/*.xml con el " "nombre del proyecto" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "No se pueden exportar los archivos del proyecto a un proyecto gradle\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "¡No se pudo escribir el archivo del paquete de expansión!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "Construir Proyecto Android (gradle)" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." @@ -13484,11 +13602,11 @@ msgstr "" "También puedes visitar docs.godotengine.org para consultar la documentación " "de compilación de Android." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "Moviendo salida" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." @@ -13496,15 +13614,15 @@ msgstr "" "No se puede copiar y renombrar el archivo de exportación, comprueba el " "directorio del proyecto de gradle para ver los resultados." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package not found: %s" msgstr "Paquete no encontrado:% s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." msgstr "Creando APK..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" @@ -13512,7 +13630,7 @@ msgstr "" "No se pudo encontrar la plantilla APK para exportar:\n" "%s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13524,19 +13642,19 @@ msgstr "" "Por favor, construya una plantilla con todas las bibliotecas necesarias, o " "desmarque las arquitecturas que faltan en el preajuste de exportación." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Adding files..." msgstr "Añadiendo archivos ..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files" msgstr "No se pudieron exportar los archivos del proyecto" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "Alineando APK..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "No se pudo descomprimir el APK no alineado temporal." @@ -14090,6 +14208,14 @@ msgstr "" "NavigationMeshInstance debe ser hijo o nieto de un nodo Navigation. Ya que " "sólo proporciona los datos de navegación." +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14229,36 +14355,50 @@ msgid "" "RoomList path is invalid.\n" "Please check the RoomList branch has been assigned in the RoomManager." msgstr "" +"La ruta del RoomList no es válida.\n" +"Por favor, comprueba que la rama de la RoomList ha sido asignada al " +"RoomManager." #: scene/3d/room_manager.cpp msgid "RoomList contains no Rooms, aborting." -msgstr "" +msgstr "La RoomList no contiene Rooms, abortando." #: scene/3d/room_manager.cpp msgid "Misnamed nodes detected, check output log for details. Aborting." msgstr "" +"Nodos con nombres incorrectos detectados, comprueba la salida del Log para " +"más detalles. Abortando." #: scene/3d/room_manager.cpp msgid "Portal link room not found, check output log for details." msgstr "" +"No se encuentra Portal link room, comprueba la salida del Log para más " +"detalles." #: scene/3d/room_manager.cpp msgid "" "Portal autolink failed, check output log for details.\n" "Check the portal is facing outwards from the source room." msgstr "" +"Fallo en el Portal autolink, comprueba la salida del Log para más detalles.\n" +"Comprueba si el portal está mirando hacia fuera de la room de origen." #: scene/3d/room_manager.cpp msgid "" "Room overlap detected, cameras may work incorrectly in overlapping area.\n" "Check output log for details." msgstr "" +"Detectada superposición de la Room, las cámaras pueden funcionar " +"incorrectamente en las zonas donde hay superposición.\n" +"Comrpueba la salida del Log para más detalles." #: scene/3d/room_manager.cpp msgid "" "Error calculating room bounds.\n" "Ensure all rooms contain geometry or manual bounds." msgstr "" +"Error al calcular los límites de la room.\n" +"Asegúrate de que todas las rooms contienen geometría o límites manuales." #: scene/3d/soft_body.cpp msgid "This body will be ignored until you set a mesh." @@ -14426,6 +14566,14 @@ msgstr "Debe tener una extensión válida." msgid "Enable grid minimap." msgstr "Activar minimapa de cuadrícula." +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14481,6 +14629,10 @@ msgstr "" "El tamaño del Viewport debe ser mayor que 0 para poder renderizar cualquier " "cosa." +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " @@ -14539,6 +14691,41 @@ msgstr "Asignación a uniform." msgid "Constants cannot be modified." msgstr "Las constantes no pueden modificarse." +#~ msgid "Make Rest Pose (From Bones)" +#~ msgstr "Crear Pose de Descanso (Desde Huesos)" + +#~ msgid "Bottom" +#~ msgstr "Abajo" + +#~ msgid "Left" +#~ msgstr "Izquierda" + +#~ msgid "Right" +#~ msgstr "Derecha" + +#~ msgid "Front" +#~ msgstr "Frente" + +#~ msgid "Rear" +#~ msgstr "Detrás" + +#~ msgid "Nameless gizmo" +#~ msgstr "Gizmo sin nombre" + +#~ msgid "" +#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile " +#~ "VR\"." +#~ msgstr "" +#~ "\"Degrees Of Freedom\" sólo es válido cuando \"Xr Mode\" es \"Oculus " +#~ "Mobile VR\"." + +#~ msgid "" +#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" +#~ "\"." +#~ msgstr "" +#~ "\"Focus Awareness\" sólo es válido cuando \"Xr Mode\" es \"Oculus Mobile " +#~ "VR\"." + #~ msgid "Package Contents:" #~ msgstr "Contenido del Paquete:" @@ -16735,9 +16922,6 @@ msgstr "Las constantes no pueden modificarse." #~ msgid "Images:" #~ msgstr "Imágenes:" -#~ msgid "Group" -#~ msgstr "Grupo" - #~ msgid "Sample Conversion Mode: (.wav files):" #~ msgstr "Modo de conversión de muestreo: (archivos .wav):" diff --git a/editor/translations/es_AR.po b/editor/translations/es_AR.po index d5c955a347..0decc83e9f 100644 --- a/editor/translations/es_AR.po +++ b/editor/translations/es_AR.po @@ -17,12 +17,13 @@ # Cristian Yepez <cristianyepez@gmail.com>, 2020. # Skarline <lihue-molina@hotmail.com>, 2020. # Joakker <joaquinandresleon108@gmail.com>, 2020. +# M3CG <cgmario1999@gmail.com>, 2021. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2021-08-06 06:47+0000\n" -"Last-Translator: Lisandro Lorea <lisandrolorea@gmail.com>\n" +"PO-Revision-Date: 2021-09-06 16:32+0000\n" +"Last-Translator: M3CG <cgmario1999@gmail.com>\n" "Language-Team: Spanish (Argentina) <https://hosted.weblate.org/projects/" "godot-engine/godot/es_AR/>\n" "Language: es_AR\n" @@ -30,7 +31,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.8-dev\n" +"X-Generator: Weblate 4.8.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -380,15 +381,13 @@ msgstr "Insertar Anim" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "node '%s'" -msgstr "No se puede abrir '%s'." +msgstr "nodo '%s'" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "animation" -msgstr "Animación" +msgstr "animación" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." @@ -396,9 +395,8 @@ msgstr "Un AnimationPlayer no puede animarse a sí mismo, solo a otros players." #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "property '%s'" -msgstr "No existe la propiedad '%s'." +msgstr "propiedad '%s'" #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -1038,7 +1036,7 @@ msgstr "" msgid "Dependencies" msgstr "Dependencias" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Recursos" @@ -1078,18 +1076,16 @@ msgid "Owners Of:" msgstr "Dueños De:" #: editor/dependency_editor.cpp -#, fuzzy msgid "" "Remove the selected files from the project? (Cannot be undone.)\n" "Depending on your filesystem configuration, the files will either be moved " "to the system trash or deleted permanently." msgstr "" -"¿Eliminar los archivos seleccionados del proyecto? (irreversible)\n" -"Podés encontrar los archivos eliminados en la papelera de reciclaje del " -"sistema para restaurarlos." +"¿Eliminar los archivos seleccionados del proyecto? (No se puede deshacer).\n" +"Dependiendo de la configuración de tu sistema de archivos, los archivos se " +"moverán a la papelera del sistema o se eliminarán permanentemente." #: editor/dependency_editor.cpp -#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -1097,11 +1093,11 @@ msgid "" "Depending on your filesystem configuration, the files will either be moved " "to the system trash or deleted permanently." msgstr "" -"Los archivos que se están removiendo son requeridos por otros recursos para " +"Los archivos que se están eliminando son requeridos por otros recursos para " "funcionar.\n" -"¿Eliminarlos de todos modos? (irreversible)\n" -"Podés encontrar los archivos eliminados en la papelera de reciclaje del " -"sistema para restaurarlos." +"¿Eliminarlos de todos modos? (No se puede deshacer).\n" +"Dependiendo de la configuración de tu sistema de archivos, los archivos se " +"moverán a la papelera del sistema o se eliminarán permanentemente." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1271,9 +1267,10 @@ msgid "Licenses" msgstr "Licencias" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Error opening asset file for \"%s\" (not in ZIP format)." -msgstr "Error al abrir el archivo de paquete (no esta en formato ZIP)." +msgstr "" +"Error al abrir el archivo de assets para \"%s\" (no se encuentra en formato " +"ZIP)." #: editor/editor_asset_installer.cpp msgid "%s (already exists)" @@ -1282,10 +1279,12 @@ msgstr "%s (ya existe)" #: editor/editor_asset_installer.cpp msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:" msgstr "" +"Contenido del asset \"%s\" - %d archivo(s) en conflicto con tu proyecto:" #: editor/editor_asset_installer.cpp msgid "Contents of asset \"%s\" - No files conflict with your project:" msgstr "" +"Contenido del asset \"%s\" - No hay archivos en conflicto con tu proyecto:" #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" @@ -1699,13 +1698,13 @@ msgstr "" "Activá Import Pvrtc' en la Ajustes del Proyecto, o desactiva 'Driver " "Fallback Enabled'." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "Plantilla debug personalizada no encontrada." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -1782,6 +1781,8 @@ msgid "" "Allows to configure import settings for individual assets. Requires the " "FileSystem dock to function." msgstr "" +"Permite ajustar los parámetros de importación para assets individuales. " +"Requiere del panel Sistema de Archivos para funcionar." #: editor/editor_feature_profile.cpp msgid "(current)" @@ -1793,7 +1794,7 @@ msgstr "(ninguno)" #: editor/editor_feature_profile.cpp msgid "Remove currently selected profile, '%s'? Cannot be undone." -msgstr "" +msgstr "¿Eliminar el perfil seleccionado, '%s'? No se puede deshacer." #: editor/editor_feature_profile.cpp msgid "Profile must be a valid filename and must not contain '.'" @@ -1897,6 +1898,7 @@ msgstr "Opciones Extra:" #: editor/editor_feature_profile.cpp msgid "Create or import a profile to edit available classes and properties." msgstr "" +"Crear o importar un perfil para editar las clases y propiedades disponibles." #: editor/editor_feature_profile.cpp msgid "New profile name:" @@ -2085,7 +2087,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "(Re)Importando Assets" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "Cima" @@ -2322,6 +2324,9 @@ msgid "" "Update Continuously is enabled, which can increase power usage. Click to " "disable it." msgstr "" +"Gira cuando la ventana del editor se redibuja.\n" +"Update Continuously está habilitado, lo que puede aumentar el consumo " +"eléctrico. Click para desactivarlo." #: editor/editor_node.cpp msgid "Spins when the editor window redraws." @@ -2561,13 +2566,16 @@ msgid "" "The current scene has no root node, but %d modified external resource(s) " "were saved anyway." msgstr "" +"La escena actual no contiene un nodo raíz, pero %d resource(s) externo(s) " +"modificado(s) fueron guardados de todos modos." #: editor/editor_node.cpp -#, fuzzy msgid "" "A root node is required to save the scene. You can add a root node using the " "Scene tree dock." -msgstr "Se necesita un nodo raíz para guardar la escena." +msgstr "" +"Se requiere un nodo raíz para guardar la escena. Podés agregar un nodo raíz " +"usando el dock de árbol de Escenas." #: editor/editor_node.cpp msgid "Save Scene As..." @@ -2598,6 +2606,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "Escena actual sin guardar. Abrir de todos modos?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "Deshacer" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "Rehacer" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "No se puede volver a cargar una escena que nunca se guardó." @@ -3240,9 +3274,8 @@ msgid "Install from file" msgstr "Instalar desde archivo" #: editor/editor_node.cpp -#, fuzzy msgid "Select android sources file" -msgstr "Seleccioná una Mesh de Origen:" +msgstr "Seleccionar archivo de fuentes de Android" #: editor/editor_node.cpp msgid "" @@ -3292,6 +3325,11 @@ msgid "Merge With Existing" msgstr "Mergear Con Existentes" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Cambiar Transform de Anim" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "Abrir y Correr un Script" @@ -3362,9 +3400,8 @@ msgid "No sub-resources found." msgstr "No se encontró ningún sub-recurso." #: editor/editor_path.cpp -#, fuzzy msgid "Open a list of sub-resources." -msgstr "No se encontró ningún sub-recurso." +msgstr "Abra una lista de sub-recursos." #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" @@ -3409,9 +3446,8 @@ msgid "Measure:" msgstr "Medida:" #: editor/editor_profiler.cpp -#, fuzzy msgid "Frame Time (ms)" -msgstr "Duración de Frame (seg)" +msgstr "Duración de Frame (ms)" #: editor/editor_profiler.cpp msgid "Average Time (ms)" @@ -3442,6 +3478,12 @@ msgid "" "functions called by that function.\n" "Use this to find individual functions to optimize." msgstr "" +"Inclusivo: Incluye el tiempo de otras funciones llamadas por esta función.\n" +"Usalo para detectar cuellos de botella.\n" +"\n" +"Propio: Sólo contabiliza el tiempo empleado en la propia función, no en " +"otras funciones llamadas por esa función.\n" +"Utilizalo para buscar funciones individuales que optimizar." #: editor/editor_profiler.cpp msgid "Frame #:" @@ -3544,6 +3586,10 @@ msgstr "" "El recurso seleccionado (%s) no concuerda con ningún tipo esperado para esta " "propiedad (%s)." +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "Convertir en Unico" @@ -3614,11 +3660,10 @@ msgid "Did you forget the '_run' method?" msgstr "Te olvidaste del método '_run'?" #: editor/editor_spin_slider.cpp -#, fuzzy msgid "Hold %s to round to integers. Hold Shift for more precise changes." msgstr "" -"Mantené pulsado Ctrl para redondear a enteros. Mantené pulsado Shift para " -"cambios más precisos." +"Mantené %s para redondear a números enteros. Mantené Mayús para cambios más " +"precisos." #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" @@ -3710,10 +3755,9 @@ msgid "Error getting the list of mirrors." msgstr "Error al obtener la lista de mirrors." #: editor/export_template_manager.cpp -#, fuzzy msgid "Error parsing JSON with the list of mirrors. Please report this issue!" msgstr "" -"Error al parsear el JSON de la lista de mirrors. ¡Por favor reportá este " +"Error al parsear el JSON con la lista de mirrors. ¡Por favor, reportá este " "problema!" #: editor/export_template_manager.cpp @@ -3771,24 +3815,21 @@ msgid "SSL Handshake Error" msgstr "Error de Handshake SSL" #: editor/export_template_manager.cpp -#, fuzzy msgid "Can't open the export templates file." -msgstr "No se puede abir el zip de plantillas de exportación." +msgstr "No se puede abrir el archivo de plantillas de exportación." #: editor/export_template_manager.cpp -#, fuzzy msgid "Invalid version.txt format inside the export templates file: %s." -msgstr "Formato de version.txt inválido dentro de plantillas: %s." +msgstr "Formato de version.txt inválido dentro de archivo de plantillas: %s." #: editor/export_template_manager.cpp -#, fuzzy msgid "No version.txt found inside the export templates file." -msgstr "No se encontro ningún version.txt dentro de las plantillas." +msgstr "" +"No se ha encontrado el archivo version.txt dentro del archivo de plantillas." #: editor/export_template_manager.cpp -#, fuzzy msgid "Error creating path for extracting templates:" -msgstr "Error creando rutas para las plantillas:" +msgstr "Error al crear la ruta para extraer las plantillas:" #: editor/export_template_manager.cpp msgid "Extracting Export Templates" @@ -3799,9 +3840,8 @@ msgid "Importing:" msgstr "Importando:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Remove templates for the version '%s'?" -msgstr "Quitar plantilla version '%s'?" +msgstr "¿Quitar plantillas para la versión '%s'?" #: editor/export_template_manager.cpp msgid "Uncompressing Android Build Sources" @@ -3833,29 +3873,28 @@ msgstr "Abrir Carpeta" #: editor/export_template_manager.cpp msgid "Open the folder containing installed templates for the current version." msgstr "" +"Abra la carpeta que contiene las plantillas instaladas para la versión " +"actual." #: editor/export_template_manager.cpp msgid "Uninstall" msgstr "Desinstalar" #: editor/export_template_manager.cpp -#, fuzzy msgid "Uninstall templates for the current version." -msgstr "Valor inicial para el contador" +msgstr "Desinstalar las plantillas de la versión actual." #: editor/export_template_manager.cpp msgid "Download from:" msgstr "Descargar desde:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Open in Web Browser" -msgstr "Ejecutar en el Navegador" +msgstr "Abrir en el Navegador Web" #: editor/export_template_manager.cpp -#, fuzzy msgid "Copy Mirror URL" -msgstr "Copiar Error" +msgstr "Copiar URL del Mirror" #: editor/export_template_manager.cpp msgid "Download and Install" @@ -3866,6 +3905,8 @@ msgid "" "Download and install templates for the current version from the best " "possible mirror." msgstr "" +"Descargar e instalar plantillas para la versión actual de el mejor mirror " +"posible." #: editor/export_template_manager.cpp msgid "Official export templates aren't available for development builds." @@ -3911,6 +3952,8 @@ msgid "" "The templates will continue to download.\n" "You may experience a short editor freeze when they finish." msgstr "" +"Las plantillas seguirán descargándose.\n" +"Puede que el editor se frice brevemente cuando terminen." #: editor/filesystem_dock.cpp msgid "Favorites" @@ -5504,7 +5547,7 @@ msgstr "Archivo ZIP de Assets" #: editor/plugins/audio_stream_editor_plugin.cpp msgid "Audio Preview Play/Pause" -msgstr "" +msgstr "Reproducir/Pausar Previsualización de Audio" #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "" @@ -5664,6 +5707,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "Mover CanvasItem \"%s\" a (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "Bloqueo Seleccionado" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Grupo" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -5765,13 +5820,13 @@ msgstr "Cambiar Anclas" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "" "Project Camera Override\n" "Overrides the running project's camera with the editor viewport camera." msgstr "" -"Reemplazar Cámara del Juego\n" -"Reemplaza la cámara del juego con la cámara del viewport del editor." +"Reemplazar Cámara del Proyecto\n" +"Reemplaza la cámara del proyecto en ejecución con la cámara del viewport del " +"editor." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5780,6 +5835,9 @@ msgid "" "No project instance running. Run the project from the editor to use this " "feature." msgstr "" +"Reemplazo de la Cámara de Proyecto\n" +"No se está ejecutando ninguna instancia del proyecto. Ejecutá el proyecto " +"desde el editor para utilizar esta función." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5847,31 +5905,27 @@ msgstr "Modo Seleccionar" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Drag: Rotate selected node around pivot." -msgstr "Quitar el nodo o transición seleccionado/a." +msgstr "Arrastrar: Rotar el nodo seleccionado alrededor del pivote." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Alt+Drag: Move selected node." -msgstr "Alt+Arrastrae: Mover" +msgstr "Alt+Arrastrar: Mover el nodo seleccionado" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "V: Set selected node's pivot position." -msgstr "Quitar el nodo o transición seleccionado/a." +msgstr "V: Establecer la posición de pivote del nodo seleccionado." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Alt+RMB: Show list of all nodes at position clicked, including locked." msgstr "" -"Mostrar una lista de todos los objetos en la posicion cliqueada\n" -"(igual que Alt+Click Der. en modo selección)." +"Alt+Click Der.: Mostrar una lista de todos los nodos en la posición " +"clickeada, incluyendo bloqueados." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "RMB: Add node at position clicked." -msgstr "" +msgstr "Click Der.: Añadir un nodo en la posición clickeada." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -6412,9 +6466,8 @@ msgid "Couldn't create a single convex collision shape." msgstr "No se pudo crear una forma de colisión única." #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Simplified Convex Shape" -msgstr "Crear Forma Convexa Única" +msgstr "Crear una Figura Convexa Simplificada" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Single Convex Shape" @@ -6451,9 +6504,8 @@ msgid "No mesh to debug." msgstr "No hay meshes para depurar." #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Mesh has no UV in layer %d." -msgstr "El modelo no tiene UV en esta capa" +msgstr "La malla no tiene UV en la capa %d." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "MeshInstance lacks a Mesh!" @@ -6518,9 +6570,8 @@ msgstr "" "Esta es la opción mas rápida (pero menos exacta) para detectar colisiones." #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Simplified Convex Collision Sibling" -msgstr "Crear Colisión Convexa Única Hermana" +msgstr "Crear Colisión Convexa Simplificada Hermana" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "" @@ -6528,20 +6579,23 @@ msgid "" "This is similar to single collision shape, but can result in a simpler " "geometry in some cases, at the cost of accuracy." msgstr "" +"Crea una forma de colisión convexa simplificada.\n" +"Esto es similar a la forma de colisión única, pero puede resultar en una " +"geometría más simple en algunos casos, a costa de precisión." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Multiple Convex Collision Siblings" msgstr "Crear Múltiples Colisiones Convexas como Nodos Hermanos" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "" "Creates a polygon-based collision shape.\n" "This is a performance middle-ground between a single convex collision and a " "polygon-based collision." msgstr "" "Crea una forma de colisión basada en polígonos.\n" -"Esto está en un punto medio de rendimiento entre las dos opciones de arriba." +"Esto es un punto medio de rendimiento entre una colisión convexa única y una " +"colisión basada en polígonos." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." @@ -6608,7 +6662,13 @@ msgid "Remove Selected Item" msgstr "Remover Item Seleccionado" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +#, fuzzy +msgid "Import from Scene (Ignore Transforms)" +msgstr "Importar desde Escena" + +#: editor/plugins/mesh_library_editor_plugin.cpp +#, fuzzy +msgid "Import from Scene (Apply Transforms)" msgstr "Importar desde Escena" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7187,24 +7247,30 @@ msgid "ResourcePreloader" msgstr "ResourcePreloader" #: editor/plugins/room_manager_editor_plugin.cpp -#, fuzzy msgid "Flip Portals" -msgstr "Espejar Horizontalmente" +msgstr "Invertir Portales" #: editor/plugins/room_manager_editor_plugin.cpp -#, fuzzy msgid "Room Generate Points" -msgstr "Conteo de Puntos Generados:" +msgstr "Generar Puntos en la Room" #: editor/plugins/room_manager_editor_plugin.cpp -#, fuzzy msgid "Generate Points" msgstr "Conteo de Puntos Generados:" #: editor/plugins/room_manager_editor_plugin.cpp -#, fuzzy msgid "Flip Portal" -msgstr "Espejar Horizontalmente" +msgstr "Invertir Portal" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "Reestablecer Transform" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Crear Nodo" #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" @@ -7709,12 +7775,14 @@ msgid "Skeleton2D" msgstr "Skeleton2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "Crear Pose de Descanso" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "Setear Huesos a la Pose de Descanso" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "Setear Huesos a la Pose de Descanso" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "Sobreescribir" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7741,6 +7809,71 @@ msgid "Perspective" msgstr "Perspectiva" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Perspective" +msgstr "Perspectiva" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "Perspectiva" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Left Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Perspective" +msgstr "Perspectiva" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Perspective" +msgstr "Perspectiva" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Perspective" +msgstr "Perspectiva" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "Transformación Abortada." @@ -7767,20 +7900,17 @@ msgid "None" msgstr "Ninguno" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Rotate" -msgstr "Estado" +msgstr "Rotar" #. TRANSLATORS: This refers to the movement that changes the position of an object. #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Translate" -msgstr "Trasladar:" +msgstr "Trasladar" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Scale" -msgstr "Escala:" +msgstr "Escalar" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scaling: " @@ -7803,48 +7933,40 @@ msgid "Animation Key Inserted." msgstr "Clave de Animación Insertada." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Pitch:" -msgstr "Altura" +msgstr "Cabeceo:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Yaw:" -msgstr "" +msgstr "Guiñada:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Size:" -msgstr "Tamaño: " +msgstr "Tamaño:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Objects Drawn:" -msgstr "Objetos Dibujados" +msgstr "Objetos Dibujados:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Material Changes:" -msgstr "Cambios de Material" +msgstr "Cambios de Material:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Shader Changes:" -msgstr "Cambios de Shader" +msgstr "Cambios de Shaders:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Surface Changes:" -msgstr "Cambios de Superficie" +msgstr "Cambios de Superficies:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Draw Calls:" -msgstr "Llamadas de Dibujado" +msgstr "Llamadas de Dibujado:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Vertices:" -msgstr "Vértices" +msgstr "Vértices:" #: editor/plugins/spatial_editor_plugin.cpp msgid "FPS: %d (%s ms)" @@ -7859,42 +7981,22 @@ msgid "Bottom View." msgstr "Vista Inferior." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "Fondo" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "Vista Izquierda." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "Izquierda" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "Vista Derecha." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "Derecha" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "Vista Frontal." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "Frente" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "Vista Anterior." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "Detrás" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "Alinear Transform con Vista" @@ -8003,9 +8105,8 @@ msgid "Freelook Slow Modifier" msgstr "Modificador de Velocidad de Vista Libre" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Toggle Camera Preview" -msgstr "Cambiar Tamaño de Cámara" +msgstr "Alternar Vista Previa de la Cámara" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Rotation Locked" @@ -8027,9 +8128,8 @@ msgstr "" "No se puede utilizar como un indicador fiable del rendimiento en el juego." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Convert Rooms" -msgstr "Convertir A %s" +msgstr "Convertir Rooms" #: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" @@ -8051,7 +8151,6 @@ msgstr "" "opacas (\"x-ray\")." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Snap Nodes to Floor" msgstr "Ajustar Nodos al Suelo" @@ -8069,7 +8168,7 @@ msgstr "Usar Ajuste" #: editor/plugins/spatial_editor_plugin.cpp msgid "Converts rooms for portal culling." -msgstr "" +msgstr "Convertir rooms para hacer culling de portales." #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" @@ -8165,9 +8264,13 @@ msgid "View Grid" msgstr "Ver Grilla" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View Portal Culling" -msgstr "Ajustes de Viewport" +msgstr "Ver Culling de Portales" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "Ver Culling de Portales" #: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp @@ -8235,8 +8338,9 @@ msgid "Post" msgstr "Post" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" -msgstr "Gizmo sin nombre" +#, fuzzy +msgid "Unnamed Gizmo" +msgstr "Proyecto Sin Nombre" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Mesh2D" @@ -8487,129 +8591,112 @@ msgid "TextureRegion" msgstr "Región de Textura" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Colors" -msgstr "Color" +msgstr "Colores" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Fonts" -msgstr "Tipografía" +msgstr "Fuentes" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Icons" -msgstr "Icono" +msgstr "Iconos" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Styleboxes" -msgstr "StyleBox" +msgstr "Styleboxes" #: editor/plugins/theme_editor_plugin.cpp msgid "{num} color(s)" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "No colors found." -msgstr "No se encontró ningún sub-recurso." +msgstr "No se encontraron colores." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "{num} constant(s)" -msgstr "Constantes" +msgstr "{num} constante(s)" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "No constants found." -msgstr "Constante de color." +msgstr "No se encontraron constantes." #: editor/plugins/theme_editor_plugin.cpp msgid "{num} font(s)" -msgstr "" +msgstr "{num} fuente(s)" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "No fonts found." -msgstr "No se encontró!" +msgstr "No se encontraron fuentes." #: editor/plugins/theme_editor_plugin.cpp msgid "{num} icon(s)" -msgstr "" +msgstr "{num} ícono(s)" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "No icons found." -msgstr "No se encontró!" +msgstr "No se encontraron íconos." #: editor/plugins/theme_editor_plugin.cpp msgid "{num} stylebox(es)" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "No styleboxes found." -msgstr "No se encontró ningún sub-recurso." +msgstr "No se encontraron styleboxes." #: editor/plugins/theme_editor_plugin.cpp msgid "{num} currently selected" -msgstr "" +msgstr "{num} seleccionado(s) actualmente" #: editor/plugins/theme_editor_plugin.cpp msgid "Nothing was selected for the import." -msgstr "" +msgstr "No se seleccionó nada para la importación." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Importing Theme Items" -msgstr "Importar Tema" +msgstr "Importando Items de Tema" #: editor/plugins/theme_editor_plugin.cpp msgid "Importing items {n}/{n}" -msgstr "" +msgstr "Importando items {n}/{n}" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Updating the editor" -msgstr "Salir del editor?" +msgstr "Actualizando el editor" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Finalizing" -msgstr "Analizando" +msgstr "Finalizando" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Filter:" -msgstr "Filtro: " +msgstr "Filtro:" #: editor/plugins/theme_editor_plugin.cpp msgid "With Data" -msgstr "" +msgstr "Con Data" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select by data type:" -msgstr "Seleccionar un Nodo" +msgstr "Seleccionar por tipo de datos:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select all visible color items." -msgstr "Seleccioná una división para borrarla." +msgstr "Seleccionar todos los elementos color visibles." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible color items and their data." -msgstr "" +msgstr "Seleccione todos los elementos visibles de color y sus datos." #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all visible color items." -msgstr "" +msgstr "Quitar selección a todos los elementos visibles de color." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select all visible constant items." -msgstr "Selecciona un ítem primero!" +msgstr "Seleccionar todos elementos constant visibles." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible constant items and their data." @@ -8620,9 +8707,8 @@ msgid "Deselect all visible constant items." msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select all visible font items." -msgstr "Selecciona un ítem primero!" +msgstr "Seleccionar todos los elementos font visibles." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible font items and their data." @@ -8633,19 +8719,16 @@ msgid "Deselect all visible font items." msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select all visible icon items." -msgstr "Selecciona un ítem primero!" +msgstr "Seleccionar todos los elementos icon visibles." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select all visible icon items and their data." -msgstr "Selecciona un ítem primero!" +msgstr "Seleccionar todos los elementos icon visibles y sus datos." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Deselect all visible icon items." -msgstr "Selecciona un ítem primero!" +msgstr "Deseleccionar todos los elementos icon visibles." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible stylebox items." @@ -8666,42 +8749,36 @@ msgid "" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Collapse types." -msgstr "Colapsar Todos" +msgstr "Colapsar tipos." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Expand types." -msgstr "Expandir Todos" +msgstr "Expandir tipos." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select all Theme items." -msgstr "Elegir Archivo de Plantilla" +msgstr "Seleccionar todos los elementos del Tema." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select With Data" -msgstr "Seleccionar Puntos" +msgstr "Seleccionar Con Datos" #: editor/plugins/theme_editor_plugin.cpp msgid "Select all Theme items with item data." -msgstr "" +msgstr "Seleccionar todos los elementos del Tema con los datos del elemento." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Deselect All" -msgstr "Seleccionar Todo" +msgstr "Deseleccionar Todo" #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all Theme items." -msgstr "" +msgstr "Deseleccionar todos los elementos del Tema." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Import Selected" -msgstr "Importar Escena" +msgstr "Importar Seleccionado" #: editor/plugins/theme_editor_plugin.cpp msgid "" @@ -8715,36 +8792,33 @@ msgid "" "Select a theme type from the list to edit its items.\n" "You can add a custom type or import a type with its items from another theme." msgstr "" +"Selecciona un tipo de tema de la list para editar sus elementos.\n" +"Podés agregar un tipo customizado o importar un tipo con sus elementos desde " +"otro tema." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Color Items" msgstr "Quitar Todos los Ítems" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Item" -msgstr "Remover Item" +msgstr "Renombrar Item" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Constant Items" -msgstr "Quitar Todos los Ítems" +msgstr "Eliminar Todos los Elementos Constant" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Font Items" -msgstr "Quitar Todos los Ítems" +msgstr "Eliminar Todos los Elementos Font" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Icon Items" -msgstr "Quitar Todos los Ítems" +msgstr "Eliminar Todos los Elementos de Iconos" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All StyleBox Items" -msgstr "Quitar Todos los Ítems" +msgstr "Eliminar Todos los Elementos de StyleBox" #: editor/plugins/theme_editor_plugin.cpp msgid "" @@ -8753,161 +8827,132 @@ msgid "" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Color Item" -msgstr "Agregar Items de Clases" +msgstr "Añadir Elemento Color" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Constant Item" -msgstr "Agregar Items de Clases" +msgstr "Añadir Elemento Constant" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Font Item" -msgstr "Agregar Item" +msgstr "Añadir Elemento Font" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Icon Item" msgstr "Agregar Item" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Stylebox Item" -msgstr "Agregar Todos los Items" +msgstr "Añadir Elemento Stylebox" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Color Item" -msgstr "Quitar Ítems de Clases" +msgstr "Cambiar Nombre del Elemento Color" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Constant Item" -msgstr "Quitar Ítems de Clases" +msgstr "Cambiar Nombre del Elemento Constant" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Font Item" -msgstr "Renombrar Nodo" +msgstr "Renombrar Elemento Font" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Icon Item" -msgstr "Renombrar Nodo" +msgstr "Renombrar Elemento Icon" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Stylebox Item" -msgstr "Remover Item Seleccionado" +msgstr "Renombrar Elemento Stylebox" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Invalid file, not a Theme resource." -msgstr "Archivo inválido. No es un layout de bus de audio." +msgstr "Archivo inválido, no es un recurso del Theme." #: editor/plugins/theme_editor_plugin.cpp msgid "Invalid file, same as the edited Theme resource." -msgstr "" +msgstr "Archivo inválido, idéntico al recurso del Theme editado." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Manage Theme Items" -msgstr "Administrar Plantillas" +msgstr "Administrar Elementos del Theme" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Edit Items" -msgstr "Ítem Editable" +msgstr "Editar Elementos" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Types:" -msgstr "Tipo:" +msgstr "Tipos:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Type:" -msgstr "Tipo:" +msgstr "Añadir Tipo:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Item:" -msgstr "Agregar Item" +msgstr "Añadir Elemento:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add StyleBox Item" -msgstr "Agregar Todos los Items" +msgstr "Añadir Elemento StyleBox" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove Items:" -msgstr "Remover Item" +msgstr "Eliminar Elementos:" #: editor/plugins/theme_editor_plugin.cpp msgid "Remove Class Items" msgstr "Quitar Ítems de Clases" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove Custom Items" -msgstr "Quitar Ítems de Clases" +msgstr "Eliminar Elementos Personalizados" #: editor/plugins/theme_editor_plugin.cpp msgid "Remove All Items" msgstr "Quitar Todos los Ítems" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Theme Item" -msgstr "Items de Tema de la GUI" +msgstr "Agregar Elemento del Theme" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Old Name:" -msgstr "Nombre de Nodo:" +msgstr "Nombre Antiguo:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Import Items" -msgstr "Importar Tema" +msgstr "Importar Elementos" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Default Theme" -msgstr "Por Defecto" +msgstr "Theme Predeterminado" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Editor Theme" msgstr "Editar Tema" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select Another Theme Resource:" -msgstr "Eliminar Recurso" +msgstr "Seleccionar Otro Recurso del Theme:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Another Theme" -msgstr "Importar Tema" +msgstr "Otro Theme" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Confirm Item Rename" -msgstr "Renombrar pista de animación" +msgstr "Confirmar Cambio de Nombre del Elemento" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Cancel Item Rename" -msgstr "Renombrar en Masa" +msgstr "Cancelar Renombrado de Elemento" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Override Item" -msgstr "Reemplazos(Overrides)" +msgstr "Reemplazar Elemento" #: editor/plugins/theme_editor_plugin.cpp msgid "Unpin this StyleBox as a main style." @@ -12438,6 +12483,16 @@ msgstr "Setear Posición de Punto de Curva" msgid "Set Portal Point Position" msgstr "Setear Posición de Punto de Curva" +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Radius" +msgstr "Cambiar Radio de Shape Cilindro" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr "Setear Posición de Entrada de Curva" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "Cambiar Radio de Cilindro" @@ -12724,6 +12779,11 @@ msgstr "Trazando lightmatps" msgid "Class name can't be a reserved keyword" msgstr "El nombre de la clase no puede ser una palabra reservada" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "Llenar la Selección" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "Fin del stack trace de excepción interna" @@ -13212,76 +13272,76 @@ msgstr "Buscar en VisualScript" msgid "Get %s" msgstr "Obtener %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "Nombre de paquete faltante." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "Los segmentos del paquete deben ser de largo no nulo." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" "El caracter '%s' no está permitido en nombres de paquete de aplicación " "Android." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "Un dígito no puede ser el primer caracter en un segmento de paquete." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" "El caracter '%s' no puede ser el primer caracter en un segmento de paquete." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "El paquete debe tener al menos un '.' como separador." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "Seleccionar dispositivo de la lista" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting APK..." msgstr "Exportar Todo" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Uninstalling..." msgstr "Desinstalar" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Installing to device, please wait..." msgstr "Cargando, esperá, por favor..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not install to device: %s" msgstr "No se pudo instanciar la escena!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Running on device..." msgstr "Ejecutando Script Personalizado..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not execute on device." msgstr "No se pudo crear la carpeta." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "No se pudo encontrar la herramienta 'apksigner'." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -13289,7 +13349,7 @@ msgstr "" "La plantilla de exportación de Android no esta instalada en el proyecto. " "Instalala desde el menú de Proyecto." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." @@ -13297,12 +13357,12 @@ msgstr "" "Deben estar configurados o bien Debug Keystore, Debug User Y Debug Password " "o bien ninguno de ellos." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" "Keystore debug no configurada en Configuración del Editor ni en el preset." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." @@ -13310,53 +13370,53 @@ msgstr "" "Deben estar configurados o bien Release Keystore, Release User y Release " "Passoword o bien ninguno de ellos." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" "Release keystore no está configurado correctamente en el preset de " "exportación." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" "Se requiere una ruta válida al SDK de Android en la Configuración del Editor." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "Ruta del SDK de Android inválida en la Configuración del Editor." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "¡No se encontró el directorio 'platform-tools'!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "No se pudo encontrar el comando adb en las Android SDK platform-tools." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" "Por favor, comprueba el directorio del SDK de Android especificado en la " "Configuración del Editor." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "¡No se encontró el directorio 'build-tools'!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" "No se pudo encontrar el comando apksigner en las Android SDK build-tools." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "Clave pública inválida para la expansión de APK." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "Nombre de paquete inválido:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" @@ -13364,37 +13424,22 @@ msgstr "" "El módulo \"GodotPaymentV3\" incluido en el ajuste de proyecto \"android/" "modules\" es inválido (cambiado en Godot 3.2.2).\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "\"Use Custom Build\" debe estar activado para usar los plugins." -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" -"\"Degrees Of Freedom\" sólo es válido cuando \"Xr Mode\" es \"Oculus Mobile " -"VR\"." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" "\"Hand Tracking\" sólo es válido cuando \"Xr Mode\" es \"Oculus Mobile VR\"." -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" -"\"Focus Awareness\" sólo es válido cuando \"Xr Mode\" es \"Oculus Mobile VR" -"\"." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" "\"Export AAB\" sólo es válido cuando \"Use Custom Build\" está activado." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13402,58 +13447,58 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Signing release %s..." msgstr "" "Examinando Archivos,\n" "Aguardá, por favor." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not find keystore, unable to export." msgstr "No se pudo abrir la plantilla para exportar:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Verifying %s..." msgstr "Agregando %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting for Android" msgstr "Exportar Todo" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" "¡Nombre de archivo inválido! Android App Bundle requiere la extensión *.aab." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "La Expansión APK no es compatible con Android App Bundle." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "¡Nombre de archivo inválido! Android APK requiere la extensión *.apk." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." @@ -13462,7 +13507,7 @@ msgstr "" "información de la versión para ello. Por favor, reinstalá desde el menú " "'Proyecto'." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13475,26 +13520,26 @@ msgstr "" "Por favor, reinstalá la plantilla de compilación de Android desde el menú " "'Proyecto'." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files to gradle project\n" msgstr "No se pudo obtener project.godot en la ruta de proyecto." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not write expansion package file!" msgstr "No se pudo escribir el archivo:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "Construir Proyecto Android (gradle)" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." @@ -13503,11 +13548,11 @@ msgstr "" "También podés visitar docs.godotengine.org para consultar la documentación " "de compilación de Android." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "Moviendo salida" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." @@ -13515,24 +13560,24 @@ msgstr "" "No se puede copiar y renombrar el archivo de exportación, comprobá el " "directorio del proyecto de gradle para ver los resultados." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "No se encontró la animación: '%s'" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Creating APK..." msgstr "Creando contornos..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" "Could not find template APK to export:\n" "%s" msgstr "No se pudo abrir la plantilla para exportar:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13540,21 +13585,21 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Adding files..." msgstr "Agregando %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files" msgstr "No se pudo escribir el archivo:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -14107,6 +14152,14 @@ msgstr "" "NavigationMeshInstance debe ser un hijo o nieto de un nodo Navigation. Solo " "provee datos de navegación." +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14436,6 +14489,14 @@ msgstr "Debe ser una extensión válida." msgid "Enable grid minimap." msgstr "Activar minimapa de grilla." +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14488,6 +14549,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "El tamaño del viewport debe ser mayor a 0 para poder renderizar." +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " @@ -14541,6 +14606,41 @@ msgstr "Asignación a uniform." msgid "Constants cannot be modified." msgstr "Las constantes no pueden modificarse." +#~ msgid "Make Rest Pose (From Bones)" +#~ msgstr "Crear Pose de Descanso" + +#~ msgid "Bottom" +#~ msgstr "Fondo" + +#~ msgid "Left" +#~ msgstr "Izquierda" + +#~ msgid "Right" +#~ msgstr "Derecha" + +#~ msgid "Front" +#~ msgstr "Frente" + +#~ msgid "Rear" +#~ msgstr "Detrás" + +#~ msgid "Nameless gizmo" +#~ msgstr "Gizmo sin nombre" + +#~ msgid "" +#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile " +#~ "VR\"." +#~ msgstr "" +#~ "\"Degrees Of Freedom\" sólo es válido cuando \"Xr Mode\" es \"Oculus " +#~ "Mobile VR\"." + +#~ msgid "" +#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" +#~ "\"." +#~ msgstr "" +#~ "\"Focus Awareness\" sólo es válido cuando \"Xr Mode\" es \"Oculus Mobile " +#~ "VR\"." + #~ msgid "Package Contents:" #~ msgstr "Contenido del Paquete:" @@ -16517,9 +16617,6 @@ msgstr "Las constantes no pueden modificarse." #~ msgid "Images:" #~ msgstr "Imágenes:" -#~ msgid "Group" -#~ msgstr "Grupo" - #~ msgid "Sample Conversion Mode: (.wav files):" #~ msgstr "Modo de Conversión de Muestras: (archivos .wav):" diff --git a/editor/translations/et.po b/editor/translations/et.po index 13019cd9e3..2c59035681 100644 --- a/editor/translations/et.po +++ b/editor/translations/et.po @@ -1006,7 +1006,7 @@ msgstr "" msgid "Dependencies" msgstr "Sõltuvused" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Ressurss" @@ -1659,13 +1659,13 @@ msgstr "" "Lülitage projekti sätetes sisse „Impordi ETC” või keelake „Draiveri " "tagasilangemine lubatud”." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2051,7 +2051,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "(Taas)impordin varasid" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "Ülaosa" @@ -2534,6 +2534,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "Võta tagasi" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "Tee uuesti" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "" @@ -3169,6 +3195,10 @@ msgid "Merge With Existing" msgstr "Liida olemasolevaga" #: editor/editor_node.cpp +msgid "Apply MeshInstance Transforms" +msgstr "" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "" @@ -3414,6 +3444,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "" @@ -5470,6 +5504,17 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Locked" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Rühmad" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6369,7 +6414,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -6955,6 +7004,15 @@ msgstr "Liiguta Bezieri punkte" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Occluder Set Transform" +msgstr "" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Kustuta sõlm(ed)" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7449,11 +7507,12 @@ msgid "Skeleton2D" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "Laadi vaikimisi" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" +msgid "Overwrite Rest Pose" msgstr "" #: editor/plugins/skeleton_editor_plugin.cpp @@ -7481,6 +7540,65 @@ msgid "Perspective" msgstr "Perspektiiv" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Perspective" +msgstr "Perspektiiv" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "Perspektiiv" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Perspective" +msgstr "Perspektiiv" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Perspective" +msgstr "Perspektiiv" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Perspective" +msgstr "Perspektiiv" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7599,42 +7717,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -7898,6 +7996,11 @@ msgid "View Portal Culling" msgstr "Vaateakna sätted" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "Vaateakna sätted" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "Sätted..." @@ -7963,7 +8066,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -11923,6 +12026,14 @@ msgstr "" msgid "Set Portal Point Position" msgstr "" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Position" +msgstr "" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12206,6 +12317,11 @@ msgstr "" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "Poolresolutioon" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -12675,161 +12791,150 @@ msgstr "" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting APK..." msgstr "Ekspordi..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Uninstalling..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Installing to device, please wait..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not execute on device." msgstr "Ei saanud luua kausta." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -12837,58 +12942,58 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Verifying %s..." msgstr "Sätted..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -12896,56 +13001,56 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "Paigutuse nime ei leitud!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Creating APK..." msgstr "Sätted..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -12953,20 +13058,20 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Adding files..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files" msgstr "Ei saanud luua kausta." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13421,6 +13526,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -13710,6 +13823,14 @@ msgstr "Peab kasutama kehtivat laiendit." msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13750,6 +13871,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "Vaateakne suurus peab olema suurem kui 0, et kuvada." +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/eu.po b/editor/translations/eu.po index 7b6934ff33..ddcf8f5d37 100644 --- a/editor/translations/eu.po +++ b/editor/translations/eu.po @@ -1005,7 +1005,7 @@ msgstr "" msgid "Dependencies" msgstr "Mendekotasunak" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Baliabidea" @@ -1649,13 +1649,13 @@ msgid "" "Enabled'." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2032,7 +2032,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "Aktiboak (bir)inportatzen" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "" @@ -2510,6 +2510,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "Desegin" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "Berregin" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "" @@ -3138,6 +3164,11 @@ msgid "Merge With Existing" msgstr "" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Animazioaren transformazioa aldatu" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "" @@ -3382,6 +3413,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "" @@ -5447,6 +5482,16 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Locked" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Grouped" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6347,7 +6392,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -6933,6 +6982,15 @@ msgstr "Mugitu Bezier puntuak" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Occluder Set Transform" +msgstr "" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Blend4 nodoa" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7427,12 +7485,13 @@ msgid "Skeleton2D" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" +msgid "Reset to Rest Pose" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "gainidatzi:" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7459,6 +7518,60 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7568,42 +7681,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -7867,6 +7960,10 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Occlusion Culling" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "" @@ -7932,7 +8029,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -11889,6 +11986,14 @@ msgstr "" msgid "Set Portal Point Position" msgstr "" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Position" +msgstr "" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12170,6 +12275,10 @@ msgstr "" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Build Solution" +msgstr "" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -12637,164 +12746,153 @@ msgstr "" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting APK..." msgstr "Esportatu..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Uninstalling..." msgstr "Desinstalatu" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Installing to device, please wait..." msgstr "" "Fitxategiak arakatzen,\n" "Itxaron mesedez..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not execute on device." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -12802,60 +12900,60 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Signing release %s..." msgstr "" "Fitxategiak arakatzen,\n" "Itxaron mesedez..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -12863,55 +12961,55 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "Paketearen edukia:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -12919,19 +13017,19 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Adding files..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13382,6 +13480,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -13672,6 +13778,14 @@ msgstr "Baliozko luzapena erabili behar du." msgid "Enable grid minimap." msgstr "Gaitu atxikitzea" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13712,6 +13826,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/fa.po b/editor/translations/fa.po index bb761cf137..2d086fe827 100644 --- a/editor/translations/fa.po +++ b/editor/translations/fa.po @@ -21,12 +21,13 @@ # ItzMiad44909858f5774b6d <maidggg@gmail.com>, 2020. # YASAN <yasandev@gmail.com>, 2021. # duniyal ras <duniyalr@gmail.com>, 2021. +# عبدالرئوف عابدی <abdolraoofabedi@gmail.com>, 2021. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2021-07-13 06:13+0000\n" -"Last-Translator: duniyal ras <duniyalr@gmail.com>\n" +"PO-Revision-Date: 2021-08-27 08:25+0000\n" +"Last-Translator: عبدالرئوف عابدی <abdolraoofabedi@gmail.com>\n" "Language-Team: Persian <https://hosted.weblate.org/projects/godot-engine/" "godot/fa/>\n" "Language: fa\n" @@ -34,7 +35,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.7.2-dev\n" +"X-Generator: Weblate 4.8.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -390,7 +391,6 @@ msgstr "در حال اتصال..." #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "animation" msgstr "انیمیشن" @@ -400,9 +400,8 @@ msgstr "انیمیشن پلیر نمی تواند خود را انیمیت کن #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "property '%s'" -msgstr "ویژگی '%s' موجود نیست." +msgstr "ویژگی \"٪ s\"" #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -610,9 +609,8 @@ msgid "Go to Previous Step" msgstr "برو به گام پیشین" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Apply Reset" -msgstr "بازنشانی بزرگنمایی" +msgstr "بازنشانی را اعمال کنید" #: editor/animation_track_editor.cpp msgid "Optimize Animation" @@ -631,9 +629,8 @@ msgid "Use Bezier Curves" msgstr "بکارگیری منحنی بِزیِر" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Create RESET Track(s)" -msgstr "جاگذاری مسیر ها" +msgstr "ایجاد آهنگ (های) بازنشانی" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" @@ -975,12 +972,13 @@ msgid "Create New %s" msgstr "ساختن %s جدید" #: editor/create_dialog.cpp editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy msgid "No results for \"%s\"." -msgstr "" +msgstr "هیچ نتیجه ای برای \"٪ s\" وجود ندارد." #: editor/create_dialog.cpp editor/property_selector.cpp msgid "No description available for %s." -msgstr "" +msgstr "توضیحی برای٪ s در دسترس نیست." #: editor/create_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp @@ -1040,7 +1038,7 @@ msgstr "" msgid "Dependencies" msgstr "بستگیها" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "منبع" @@ -1085,7 +1083,10 @@ msgid "" "Remove the selected files from the project? (Cannot be undone.)\n" "Depending on your filesystem configuration, the files will either be moved " "to the system trash or deleted permanently." -msgstr "آیا پروندههای انتخاب شده از طرح حذف شوند؟ (غیر قابل بازیابی)" +msgstr "" +"فایلهای انتخابی از پروژه حذف شوند؟ (قابل واگرد نیست.)\n" +"بسته به پیکربندی سیستم فایل شما ، فایل ها یا به سطل زباله سیستم منتقل می " +"شوند و یا برای همیشه حذف می شوند." #: editor/dependency_editor.cpp #, fuzzy @@ -1096,10 +1097,10 @@ msgid "" "Depending on your filesystem configuration, the files will either be moved " "to the system trash or deleted permanently." msgstr "" -"پروندههایی که میخواهید حذف شوند برای منابع دیگر مورد نیاز هستند تا کار " -"کنند.\n" -"آیا در هر صورت حذف شوند؟(بدون برگشت)\n" -"شما میتوانید فایل های حذف شده را در سطل زباله سیستم عامل خود بیابید ." +"فایل های در حال حذف توسط منابع دیگر مورد نیاز است تا بتوانند کار کنند.\n" +"به هر حال آنها را حذف کنم؟ (قابل واگرد نیست.)\n" +"بسته به پیکربندی سیستم فایل شما ، فایل ها یا به سطل زباله سیستم منتقل می " +"شوند و یا برای همیشه حذف می شوند." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1687,13 +1688,13 @@ msgid "" "Enabled'." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2073,7 +2074,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "(در حال) وارد کردن دوباره عست ها" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "" @@ -2551,6 +2552,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "عقبگرد" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "جلوگرد" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "" @@ -3194,6 +3221,11 @@ msgid "Merge With Existing" msgstr "ترکیب کردن با نمونه ی موجود" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "تغییر دگرشکل متحرک" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "گشودن و اجرای یک اسکریپت" @@ -3448,6 +3480,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "" @@ -5645,6 +5681,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "همهی انتخاب ها" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "گروه ها" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6598,7 +6646,13 @@ msgid "Remove Selected Item" msgstr "حذف مورد انتخابشده" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +#, fuzzy +msgid "Import from Scene (Ignore Transforms)" +msgstr "وارد کردن از صحنه" + +#: editor/plugins/mesh_library_editor_plugin.cpp +#, fuzzy +msgid "Import from Scene (Apply Transforms)" msgstr "وارد کردن از صحنه" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7204,6 +7258,16 @@ msgstr "حذف کن" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "انتقال را در انیمیشن تغییر بده" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "ساختن گره" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7743,11 +7807,12 @@ msgid "Skeleton2D" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "بارگیری پیش فرض" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" +msgid "Overwrite Rest Pose" msgstr "" #: editor/plugins/skeleton_editor_plugin.cpp @@ -7777,6 +7842,61 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Orthogonal" +msgstr "دکمهٔ راست." + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7894,42 +8014,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -8201,6 +8301,11 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "ویرایش سیگنال" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy msgid "Settings..." @@ -8267,8 +8372,9 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" -msgstr "" +#, fuzzy +msgid "Unnamed Gizmo" +msgstr "پروژه بی نام" #: editor/plugins/sprite_editor_plugin.cpp #, fuzzy @@ -12485,6 +12591,15 @@ msgstr "برداشتن موج" msgid "Set Portal Point Position" msgstr "برداشتن موج" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr "برداشتن موج" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12791,6 +12906,11 @@ msgstr "" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "همهی انتخاب ها" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -13304,165 +13424,154 @@ msgstr "حذف گره اسکریپتِ دیداری" msgid "Get %s" msgstr "گرفتن %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting APK..." msgstr "صدور" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Uninstalling..." msgstr "نصب کردن" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Installing to device, please wait..." msgstr "بارگیری" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not install to device: %s" msgstr "نمیتواند یک پوشه ایجاد شود." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not execute on device." msgstr "ناتوان در ساختن پوشه." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Invalid package name:" msgstr "نام نامعتبر." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13470,60 +13579,60 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not find keystore, unable to export." msgstr "نمیتواند یک پوشه ایجاد شود." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Verifying %s..." msgstr "ترجیحات" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting for Android" msgstr "صدور" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13531,58 +13640,58 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not write expansion package file!" msgstr "نمیتواند یک پوشه ایجاد شود." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "طول انیمیشن (به ثانیه)." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Creating APK..." msgstr "در حال اتصال..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" "Could not find template APK to export:\n" "%s" msgstr "نمیتواند یک پوشه ایجاد شود." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13590,21 +13699,21 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Adding files..." msgstr "یافتن" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files" msgstr "نمیتواند یک پوشه ایجاد شود." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -14117,6 +14226,14 @@ msgstr "" "NavigationMeshInstance باید یک فرزند یا نوهی یک گره Navigation باشد. این " "تنها دادهی پیمایش را فراهم میکند." +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14422,6 +14539,14 @@ msgstr "باید یک پسوند معتبر بکار گیرید." msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp #, fuzzy msgid "" @@ -14470,6 +14595,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/fi.po b/editor/translations/fi.po index ffedccec28..79a1e722b5 100644 --- a/editor/translations/fi.po +++ b/editor/translations/fi.po @@ -16,7 +16,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2021-08-10 21:40+0000\n" +"PO-Revision-Date: 2021-09-21 15:22+0000\n" "Last-Translator: Tapani Niemi <tapani.niemi@kapsi.fi>\n" "Language-Team: Finnish <https://hosted.weblate.org/projects/godot-engine/" "godot/fi/>\n" @@ -25,7 +25,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.8-dev\n" +"X-Generator: Weblate 4.9-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -374,15 +374,13 @@ msgstr "Animaatio: lisää" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "node '%s'" -msgstr "Ei voida avata tiedostoa '%s'." +msgstr "solmu '%s'" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "animation" -msgstr "Animaatio" +msgstr "animaatio" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." @@ -390,9 +388,8 @@ msgstr "AnimationPlayer ei voi animoida itseään, vain muita toistimia." #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "property '%s'" -msgstr "Ominaisuutta '%s' ei löytynyt." +msgstr "ominaisuus '%s'" #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -1025,7 +1022,7 @@ msgstr "" msgid "Dependencies" msgstr "Riippuvuudet" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Resurssi" @@ -1685,13 +1682,13 @@ msgstr "" "Kytke 'Import Pvrtc' päälle projektin asetuksista tai poista 'Driver " "Fallback Enabled' asetus." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "Mukautettua debug-vientimallia ei löytynyt." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2072,7 +2069,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "Tuodaan (uudelleen) assetteja" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "Yläpuoli" @@ -2309,6 +2306,9 @@ msgid "" "Update Continuously is enabled, which can increase power usage. Click to " "disable it." msgstr "" +"Pyörii editori-ikkunan piirtäessä.\n" +"Päivitä jatkuvasti -asetus on päällä, mikä voi lisätä virrankulutusta. " +"Napsauta kytkeäksesi se pois päältä." #: editor/editor_node.cpp msgid "Spins when the editor window redraws." @@ -2584,6 +2584,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "Nykyistä skeneä ei ole tallennettu. Avaa joka tapauksessa?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "Peru" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "Tee uudelleen" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "Ei voida ladata uudelleen skeneä, jota ei ole koskaan tallennettu." @@ -3263,6 +3289,11 @@ msgid "Merge With Existing" msgstr "Yhdistä olemassaolevaan" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Animaatio: muuta muunnosta" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "Avaa ja suorita skripti" @@ -3521,6 +3552,10 @@ msgstr "" "Valittu resurssi (%s) ei vastaa mitään odotettua tyyppiä tälle " "ominaisuudelle (%s)." +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "Tee yksilölliseksi" @@ -3590,10 +3625,9 @@ msgid "Did you forget the '_run' method?" msgstr "Unohditko '_run' metodin?" #: editor/editor_spin_slider.cpp -#, fuzzy msgid "Hold %s to round to integers. Hold Shift for more precise changes." msgstr "" -"Pidä Ctrl pohjassa pyöristääksesi kokonaislukuun. Pidä Shift pohjassa " +"Pidä %s pohjassa pyöristääksesi kokonaislukuun. Pidä Shift pohjassa " "tarkempia muutoksia varten." #: editor/editor_sub_scene.cpp @@ -3614,21 +3648,19 @@ msgstr "Tuo solmusta:" #: editor/export_template_manager.cpp msgid "Open the folder containing these templates." -msgstr "" +msgstr "Avaa kansio, joka sisältää nämä vientimallit." #: editor/export_template_manager.cpp msgid "Uninstall these templates." -msgstr "" +msgstr "Poista näiden vientimallien asennus." #: editor/export_template_manager.cpp -#, fuzzy msgid "There are no mirrors available." -msgstr "Tiedostoa '%s' ei ole." +msgstr "Peilipalvelimia ei ole saatavilla." #: editor/export_template_manager.cpp -#, fuzzy msgid "Retrieving the mirror list..." -msgstr "Noudetaan peilipalvelimia, hetkinen..." +msgstr "Noudetaan luetteloa peilipalvelimista..." #: editor/export_template_manager.cpp msgid "Starting the download..." @@ -3688,7 +3720,6 @@ msgid "Error getting the list of mirrors." msgstr "Virhe peilipalvelimien listan haussa." #: editor/export_template_manager.cpp -#, fuzzy msgid "Error parsing JSON with the list of mirrors. Please report this issue!" msgstr "" "Virhe jäsennettäessä peilipalvelimien JSON-listaa. Raportoi tämä ongelma, " @@ -3753,19 +3784,16 @@ msgid "Can't open the export templates file." msgstr "Vientimallien tiedostoa ei voida avata." #: editor/export_template_manager.cpp -#, fuzzy msgid "Invalid version.txt format inside the export templates file: %s." -msgstr "Vientimalli sisältää virheellisen version.txt tiedoston: %s." +msgstr "Vientimalli sisältää virheellisen version.txt tallennusmuodon: %s." #: editor/export_template_manager.cpp -#, fuzzy msgid "No version.txt found inside the export templates file." -msgstr "Vientimalleista ei löytynyt version.txt tiedostoa." +msgstr "Vientimallista ei löytynyt version.txt tiedostoa." #: editor/export_template_manager.cpp -#, fuzzy msgid "Error creating path for extracting templates:" -msgstr "Virhe luotaessa polkua malleille:" +msgstr "Virhe luotaessa polkua vientimallien purkamista varten:" #: editor/export_template_manager.cpp msgid "Extracting Export Templates" @@ -3776,9 +3804,8 @@ msgid "Importing:" msgstr "Tuodaan:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Remove templates for the version '%s'?" -msgstr "Poista mallin versio '%s'?" +msgstr "Poista vientimallit versiolle '%s'?" #: editor/export_template_manager.cpp msgid "Uncompressing Android Build Sources" @@ -3794,11 +3821,11 @@ msgstr "Nykyinen versio:" #: editor/export_template_manager.cpp msgid "Export templates are missing. Download them or install from a file." -msgstr "" +msgstr "Vientimallit puuttuvat. Lataa ne tai asenna ne tiedostosta." #: editor/export_template_manager.cpp msgid "Export templates are installed and ready to be used." -msgstr "" +msgstr "Vientimallit ovat asennettu ja valmiita käyttöä varten." #: editor/export_template_manager.cpp msgid "Open Folder" @@ -3806,30 +3833,27 @@ msgstr "Avaa kansio" #: editor/export_template_manager.cpp msgid "Open the folder containing installed templates for the current version." -msgstr "" +msgstr "Avaa kansio, joka sisältää vientimallit nykyistä versiota varten." #: editor/export_template_manager.cpp msgid "Uninstall" msgstr "Poista asennus" #: editor/export_template_manager.cpp -#, fuzzy msgid "Uninstall templates for the current version." -msgstr "Laskurin alkuarvo" +msgstr "Poista vientimallien asennus nykyiseltä versiolta." #: editor/export_template_manager.cpp msgid "Download from:" msgstr "Lataa sijannista:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Open in Web Browser" -msgstr "Suorita selaimessa" +msgstr "Avaa selaimessa" #: editor/export_template_manager.cpp -#, fuzzy msgid "Copy Mirror URL" -msgstr "Kopioi virhe" +msgstr "Kopioi peilipalvelimen web-osoite" #: editor/export_template_manager.cpp msgid "Download and Install" @@ -4070,7 +4094,7 @@ msgstr "Nimeä uudelleen..." #: editor/filesystem_dock.cpp msgid "Focus the search box" -msgstr "" +msgstr "Kohdista hakukenttään" #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -4416,18 +4440,16 @@ msgid "Extra resource options." msgstr "Ylimääräiset resurssivalinnat." #: editor/inspector_dock.cpp -#, fuzzy msgid "Edit Resource from Clipboard" -msgstr "Muokkaa resurssien leikepöytää" +msgstr "Muokkaa leikepöydän resurssia" #: editor/inspector_dock.cpp msgid "Copy Resource" msgstr "Kopioi resurssi" #: editor/inspector_dock.cpp -#, fuzzy msgid "Make Resource Built-In" -msgstr "Tee sisäänrakennettu" +msgstr "Tee resurssista sisäänrakennettu" #: editor/inspector_dock.cpp msgid "Go to the previous edited object in history." @@ -4442,9 +4464,8 @@ msgid "History of recently edited objects." msgstr "Viimeisimmin muokatut objektit." #: editor/inspector_dock.cpp -#, fuzzy msgid "Open documentation for this object." -msgstr "Avaa dokumentaatio" +msgstr "Avaa dokumentaatio tälle objektille." #: editor/inspector_dock.cpp editor/scene_tree_dock.cpp msgid "Open Documentation" @@ -4455,9 +4476,8 @@ msgid "Filter properties" msgstr "Suodata ominaisuuksia" #: editor/inspector_dock.cpp -#, fuzzy msgid "Manage object properties." -msgstr "Objektin ominaisuudet." +msgstr "Hallitse objektin ominaisuuksia." #: editor/inspector_dock.cpp msgid "Changes may be lost!" @@ -4702,9 +4722,8 @@ msgid "Blend:" msgstr "Sulautus:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Parameter Changed:" -msgstr "Parametri muutettu" +msgstr "Parametri muutettu:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -5434,7 +5453,7 @@ msgstr "Kaikki" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Search templates, projects, and demos" -msgstr "" +msgstr "Hae malleja, projekteja ja esimerkkejä" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Search assets (excluding templates, projects, and demos)" @@ -5641,6 +5660,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "Siirrä CanvasItem \"%s\" koordinaattiin (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "Lukitse valitut" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Ryhmät" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -5826,31 +5857,27 @@ msgstr "Valintatila" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Drag: Rotate selected node around pivot." -msgstr "Poista valittu solmu tai siirtymä." +msgstr "Vedä: kierrä valittua solmua kääntökeskiön ympäri." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Alt+Drag: Move selected node." -msgstr "Alt+Vedä: Siirrä" +msgstr "Alt+Vedä: Siirrä valittua solmua." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "V: Set selected node's pivot position." -msgstr "Poista valittu solmu tai siirtymä." +msgstr "V: Aseta nykyisen solmun kääntökeskiön sijainti." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Alt+RMB: Show list of all nodes at position clicked, including locked." msgstr "" -"Näytä lista kaikista napsautetussa kohdassa olevista objekteista\n" -"(sama kuin Alt + Hiiren oikea painike valintatilassa)." +"Alt+Hiiren oikea painike: Näytä lista kaikista napsautetussa kohdassa " +"olevista solmuista, mukaan lukien lukituista." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "RMB: Add node at position clicked." -msgstr "" +msgstr "Hiiren oikea painike: Lisää solmu napsautettuun paikkaan." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -6088,14 +6115,12 @@ msgid "Clear Pose" msgstr "Tyhjennä asento" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Add Node Here" -msgstr "Lisää solmu" +msgstr "Lisää solmu tähän" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Instance Scene Here" -msgstr "Luo ilmentymä skenestä tai skeneistä" +msgstr "Luo ilmentymä skenestä tähän" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Multiply grid step by 2" @@ -6111,49 +6136,43 @@ msgstr "Panorointinäkymä" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 3.125%" -msgstr "" +msgstr "Aseta lähennystasoksi 3.125%" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 6.25%" -msgstr "" +msgstr "Aseta lähennystasoksi 6.25%" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 12.5%" -msgstr "" +msgstr "Aseta lähennystasoksi 12.5%" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 25%" -msgstr "Loitonna" +msgstr "Aseta lähennystasoksi 25%" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 50%" -msgstr "Loitonna" +msgstr "Aseta lähennystasoksi 50%" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 100%" -msgstr "Loitonna" +msgstr "Aseta lähennystasoksi 100%" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 200%" -msgstr "Loitonna" +msgstr "Aseta lähennystasoksi 200%" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 400%" -msgstr "Loitonna" +msgstr "Aseta lähennystasoksi 400%" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 800%" -msgstr "Loitonna" +msgstr "Aseta lähennystasoksi 800%" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 1600%" -msgstr "" +msgstr "Aseta lähennystasoksi 1600%" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" @@ -6398,9 +6417,8 @@ msgid "Couldn't create a single convex collision shape." msgstr "Ei voitu luoda yksittäistä konveksia törmäysmuotoa." #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Simplified Convex Shape" -msgstr "Luo yksittäinen konveksi muoto" +msgstr "Luo pelkistetty konveksi muoto" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Single Convex Shape" @@ -6435,9 +6453,8 @@ msgid "No mesh to debug." msgstr "Ei meshiä debugattavaksi." #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Mesh has no UV in layer %d." -msgstr "Mallilla ei ole UV-kanavaa tällä kerroksella" +msgstr "Meshillä ei ole UV-kanavaa kerroksella %d." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "MeshInstance lacks a Mesh!" @@ -6502,9 +6519,8 @@ msgstr "" "Tämä on nopein (mutta epätarkin) vaihtoehto törmäystunnistukselle." #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Simplified Convex Collision Sibling" -msgstr "Luo yksittäisen konveksin törmäyksen sisar" +msgstr "Luo pelkistetty konveksin törmäyksen sisar" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "" @@ -6512,20 +6528,24 @@ msgid "" "This is similar to single collision shape, but can result in a simpler " "geometry in some cases, at the cost of accuracy." msgstr "" +"Luo pelkistetyn konveksin törmäysmuodon.\n" +"Tämä on samankaltainen kuin yksittäinen törmäysmuoto, mutta voi johtaa " +"joissakin tapauksissa yksinkertaisempaan geometriaan tarkkuuden " +"kustannuksella." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Multiple Convex Collision Siblings" msgstr "Luo useita konvekseja törmäysmuotojen sisaria" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "" "Creates a polygon-based collision shape.\n" "This is a performance middle-ground between a single convex collision and a " "polygon-based collision." msgstr "" "Luo polygonipohjaisen törmäysmuodon.\n" -"Tämä on suorituskyvyltään välimaastoa kahdelle yllä olevalle vaihtoehdolle." +"Tämä on suorituskyvyltään yksittäisen konveksin törmäyksen ja " +"polygonipohjaisen törmäyksen välimaastoa." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." @@ -6592,7 +6612,13 @@ msgid "Remove Selected Item" msgstr "Poista valitut kohteet" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +#, fuzzy +msgid "Import from Scene (Ignore Transforms)" +msgstr "Tuo skenestä" + +#: editor/plugins/mesh_library_editor_plugin.cpp +#, fuzzy +msgid "Import from Scene (Apply Transforms)" msgstr "Tuo skenestä" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7171,24 +7197,30 @@ msgid "ResourcePreloader" msgstr "Resurssien esilataaja" #: editor/plugins/room_manager_editor_plugin.cpp -#, fuzzy msgid "Flip Portals" -msgstr "Käännä vaakasuorasti" +msgstr "Käännä portaalit" #: editor/plugins/room_manager_editor_plugin.cpp -#, fuzzy msgid "Room Generate Points" -msgstr "Luotujen pisteiden määrä:" +msgstr "Luo huoneen pisteet" #: editor/plugins/room_manager_editor_plugin.cpp -#, fuzzy msgid "Generate Points" -msgstr "Luotujen pisteiden määrä:" +msgstr "Luo pisteet" #: editor/plugins/room_manager_editor_plugin.cpp -#, fuzzy msgid "Flip Portal" -msgstr "Käännä vaakasuorasti" +msgstr "Käännä portaali" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "Tyhjennä muunnos" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Luo solmu" #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" @@ -7693,12 +7725,14 @@ msgid "Skeleton2D" msgstr "Skeleton2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "Tee lepoasento (luista)" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "Aseta luut lepoasentoon" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "Aseta luut lepoasentoon" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "Ylikirjoita" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7725,6 +7759,71 @@ msgid "Perspective" msgstr "Perspektiivi" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Orthogonal" +msgstr "Ortogonaalinen" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Perspective" +msgstr "Perspektiivi" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Orthogonal" +msgstr "Ortogonaalinen" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "Perspektiivi" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Left Orthogonal" +msgstr "Ortogonaalinen" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Perspective" +msgstr "Perspektiivi" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Orthogonal" +msgstr "Ortogonaalinen" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Orthogonal" +msgstr "Ortogonaalinen" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Perspective" +msgstr "Perspektiivi" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Orthogonal" +msgstr "Ortogonaalinen" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Perspective" +msgstr "Perspektiivi" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "Muunnos keskeytetty." @@ -7751,20 +7850,17 @@ msgid "None" msgstr "Ei mitään" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Rotate" -msgstr "Kiertotila" +msgstr "Kierrä" #. TRANSLATORS: This refers to the movement that changes the position of an object. #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Translate" -msgstr "Siirrä:" +msgstr "Siirrä" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Scale" -msgstr "Skaalaus:" +msgstr "Skaalaa" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scaling: " @@ -7787,52 +7883,44 @@ msgid "Animation Key Inserted." msgstr "Animaatioavain lisätty." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Pitch:" -msgstr "Nyökkäys (pitch)" +msgstr "Nyökkäyskulma:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Yaw:" -msgstr "" +msgstr "Kääntymiskulma:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Size:" -msgstr "Koko: " +msgstr "Koko:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Objects Drawn:" -msgstr "Objekteja piirretty" +msgstr "Objekteja piirretty:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Material Changes:" -msgstr "Materiaalimuutokset" +msgstr "Materiaalimuutokset:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Shader Changes:" -msgstr "Sävytinmuutokset" +msgstr "Sävytinmuutokset:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Surface Changes:" -msgstr "Pintamuutokset" +msgstr "Pintamuutokset:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Draw Calls:" -msgstr "Piirtokutsuja" +msgstr "Piirtokutsuja:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Vertices:" -msgstr "Kärkipisteet" +msgstr "Kärkipisteitä:" #: editor/plugins/spatial_editor_plugin.cpp msgid "FPS: %d (%s ms)" -msgstr "" +msgstr "FPS: %d (%s ms)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Top View." @@ -7843,42 +7931,22 @@ msgid "Bottom View." msgstr "Pohjanäkymä." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "Pohja" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "Vasen näkymä." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "Vasen" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "Oikea näkymä." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "Oikea" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "Etunäkymä." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "Etu" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "Takanäkymä." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "Taka" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "Kohdista muunnos näkymään" @@ -7987,9 +8055,8 @@ msgid "Freelook Slow Modifier" msgstr "Liikkumisen hitauskerroin" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Toggle Camera Preview" -msgstr "Muuta kameran kokoa" +msgstr "Aseta kameran esikatselu" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Rotation Locked" @@ -8011,9 +8078,8 @@ msgstr "" "Sitä ei voi käyttää luotettavana pelin sisäisenä tehokkuuden ilmaisimena." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Convert Rooms" -msgstr "Muunna muotoon %s" +msgstr "Muunna huoneet" #: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" @@ -8035,7 +8101,6 @@ msgstr "" "läpi (\"röntgen\")." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Snap Nodes to Floor" msgstr "Tarraa solmut lattiaan" @@ -8053,7 +8118,7 @@ msgstr "Käytä tarttumista" #: editor/plugins/spatial_editor_plugin.cpp msgid "Converts rooms for portal culling." -msgstr "" +msgstr "Muunna huoneet portaalien harvennukseen." #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" @@ -8149,9 +8214,13 @@ msgid "View Grid" msgstr "Näytä ruudukko" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View Portal Culling" -msgstr "Näyttöruudun asetukset" +msgstr "Näytä portaalien harvennus" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "Näytä portaalien harvennus" #: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp @@ -8219,8 +8288,9 @@ msgid "Post" msgstr "Jälki" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" -msgstr "Nimetön muokkain" +#, fuzzy +msgid "Unnamed Gizmo" +msgstr "Nimetön projekti" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Mesh2D" @@ -8471,221 +8541,196 @@ msgid "TextureRegion" msgstr "Tekstuurialue" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Colors" -msgstr "Väri" +msgstr "Värit" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Fonts" -msgstr "Fontti" +msgstr "Fontit" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Icons" -msgstr "Kuvake" +msgstr "Kuvakkeet" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Styleboxes" -msgstr "StyleBox" +msgstr "Tyylilaatikot" #: editor/plugins/theme_editor_plugin.cpp msgid "{num} color(s)" -msgstr "" +msgstr "{num} väriä" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "No colors found." -msgstr "Aliresursseja ei löydetty." +msgstr "Värejä ei löytynyt." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "{num} constant(s)" -msgstr "Vakiot" +msgstr "{num} vakiota" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "No constants found." -msgstr "Värivakio." +msgstr "Vakioita ei löytynyt." #: editor/plugins/theme_editor_plugin.cpp msgid "{num} font(s)" -msgstr "" +msgstr "{num} fonttia" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "No fonts found." -msgstr "Ei löytynyt!" +msgstr "Fontteja ei löytynyt." #: editor/plugins/theme_editor_plugin.cpp msgid "{num} icon(s)" -msgstr "" +msgstr "{num} kuvaketta" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "No icons found." -msgstr "Ei löytynyt!" +msgstr "Kuvakkeita ei löytynyt." #: editor/plugins/theme_editor_plugin.cpp msgid "{num} stylebox(es)" -msgstr "" +msgstr "{num} tyylilaatikkoa" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "No styleboxes found." -msgstr "Aliresursseja ei löydetty." +msgstr "Tyylilaatikkoja ei löytynyt." #: editor/plugins/theme_editor_plugin.cpp msgid "{num} currently selected" -msgstr "" +msgstr "{num} tällä hetkellä valittuna" #: editor/plugins/theme_editor_plugin.cpp msgid "Nothing was selected for the import." -msgstr "" +msgstr "Mitään ei ollut valittuna tuontia varten." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Importing Theme Items" -msgstr "Tuo teema" +msgstr "Teeman osien tuonti" #: editor/plugins/theme_editor_plugin.cpp msgid "Importing items {n}/{n}" -msgstr "" +msgstr "Tuodaan teeman osia {n}/{n}" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Updating the editor" -msgstr "Poistu editorista?" +msgstr "Päivitetään editoria" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Finalizing" -msgstr "Analysoidaan" +msgstr "Viimeistellään" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Filter:" -msgstr "Suodatin: " +msgstr "Suodatin:" #: editor/plugins/theme_editor_plugin.cpp msgid "With Data" -msgstr "" +msgstr "Datan kanssa" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select by data type:" -msgstr "Valitse solmu" +msgstr "Valitse datatyypin mukaan:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select all visible color items." -msgstr "Valitse jako poistaaksesi sen." +msgstr "Valitse kaikki näkyvät värit." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible color items and their data." -msgstr "" +msgstr "Valitse kaikki näkyvät värit ja niiden data." #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all visible color items." -msgstr "" +msgstr "Poista kaikkien näkyvien värien valinta." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select all visible constant items." -msgstr "Valitse asetus ensin!" +msgstr "Valitse kaikki näkyvät vakiot." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible constant items and their data." -msgstr "" +msgstr "Valitse kaikki näkyvät vakiot ja niiden data." #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all visible constant items." -msgstr "" +msgstr "Poista kaikkien näkyvien vakioiden valinta." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select all visible font items." -msgstr "Valitse asetus ensin!" +msgstr "Valitse kaikki näkyvät fontit." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible font items and their data." -msgstr "" +msgstr "Valitse kaikki näkyvät fontit ja niiden data." #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all visible font items." -msgstr "" +msgstr "Poista kaikkien näkyvien fonttien valinta." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select all visible icon items." -msgstr "Valitse asetus ensin!" +msgstr "Valitse kaikki näkyvät kuvakkeet." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select all visible icon items and their data." -msgstr "Valitse asetus ensin!" +msgstr "Valitse kaikki näkyvät kuvakkeet ja niiden data." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Deselect all visible icon items." -msgstr "Valitse asetus ensin!" +msgstr "Poista kaikkien näkyvien kuvakkeiden valinta." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible stylebox items." -msgstr "" +msgstr "Valitse kaikki näkyvät tyylilaatikot." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible stylebox items and their data." -msgstr "" +msgstr "Valitse kaikki näkyvät tyylilaatikot ja niiden data." #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all visible stylebox items." -msgstr "" +msgstr "Poista kaikkien näkyvien tyylilaatikoiden valinta." #: editor/plugins/theme_editor_plugin.cpp msgid "" "Caution: Adding icon data may considerably increase the size of your Theme " "resource." msgstr "" +"Varoitus: kuvakkeiden datan lisäys voi kasvattaa teemaresurssisi kokoa " +"merkittävästi." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Collapse types." -msgstr "Tiivistä kaikki" +msgstr "Tiivistä tyypit." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Expand types." -msgstr "Laajenna kaikki" +msgstr "Laajenna tyypit." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select all Theme items." -msgstr "Valitse mallitiedosto" +msgstr "Valitse kaikki teeman osat." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select With Data" -msgstr "Valitse pisteet" +msgstr "Valitse datan kanssa" #: editor/plugins/theme_editor_plugin.cpp msgid "Select all Theme items with item data." -msgstr "" +msgstr "Valitse kaikki teeman osat datan kanssa." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Deselect All" -msgstr "Valitse kaikki" +msgstr "Poista kaikki valinnat" #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all Theme items." -msgstr "" +msgstr "Poista kaikkien teeman osien valinta." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Import Selected" -msgstr "Tuo skene" +msgstr "Tuo valittu" #: editor/plugins/theme_editor_plugin.cpp msgid "" @@ -8693,283 +8738,249 @@ msgid "" "closing this window.\n" "Close anyway?" msgstr "" +"Tuo osat -välilehdellä on joitakin osia valittuna. Valinta menetetään tämän " +"ikkunan sulkeuduttua.\n" +"Suljetaanko silti?" #: editor/plugins/theme_editor_plugin.cpp msgid "" "Select a theme type from the list to edit its items.\n" "You can add a custom type or import a type with its items from another theme." msgstr "" +"Valitse teeman tyyppi luettelosta muokataksesi sen osia.\n" +"Voit lisätä mukautetun tyypin tai tuoda tyypin osineen toisesta teemasta." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Color Items" -msgstr "Poista kaikki" +msgstr "Poista kaikki värit" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Item" -msgstr "Poista" +msgstr "Nimeä osa uudellen" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Constant Items" -msgstr "Poista kaikki" +msgstr "Poista kaikki vakiot" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Font Items" -msgstr "Poista kaikki" +msgstr "Poista kaikki fontit" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Icon Items" -msgstr "Poista kaikki" +msgstr "Poista kaikki kuvakkeet" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All StyleBox Items" -msgstr "Poista kaikki" +msgstr "Poista kaikki tyylilaatikot" #: editor/plugins/theme_editor_plugin.cpp msgid "" "This theme type is empty.\n" "Add more items to it manually or by importing from another theme." msgstr "" +"Tämä teema on tyhjä.\n" +"Lisää siihen osia käsin tai tuomalla niitä toisesta teemasta." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Color Item" -msgstr "Lisää luokka" +msgstr "Lisää väri" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Constant Item" -msgstr "Lisää luokka" +msgstr "Lisää vakio" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Font Item" -msgstr "Lisää kohde" +msgstr "Lisää fontti" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Icon Item" -msgstr "Lisää kohde" +msgstr "Lisää kuvake" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Stylebox Item" -msgstr "Lisää kaikki" +msgstr "Lisää tyylilaatikko" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Color Item" -msgstr "Poista luokka" +msgstr "Nimeä väri uudelleen" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Constant Item" -msgstr "Poista luokka" +msgstr "Nimeä vakio uudelleen" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Font Item" -msgstr "Nimeä solmu uudelleen" +msgstr "Nimeä fontti uudelleen" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Icon Item" -msgstr "Nimeä solmu uudelleen" +msgstr "Nimeä kuvake uudelleen" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Stylebox Item" -msgstr "Poista valitut kohteet" +msgstr "Nimeä tyylilaatikko uudelleen" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Invalid file, not a Theme resource." -msgstr "Virheellinen tiedosto. Tämä ei ole ääniväylän asettelu ensinkään." +msgstr "Virheellinen tiedosto, ei ole teemaresurssi." #: editor/plugins/theme_editor_plugin.cpp msgid "Invalid file, same as the edited Theme resource." -msgstr "" +msgstr "Virheellinen tiedosto, sama kuin muokattu teemaresurssi." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Manage Theme Items" -msgstr "Hallinnoi malleja" +msgstr "Hallinnoi teeman osia" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Edit Items" -msgstr "Muokattava osanen" +msgstr "Muokkaa osia" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Types:" -msgstr "Tyyppi:" +msgstr "Tyypit:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Type:" -msgstr "Tyyppi:" +msgstr "Lisää tyyppi:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Item:" -msgstr "Lisää kohde" +msgstr "Lisää osa:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add StyleBox Item" -msgstr "Lisää kaikki" +msgstr "Lisää tyylilaatikko" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove Items:" -msgstr "Poista" +msgstr "Poista osia:" #: editor/plugins/theme_editor_plugin.cpp msgid "Remove Class Items" msgstr "Poista luokka" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove Custom Items" -msgstr "Poista luokka" +msgstr "Poista mukautettuja osia" #: editor/plugins/theme_editor_plugin.cpp msgid "Remove All Items" msgstr "Poista kaikki" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Theme Item" -msgstr "Käyttöliittymäteeman osat" +msgstr "Lisää teeman osa" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Old Name:" -msgstr "Solmun nimi:" +msgstr "Vanha nimi:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Import Items" -msgstr "Tuo teema" +msgstr "Tuo osia" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Default Theme" -msgstr "Oletus" +msgstr "Oletusteema" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Editor Theme" -msgstr "Muokkaa teemaa" +msgstr "Editorin teema" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select Another Theme Resource:" -msgstr "Poista resurssi" +msgstr "Valitse toinen teemaresurssi:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Another Theme" -msgstr "Tuo teema" +msgstr "Toinen teema" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Confirm Item Rename" -msgstr "Animaatioraita: nimeä uudelleen" +msgstr "Vahvista osan uudelleen nimeäminen" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Cancel Item Rename" -msgstr "Niputettu uudelleennimeäminen" +msgstr "Peruuta osan uudelleen nimeäminen" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Override Item" -msgstr "Ylikirjoittaa" +msgstr "Ylikirjoita osa" #: editor/plugins/theme_editor_plugin.cpp msgid "Unpin this StyleBox as a main style." -msgstr "" +msgstr "Irrota tämä tyylilaatikko päätyylistä." #: editor/plugins/theme_editor_plugin.cpp msgid "" "Pin this StyleBox as a main style. Editing its properties will update the " "same properties in all other StyleBoxes of this type." msgstr "" +"Kiinnitä tämä tyylilaatikko päätyyliksi. Sen ominaisuuksien muokkaaminen " +"päivittää kaikkien muiden tämän tyyppisten tyylilaatikoiden ominaisuuksia." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Type" -msgstr "Tyyppi" +msgstr "Lisää tyyppi" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Item Type" -msgstr "Lisää kohde" +msgstr "Lisää osan tyyppi" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Node Types:" -msgstr "Solmun tyyppi" +msgstr "Solmutyypit:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Show Default" -msgstr "Lataa oletus" +msgstr "Näytä oletus" #: editor/plugins/theme_editor_plugin.cpp msgid "Show default type items alongside items that have been overridden." -msgstr "" +msgstr "Näytä oletustyypin osat ylikirjoitettujen osien ohella." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Override All" -msgstr "Ylikirjoittaa" +msgstr "Ylikirjoita kaikki" #: editor/plugins/theme_editor_plugin.cpp msgid "Override all default type items." -msgstr "" +msgstr "Ylikirjoita kaikki oletustyypin osat." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Theme:" -msgstr "Teema" +msgstr "Teema:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Manage Items..." -msgstr "Hallinnoi vientimalleja..." +msgstr "Hallinnoi osia..." #: editor/plugins/theme_editor_plugin.cpp msgid "Add, remove, organize and import Theme items." -msgstr "" +msgstr "Lisää, poista, järjestele ja tuo teeman osia." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Preview" -msgstr "Esikatselu" +msgstr "Lisää esikatselu" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Default Preview" -msgstr "Päivitä esikatselu" +msgstr "Oletusesikatselu" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select UI Scene:" -msgstr "Valitse lähdemesh:" +msgstr "Valitse käyttöliittymäskene:" #: editor/plugins/theme_editor_preview.cpp msgid "" "Toggle the control picker, allowing to visually select control types for " "edit." msgstr "" +"Kytke päälle tai pois kontrollien valitsija, joka antaa valita " +"kontrollityypit muokkausta varten visuaalisesti." #: editor/plugins/theme_editor_preview.cpp msgid "Toggle Button" @@ -9004,7 +9015,6 @@ msgid "Checked Radio Item" msgstr "Valittu valintapainike" #: editor/plugins/theme_editor_preview.cpp -#, fuzzy msgid "Named Separator" msgstr "Nimetty erotin" @@ -9059,19 +9069,21 @@ msgstr "On,Useita,Asetuksia" #: editor/plugins/theme_editor_preview.cpp msgid "Invalid path, the PackedScene resource was probably moved or removed." msgstr "" +"Virheellinen polku, PackedScene resurssi oli todennäköisesti siirretty tai " +"poistettu." #: editor/plugins/theme_editor_preview.cpp msgid "Invalid PackedScene resource, must have a Control node at its root." msgstr "" +"Virheellinen PackedScene resurssi, juurisolmuna täytyy olla Control solmu." #: editor/plugins/theme_editor_preview.cpp -#, fuzzy msgid "Invalid file, not a PackedScene resource." -msgstr "Virheellinen tiedosto. Tämä ei ole ääniväylän asettelu ensinkään." +msgstr "Virheellinen tiedosto, ei ole PackedScene resurssi." #: editor/plugins/theme_editor_preview.cpp msgid "Reload the scene to reflect its most actual state." -msgstr "" +msgstr "Lataa skenen uudelleen vastaamaan sen varsinaista tilaa." #: editor/plugins/tile_map_editor_plugin.cpp msgid "Erase Selection" @@ -9658,7 +9670,7 @@ msgstr "Aseta lauseke" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Resize VisualShader node" -msgstr "Muuta VisualShader solmun kokoa" +msgstr "Muuta visuaalisen sävyttimen solmun kokoa" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Set Uniform Name" @@ -9670,7 +9682,7 @@ msgstr "Aseta oletustuloportti" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add Node to Visual Shader" -msgstr "Lisää solmu Visual Shaderiin" +msgstr "Lisää solmu visuaaliseen sävyttimeen" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Node(s) Moved" @@ -9691,7 +9703,7 @@ msgstr "Poista solmut" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Visual Shader Input Type Changed" -msgstr "Visual Shaderin syötteen tyyppi vaihdettu" +msgstr "Visuaalisen sävyttimen syötteen tyyppi vaihdettu" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "UniformRef Name Changed" @@ -9703,7 +9715,7 @@ msgstr "Kärkipiste" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Fragment" -msgstr "Fragmentti" +msgstr "Kuvapiste" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Light" @@ -9715,7 +9727,7 @@ msgstr "Näytä syntyvä sävytinkoodi." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Create Shader Node" -msgstr "Luo Shader solmu" +msgstr "Luo sävytinsolmu" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Color function." @@ -10412,18 +10424,18 @@ msgstr "Viittaus olemassa olevaan uniformiin." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." -msgstr "(Vain Fragment/Light tilat) Skalaariderivaattafunktio." +msgstr "(Vain kuvapiste- tai valotilassa) Skalaariderivaattafunktio." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Vector derivative function." -msgstr "(Vain Fragment/Light tilat) Vektoriderivaattafunktio." +msgstr "(Vain kuvapiste- tai valotilassa) Vektoriderivaattafunktio." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "(Fragment/Light mode only) (Vector) Derivative in 'x' using local " "differencing." msgstr "" -"(Vain Fragment/Light tilat) (Vektori) 'x' derivaatta käyttäen " +"(Vain kuvapiste- tai valotilassa) (Vektori) 'x' derivaatta käyttäen " "paikallisdifferentiaalia." #: editor/plugins/visual_shader_editor_plugin.cpp @@ -10431,7 +10443,7 @@ msgid "" "(Fragment/Light mode only) (Scalar) Derivative in 'x' using local " "differencing." msgstr "" -"(Vain Fragment/Light tilat) (Skalaari) 'x' derivaatta käyttäen " +"(Vain kuvapiste- tai valotilassa) (Skalaari) 'x' derivaatta käyttäen " "paikallisdifferentiaalia." #: editor/plugins/visual_shader_editor_plugin.cpp @@ -10439,7 +10451,7 @@ msgid "" "(Fragment/Light mode only) (Vector) Derivative in 'y' using local " "differencing." msgstr "" -"(Vain Fragment/Light tilat) (Vektori) 'y' derivaatta käyttäen " +"(Vain kuvapiste- tai valotilassa) (Vektori) 'y' derivaatta käyttäen " "paikallisdifferentiaalia." #: editor/plugins/visual_shader_editor_plugin.cpp @@ -10447,7 +10459,7 @@ msgid "" "(Fragment/Light mode only) (Scalar) Derivative in 'y' using local " "differencing." msgstr "" -"(Vain Fragment/Light tilat) (Skalaari) 'y' derivaatta käyttäen " +"(Vain kuvapiste- tai valotilassa) (Skalaari) 'y' derivaatta käyttäen " "paikallisdifferentiaalia." #: editor/plugins/visual_shader_editor_plugin.cpp @@ -10455,15 +10467,15 @@ msgid "" "(Fragment/Light mode only) (Vector) Sum of absolute derivative in 'x' and " "'y'." msgstr "" -"(Vain Fragment/Light tilat) (Vektori) 'x' ja 'y' derivaattojen itseisarvojen " -"summa." +"(Vain kuvapiste- tai valotilassa) (Vektori) 'x' ja 'y' derivaattojen " +"itseisarvojen summa." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "(Fragment/Light mode only) (Scalar) Sum of absolute derivative in 'x' and " "'y'." msgstr "" -"(Vain Fragment/Light tilat) (Skalaari) 'x' ja 'y' derivaattojen " +"(Vain kuvapiste- tai valotilassa) (Skalaari) 'x' ja 'y' derivaattojen " "itseisarvojen summa." #: editor/plugins/visual_shader_editor_plugin.cpp @@ -10471,13 +10483,12 @@ msgid "VisualShader" msgstr "VisualShader" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Edit Visual Property:" -msgstr "Muokkaa visuaalista ominaisuutta" +msgstr "Muokkaa visuaalista ominaisuutta:" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Visual Shader Mode Changed" -msgstr "Visual Shaderin tila vaihdettu" +msgstr "Visuaalisen sävyttimen tila vaihdettu" #: editor/project_export.cpp msgid "Runnable" @@ -10539,7 +10550,7 @@ msgstr "" #: editor/project_export.cpp msgid "Export Path" -msgstr "Vie polku" +msgstr "Vientipolku" #: editor/project_export.cpp msgid "Resources" @@ -10599,9 +10610,8 @@ msgid "Script" msgstr "Skripti" #: editor/project_export.cpp -#, fuzzy msgid "GDScript Export Mode:" -msgstr "Skriptin vientitila:" +msgstr "GDScriptin vientitila:" #: editor/project_export.cpp msgid "Text" @@ -10609,21 +10619,19 @@ msgstr "Teksti" #: editor/project_export.cpp msgid "Compiled Bytecode (Faster Loading)" -msgstr "" +msgstr "Käännetty bytekoodi (nopeampi latautuminen)" #: editor/project_export.cpp msgid "Encrypted (Provide Key Below)" msgstr "Salattu (syötä avain alla)" #: editor/project_export.cpp -#, fuzzy msgid "Invalid Encryption Key (must be 64 hexadecimal characters long)" -msgstr "Virheellinen salausavain (oltava 64 merkkiä pitkä)" +msgstr "Virheellinen salausavain (oltava 64 heksadesimaalimerkkiä pitkä)" #: editor/project_export.cpp -#, fuzzy msgid "GDScript Encryption Key (256-bits as hexadecimal):" -msgstr "Skriptin salausavain (256-bittinen heksana):" +msgstr "GDScriptin salausavain (256-bittinen heksadesimaalina):" #: editor/project_export.cpp msgid "Export PCK/Zip" @@ -10697,7 +10705,6 @@ msgid "Imported Project" msgstr "Tuotu projekti" #: editor/project_manager.cpp -#, fuzzy msgid "Invalid project name." msgstr "Virheellinen projektin nimi." @@ -10921,14 +10928,12 @@ msgid "Are you sure to run %d projects at once?" msgstr "Haluatko varmasti suorittaa %d projektia yhdenaikaisesti?" #: editor/project_manager.cpp -#, fuzzy msgid "Remove %d projects from the list?" -msgstr "Valitse laite listasta" +msgstr "Poista %d projektia listasta?" #: editor/project_manager.cpp -#, fuzzy msgid "Remove this project from the list?" -msgstr "Valitse laite listasta" +msgstr "Poistetaanko tämä projekti listasta?" #: editor/project_manager.cpp msgid "" @@ -10961,9 +10966,8 @@ msgid "Project Manager" msgstr "Projektinhallinta" #: editor/project_manager.cpp -#, fuzzy msgid "Local Projects" -msgstr "Projektit" +msgstr "Paikalliset projektit" #: editor/project_manager.cpp msgid "Loading, please wait..." @@ -10974,23 +10978,20 @@ msgid "Last Modified" msgstr "Viimeksi muutettu" #: editor/project_manager.cpp -#, fuzzy msgid "Edit Project" -msgstr "Vie projekti" +msgstr "Muokkaa projektia" #: editor/project_manager.cpp -#, fuzzy msgid "Run Project" -msgstr "Nimetä projekti" +msgstr "Aja projekti" #: editor/project_manager.cpp msgid "Scan" msgstr "Tutki" #: editor/project_manager.cpp -#, fuzzy msgid "Scan Projects" -msgstr "Projektit" +msgstr "Skannaa projektit" #: editor/project_manager.cpp msgid "Select a Folder to Scan" @@ -11001,14 +11002,12 @@ msgid "New Project" msgstr "Uusi projekti" #: editor/project_manager.cpp -#, fuzzy msgid "Import Project" -msgstr "Tuotu projekti" +msgstr "Tuo projekti" #: editor/project_manager.cpp -#, fuzzy msgid "Remove Project" -msgstr "Nimetä projekti" +msgstr "Poista projekti" #: editor/project_manager.cpp msgid "Remove Missing" @@ -11019,9 +11018,8 @@ msgid "About" msgstr "Tietoja" #: editor/project_manager.cpp -#, fuzzy msgid "Asset Library Projects" -msgstr "Asset-kirjasto" +msgstr "Asset-kirjaston projektit" #: editor/project_manager.cpp msgid "Restart Now" @@ -11033,7 +11031,7 @@ msgstr "Poista kaikki" #: editor/project_manager.cpp msgid "Also delete project contents (no undo!)" -msgstr "" +msgstr "Poista myös projektien sisältö (ei voi kumota!)" #: editor/project_manager.cpp msgid "Can't run project" @@ -11048,18 +11046,16 @@ msgstr "" "Haluaisitko selata virallisia esimerkkiprojekteja Asset-kirjastosta?" #: editor/project_manager.cpp -#, fuzzy msgid "Filter projects" -msgstr "Suodata ominaisuuksia" +msgstr "Suodata projekteja" #: editor/project_manager.cpp -#, fuzzy msgid "" "This field filters projects by name and last path component.\n" "To filter projects by name and full path, the query must contain at least " "one `/` character." msgstr "" -"Hakulaatikko suodattaa projektit nimen ja polun loppuosan mukaan.\n" +"Tämä kenttä suodattaa projektit nimen ja polun loppuosan mukaan.\n" "Suodattaaksesi projektit nimen ja koko polun mukaan, haussa tulee olla " "mukana vähintään yksi `/` merkki." @@ -11069,7 +11065,7 @@ msgstr "Näppäin " #: editor/project_settings_editor.cpp msgid "Physical Key" -msgstr "" +msgstr "Fyysinen avain" #: editor/project_settings_editor.cpp msgid "Joy Button" @@ -11117,7 +11113,7 @@ msgstr "Laite" #: editor/project_settings_editor.cpp msgid " (Physical)" -msgstr "" +msgstr " (fyysinen)" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "Press a Key..." @@ -11260,23 +11256,20 @@ msgid "Override for Feature" msgstr "Ominaisuuden ohitus" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Add %d Translations" -msgstr "Lisää käännös" +msgstr "Lisää %d käännöstä" #: editor/project_settings_editor.cpp msgid "Remove Translation" msgstr "Poista käännös" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Translation Resource Remap: Add %d Path(s)" -msgstr "Lisää resurssin korvaavuus" +msgstr "Käännösresurssin uudelleenmäppäys: lisää %d polkua" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Translation Resource Remap: Add %d Remap(s)" -msgstr "Lisää resurssin korvaavuus" +msgstr "Käännösresurssin uudelleenmäppäys: lisää %d uudelleenmäppäystä" #: editor/project_settings_editor.cpp msgid "Change Resource Remap Language" @@ -11722,12 +11715,15 @@ msgstr "Poista solmu \"%s\"?" msgid "" "Saving the branch as a scene requires having a scene open in the editor." msgstr "" +"Haaran tallentaminen skenenä edellyttää, että skene on avoinna editorissa." #: editor/scene_tree_dock.cpp msgid "" "Saving the branch as a scene requires selecting only one node, but you have " "selected %d nodes." msgstr "" +"Haaran tallentaminen skenenä edellyttää, että vain yksi solmu on valittuna, " +"mutta olet valinnut %d solmua." #: editor/scene_tree_dock.cpp msgid "" @@ -11736,6 +11732,11 @@ msgid "" "FileSystem dock context menu\n" "or create an inherited scene using Scene > New Inherited Scene... instead." msgstr "" +"Ei voida tallentaa juurisolmun haaraa skenen ilmentymänä.\n" +"Luodaksesi muokattavan kopion nykyisestä skenestä, monista se " +"Tiedostojärjestelmä-telakan pikavalikosta\n" +"tai luo vaihtoehtoisesti periytetty skene Skene > Uusi periytetty skene... " +"valikosta." #: editor/scene_tree_dock.cpp msgid "" @@ -11743,6 +11744,9 @@ msgid "" "To create a variation of a scene, you can make an inherited scene based on " "the instanced scene using Scene > New Inherited Scene... instead." msgstr "" +"Skenestä, joka on jo ilmentymä, ei voida luoda haaraa.\n" +"Luodaksesi muunnelman skenestä voit sen sijaan tehdä periytetyn skenen " +"skeneilmentymästä Skene > Uusi periytetty skene... valikosta." #: editor/scene_tree_dock.cpp msgid "Save New Scene As..." @@ -12150,6 +12154,8 @@ msgid "" "Warning: Having the script name be the same as a built-in type is usually " "not desired." msgstr "" +"Varoitus: skriptin nimeäminen sisäänrakennetun tyypin nimiseksi ei ole " +"yleensä toivottua." #: editor/script_create_dialog.cpp msgid "Class Name:" @@ -12221,7 +12227,7 @@ msgstr "Kopioi virhe" #: editor/script_editor_debugger.cpp msgid "Open C++ Source on GitHub" -msgstr "" +msgstr "Avaa C++ lähdekoodi GitHubissa" #: editor/script_editor_debugger.cpp msgid "Video RAM" @@ -12400,14 +12406,22 @@ msgid "Change Ray Shape Length" msgstr "Vaihda säteen muodon pituutta" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Set Room Point Position" -msgstr "Aseta käyräpisteen sijainti" +msgstr "Aseta huoneen pisteen sijainti" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Set Portal Point Position" -msgstr "Aseta käyräpisteen sijainti" +msgstr "Aseta portaalin pisteen sijainti" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Radius" +msgstr "Muuta sylinterimuodon sädettä" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr "Aseta käyrän aloitussijainti" #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" @@ -12522,14 +12536,12 @@ msgid "Object can't provide a length." msgstr "Objektille ei voida määrittää pituutta." #: modules/gltf/editor_scene_exporter_gltf_plugin.cpp -#, fuzzy msgid "Export Mesh GLTF2" -msgstr "Vie mesh-kirjasto" +msgstr "Vie mesh GLTF2:na" #: modules/gltf/editor_scene_exporter_gltf_plugin.cpp -#, fuzzy msgid "Export GLTF..." -msgstr "Vie..." +msgstr "Vie GLTF..." #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" @@ -12572,9 +12584,8 @@ msgid "GridMap Paint" msgstr "Ruudukon maalaus" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Selection" -msgstr "Täytä valinta" +msgstr "Ruudukon valinta" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Grid Map" @@ -12697,6 +12708,11 @@ msgstr "Piirretään lightmappeja" msgid "Class name can't be a reserved keyword" msgstr "Luokan nimi ei voi olla varattu avainsana" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "Täytä valinta" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "Sisemmän poikkeuksen kutsupinon loppu" @@ -12826,14 +12842,12 @@ msgid "Add Output Port" msgstr "Lisää lähtöportti" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Port Type" -msgstr "Muuta tyyppiä" +msgstr "Vaihda portin tyyppi" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Port Name" -msgstr "Vaihda tuloportin nimi" +msgstr "Vaihda portin nimi" #: modules/visual_script/visual_script_editor.cpp msgid "Override an existing built-in function." @@ -12949,9 +12963,8 @@ msgid "Add Preload Node" msgstr "Lisää esiladattu solmu" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Add Node(s)" -msgstr "Lisää solmu" +msgstr "Lisää solmuja" #: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" @@ -13183,73 +13196,67 @@ msgstr "Hae VisualScriptistä" msgid "Get %s" msgstr "Hae %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "Paketin nimi puuttuu." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "Paketin osioiden pituuksien täytyy olla nollasta poikkeavia." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "Merkki '%s' ei ole sallittu Android-sovellusten pakettien nimissä." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "Paketin osion ensimmäinen merkki ei voi olla numero." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "Merkki '%s' ei voi olla paketin osion ensimmäinen merkki." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "Paketilla on oltava ainakin yksi '.' erotinmerkki." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "Valitse laite listasta" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" -msgstr "" +msgstr "Ajetaan %s" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Exporting APK..." -msgstr "Viedään kaikki" +msgstr "Viedään APK:ta..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Uninstalling..." -msgstr "Poista asennus" +msgstr "Poistetaan asennusta..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Installing to device, please wait..." -msgstr "Ladataan, hetkinen..." +msgstr "Asennetaan laitteelle, hetkinen..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" -msgstr "Aliprosessia ei voitu käynnistää!" +msgstr "Ei voitu asentaa laitteelle: %s" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Running on device..." -msgstr "Suoritetaan mukautettua skriptiä..." +msgstr "Ajetaan laitteella..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Could not execute on device." -msgstr "Kansiota ei voitu luoda." +msgstr "Ei voitu suorittaa laitteella." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "'apksigner' työkalua ei löydy." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -13257,7 +13264,7 @@ msgstr "" "Android-käännösmallia ei ole asennettu projektiin. Asenna se Projekti-" "valikosta." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." @@ -13265,12 +13272,12 @@ msgstr "" "Joko Debug Keystore, Debug User JA Debug Password asetukset on kaikki " "konfiguroitava TAI ei mitään niistä." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" "Debug keystore ei ole määritettynä editorin asetuksissa eikä esiasetuksissa." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." @@ -13278,48 +13285,48 @@ msgstr "" "Joko Release Keystore, Release User JA Release Password asetukset on kaikki " "konfiguroitava TAI ei mitään niistä." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "Release keystore on konfiguroitu väärin viennin esiasetuksissa." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "Editorin asetuksiin tarvitaan kelvollinen Android SDK -polku." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "Editorin asetuksissa on virheellinen Android SDK -polku." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "'platform-tools' hakemisto puuttuu!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "Android SDK platform-tools adb-komentoa ei löydy." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" "Ole hyvä ja tarkista editorin asetuksissa määritelty Android SDK -hakemisto." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "'build-tools' hakemisto puuttuu!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "Android SDK build-tools apksigner-komentoa ei löydy." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "Virheellinen julkinen avain APK-laajennosta varten." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "Virheellinen paketin nimi:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" @@ -13327,102 +13334,85 @@ msgstr "" "\"android/modules\" projektiasetukseen on liitetty virheellinen " "\"GodotPaymentV3\" moduuli (muuttunut Godotin versiossa 3.2.2).\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" "\"Use Custom Build\" asetuksen täytyy olla päällä, jotta liittännäisiä voi " "käyttää." -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" -"\"Degrees Of Freedom\" on käyttökelpoinen ainoastaan kun \"Xr Mode\" asetus " -"on \"Oculus Mobile VR\"." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" "\"Hand Tracking\" on käyttökelpoinen ainoastaan kun \"Xr Mode\" asetus on " "\"Oculus Mobile VR\"." -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" -"\"Focus Awareness\" on käyttökelpoinen ainoastaan kun \"Xr Mode\" asetus on " -"\"Oculus Mobile VR\"." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" "\"Export AAB\" on käyttökelpoinen vain, kun \"Use Custom Build\" asetus on " "päällä." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " "directory.\n" "The resulting %s is unsigned." msgstr "" +"'apksigner' ei löydy.\n" +"Ole hyvä ja tarkista, että komento on saatavilla Android SDK build-tools " +"hakemistossa.\n" +"Tuloksena syntynyt %s on allekirjoittamaton." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." -msgstr "" +msgstr "Allekirjoitetaan debug %s..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." -msgstr "" -"Selataan tiedostoja,\n" -"Hetkinen…" +msgstr "Allekirjoitetaan release %s..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." -msgstr "Mallin avaus vientiin epäonnistui:" +msgstr "Keystorea ei löytynyt, ei voida viedä." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" -msgstr "" +msgstr "'apksigner' palautti virheen #%d" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." -msgstr "Lisätään %s..." +msgstr "Todennetaan %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." -msgstr "" +msgstr "'apksigner' todennus kohteelle %s epäonnistui." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" -msgstr "Viedään kaikki" +msgstr "Viedään Androidille" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" "Virheellinen tiedostonimi! Android App Bundle tarvitsee *.aab " "tiedostopäätteen." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "APK Expansion ei ole yhteensopiva Android App Bundlen kanssa." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" "Virheellinen tiedostonimi! Android APK tarvitsee *.apk tiedostopäätteen." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" -msgstr "" +msgstr "Vientiformaatti ei ole tuettu!\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." @@ -13430,7 +13420,7 @@ msgstr "" "Yritetään kääntää mukautetulla käännösmallilla, mutta sillä ei ole " "versiotietoa. Ole hyvä ja uudelleenasenna se 'Projekti'-valikosta." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13442,26 +13432,26 @@ msgstr "" " Godotin versio: %s\n" "Ole hyvä ja uudelleenasenna Androidin käännösmalli 'Projekti'-valikosta." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" +"Ei voitu ylikirjoittaa res://android/build/res/*.xml tiedostoja projektin " +"nimellä" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" -msgstr "Ei voitu luoda godot.cfg -tiedostoa projektin polkuun." +msgstr "Ei voitu viedä projektitiedostoja gradle-projektiksi.\n" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" -msgstr "Ei voitu kirjoittaa tiedostoa:" +msgstr "Ei voitu kirjoittaa laajennuspakettitiedostoa!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "Käännetään Android-projektia (gradle)" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." @@ -13470,11 +13460,11 @@ msgstr "" "Vaihtoehtoisesti, lue docs.godotengine.org sivustolta Androidin " "käännösdokumentaatio." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "Siirretään tulostetta" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." @@ -13482,48 +13472,48 @@ msgstr "" "Vientitiedoston kopiointi ja uudelleennimeäminen ei onnistu, tarkista " "tulosteet gradle-projektin hakemistosta." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Package not found: %s" -msgstr "Animaatio ei löytynyt: '%s'" +msgstr "Pakettia ei löytynyt: %s" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." -msgstr "Luodaan korkeuskäyriä..." +msgstr "Luodaan APK:ta..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" -msgstr "Mallin avaus vientiin epäonnistui:" +msgstr "" +"Ei löydetty APK-vientimallia vientiä varten:\n" +"%s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" +"Vientimalleista puuttuu kirjastoja valituille arkkitehtuureille: %s.\n" +"Ole hyvä ja kokoa malli, jossa on kaikki tarvittavat kirjastot, tai poista " +"puuttuvien arkkitehtuurien valinta viennin esiasetuksista." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Adding files..." -msgstr "Lisätään %s..." +msgstr "Lisätään tiedostoja..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Could not export project files" -msgstr "Ei voitu kirjoittaa tiedostoa:" +msgstr "Ei voitu viedä projektin tiedostoja" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "Tasataan APK:ta..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." -msgstr "" +msgstr "Ei voitu purkaa väliaikaista unaligned APK:ta." #: platform/iphone/export/export.cpp platform/osx/export/export.cpp msgid "Identifier is missing." @@ -13570,45 +13560,40 @@ msgid "Could not write file:" msgstr "Ei voitu kirjoittaa tiedostoa:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not read file:" -msgstr "Ei voitu kirjoittaa tiedostoa:" +msgstr "Ei voitu lukea tiedostoa:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not read HTML shell:" -msgstr "Ei voitu lukea mukautettua HTML tulkkia:" +msgstr "Ei voitu lukea HTML tulkkia:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not create HTTP server directory:" -msgstr "Kansiota ei voitu luoda." +msgstr "Ei voitu luoda HTTP-palvelimen hakemistoa:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Error starting HTTP server:" -msgstr "Virhe tallennettaessa skeneä." +msgstr "Virhe käynnistettäessä HTTP-palvelinta:" #: platform/osx/export/export.cpp -#, fuzzy msgid "Invalid bundle identifier:" -msgstr "Virheellinen Identifier osio:" +msgstr "Virheellinen bundle-tunniste:" #: platform/osx/export/export.cpp msgid "Notarization: code signing required." -msgstr "" +msgstr "Notarisointi: koodin allekirjoitus tarvitaan." #: platform/osx/export/export.cpp msgid "Notarization: hardened runtime required." -msgstr "" +msgstr "Notarisointi: hardened runtime tarvitaan." #: platform/osx/export/export.cpp msgid "Notarization: Apple ID name not specified." -msgstr "" +msgstr "Notarointi: Apple ID nimeä ei ole määritetty." #: platform/osx/export/export.cpp msgid "Notarization: Apple ID password not specified." -msgstr "" +msgstr "Notarointi: Apple ID salasanaa ei ole määritetty." #: platform/uwp/export/export.cpp msgid "Invalid package short name." @@ -14041,6 +14026,9 @@ msgid "" "longer has any effect.\n" "To remove this warning, disable the GIProbe's Compress property." msgstr "" +"GIProben Compress-ominaisuus on poistettu käytöstä tiedossa olevien bugien " +"vuoksi, eikä sillä ole enää mitään vaikutusta.\n" +"Poista GIProben Compress-ominaisuus käytöstä poistaaksesi tämän varoituksen." #: scene/3d/light.cpp msgid "A SpotLight with an angle wider than 90 degrees cannot cast shadows." @@ -14061,6 +14049,14 @@ msgstr "" "NavigationMeshInstance solmun täytyy olla Navigation solmun alaisuudessa. Se " "tarjoaa vain navigointidataa." +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14130,15 +14126,15 @@ msgstr "Solmujen A ja B tulee olla eri PhysicsBody solmut" #: scene/3d/portal.cpp msgid "The RoomManager should not be a child or grandchild of a Portal." -msgstr "" +msgstr "RoomManager solmun ei pitäisi sijaita Portal solmun alla." #: scene/3d/portal.cpp msgid "A Room should not be a child or grandchild of a Portal." -msgstr "" +msgstr "Room solmun ei pitäisi sijaita Portal solmun alla." #: scene/3d/portal.cpp msgid "A RoomGroup should not be a child or grandchild of a Portal." -msgstr "" +msgstr "RoomGroup solmun ei pitäisi sijaita Portal solmun alla." #: scene/3d/remote_transform.cpp msgid "" @@ -14150,79 +14146,96 @@ msgstr "" #: scene/3d/room.cpp msgid "A Room cannot have another Room as a child or grandchild." -msgstr "" +msgstr "Room solmun alla ei voi olla toista Room solmua." #: scene/3d/room.cpp msgid "The RoomManager should not be placed inside a Room." -msgstr "" +msgstr "RoomManager solmua ei pitäisi sijoittaa Room solmun sisään." #: scene/3d/room.cpp msgid "A RoomGroup should not be placed inside a Room." -msgstr "" +msgstr "RoomGroup solmua ei pitäisi sijoittaa Room solmun sisään." #: scene/3d/room.cpp msgid "" "Room convex hull contains a large number of planes.\n" "Consider simplifying the room bound in order to increase performance." msgstr "" +"Huoneen konveksi runko sisältää suuren määrän tasoja.\n" +"Harkitse huoneen rajojen yksinkertaistamista suorituskyvyn lisäämiseksi." #: scene/3d/room_group.cpp msgid "The RoomManager should not be placed inside a RoomGroup." -msgstr "" +msgstr "RoomManager solmua ei pitäisi sijoittaa RoomGroup solmun sisään." #: scene/3d/room_manager.cpp msgid "The RoomList has not been assigned." -msgstr "" +msgstr "RoomList solmua ei ole määrätty." #: scene/3d/room_manager.cpp msgid "The RoomList node should be a Spatial (or derived from Spatial)." -msgstr "" +msgstr "RoomList solmun tulisi olla Spatial (tai periytynyt Spatial solmusta)." #: scene/3d/room_manager.cpp msgid "" "Portal Depth Limit is set to Zero.\n" "Only the Room that the Camera is in will render." msgstr "" +"Portaalin Depth Limit on asetettu nollaksi.\n" +"Vain se huone, jossa kamera on, piirretään." #: scene/3d/room_manager.cpp msgid "There should only be one RoomManager in the SceneTree." -msgstr "" +msgstr "Skenepuussa pitäisi olla vain yksi RoomManager solmu." #: scene/3d/room_manager.cpp msgid "" "RoomList path is invalid.\n" "Please check the RoomList branch has been assigned in the RoomManager." msgstr "" +"RoomList solmun polku on virheellinen.\n" +"Ole hyvä ja tarkista, että RoomList haara on määrätty RoomManager solmussa." #: scene/3d/room_manager.cpp msgid "RoomList contains no Rooms, aborting." -msgstr "" +msgstr "RoomList solmulla ei ole Room solmuja, keskeytetään." #: scene/3d/room_manager.cpp msgid "Misnamed nodes detected, check output log for details. Aborting." msgstr "" +"Havaittiin väärin nimettyjä solmuja, tarkista yksityiskohdat tulostelokista. " +"Keskeytetään." #: scene/3d/room_manager.cpp msgid "Portal link room not found, check output log for details." msgstr "" +"Portaalin linkkihuonetta ei löydetty, tarkista yksityiskohdat tulostelokista." #: scene/3d/room_manager.cpp msgid "" "Portal autolink failed, check output log for details.\n" "Check the portal is facing outwards from the source room." msgstr "" +"Portaalin automaatinen linkitys epäonnistui, tarkista yksityiskohdat " +"tulostelokista.\n" +"Tarkista, että portaali on suunnattu ulospäin lähtöhuoneesta katsottuna." #: scene/3d/room_manager.cpp msgid "" "Room overlap detected, cameras may work incorrectly in overlapping area.\n" "Check output log for details." msgstr "" +"Havaittiin päällekkäisiä huoneita, kamerat saattavat toimia virheellisesti " +"päällekkäisillä alueilla.\n" +"Tarkista yksityiskohdat tulostelokista." #: scene/3d/room_manager.cpp msgid "" "Error calculating room bounds.\n" "Ensure all rooms contain geometry or manual bounds." msgstr "" +"Virhe laskettaessa huoneen rajoja.\n" +"Varmista, että kaikki huoneet sisältävät geometrian tai käsin syötetyt rajat." #: scene/3d/soft_body.cpp msgid "This body will be ignored until you set a mesh." @@ -14287,7 +14300,7 @@ msgstr "Animaatio ei löytynyt: '%s'" #: scene/animation/animation_player.cpp msgid "Anim Apply Reset" -msgstr "" +msgstr "Tee animaation palautus" #: scene/animation/animation_tree.cpp msgid "In node '%s', invalid animation: '%s'." @@ -14388,6 +14401,14 @@ msgstr "Käytä sopivaa tiedostopäätettä." msgid "Enable grid minimap." msgstr "Käytä ruudukon pienoiskarttaa." +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14441,6 +14462,10 @@ msgid "Viewport size must be greater than 0 to render anything." msgstr "" "Näyttöruudun koko on oltava suurempi kuin 0, jotta mitään renderöidään." +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " @@ -14462,25 +14487,29 @@ msgid "Invalid comparison function for that type." msgstr "Virheellinen vertailufunktio tälle tyypille." #: servers/visual/shader_language.cpp -#, fuzzy msgid "Varying may not be assigned in the '%s' function." -msgstr "Varying tyypin voi sijoittaa vain vertex-funktiossa." +msgstr "Varying tyyppiä ei voi sijoittaa '%s' funktiossa." #: servers/visual/shader_language.cpp msgid "" "Varyings which assigned in 'vertex' function may not be reassigned in " "'fragment' or 'light'." msgstr "" +"Varying muuttujia, jotka on sijoitettu 'vertex' funktiossa, ei voi " +"uudelleensijoittaa 'fragment' tai 'light' funktioissa." #: servers/visual/shader_language.cpp msgid "" "Varyings which assigned in 'fragment' function may not be reassigned in " "'vertex' or 'light'." msgstr "" +"Varying muuttujia, jotka on sijoitettu 'fragment' funktiossa, ei voi " +"uudelleensijoittaa 'vertex' tai 'light' funktioissa." #: servers/visual/shader_language.cpp msgid "Fragment-stage varying could not been accessed in custom function!" msgstr "" +"Kuvapistevaiheen varying muuttujaa ei voitu käyttää mukautetussa funktiossa!" #: servers/visual/shader_language.cpp msgid "Assignment to function." @@ -14494,6 +14523,41 @@ msgstr "Sijoitus uniformille." msgid "Constants cannot be modified." msgstr "Vakioita ei voi muokata." +#~ msgid "Make Rest Pose (From Bones)" +#~ msgstr "Tee lepoasento (luista)" + +#~ msgid "Bottom" +#~ msgstr "Pohja" + +#~ msgid "Left" +#~ msgstr "Vasen" + +#~ msgid "Right" +#~ msgstr "Oikea" + +#~ msgid "Front" +#~ msgstr "Etu" + +#~ msgid "Rear" +#~ msgstr "Taka" + +#~ msgid "Nameless gizmo" +#~ msgstr "Nimetön muokkain" + +#~ msgid "" +#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile " +#~ "VR\"." +#~ msgstr "" +#~ "\"Degrees Of Freedom\" on käyttökelpoinen ainoastaan kun \"Xr Mode\" " +#~ "asetus on \"Oculus Mobile VR\"." + +#~ msgid "" +#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" +#~ "\"." +#~ msgstr "" +#~ "\"Focus Awareness\" on käyttökelpoinen ainoastaan kun \"Xr Mode\" asetus " +#~ "on \"Oculus Mobile VR\"." + #~ msgid "Package Contents:" #~ msgstr "Paketin sisältö:" diff --git a/editor/translations/fil.po b/editor/translations/fil.po index e53b7bb1a7..c227244f65 100644 --- a/editor/translations/fil.po +++ b/editor/translations/fil.po @@ -1003,7 +1003,7 @@ msgstr "" msgid "Dependencies" msgstr "" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "" @@ -1632,13 +1632,13 @@ msgid "" "Enabled'." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2010,7 +2010,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "" @@ -2489,6 +2489,30 @@ msgid "Current scene not saved. Open anyway?" msgstr "" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Undo: %s" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Redo: %s" +msgstr "" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "" @@ -3114,6 +3138,11 @@ msgid "Merge With Existing" msgstr "" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Pagbago ng Transform ng Animation" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "" @@ -3356,6 +3385,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "" @@ -5401,6 +5434,16 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Locked" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Grouped" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6302,7 +6345,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -6889,6 +6936,15 @@ msgstr "Maglipat ng (mga) Bezier Point" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "3D Transform Track" + +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Center Node" +msgstr "" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7383,11 +7439,11 @@ msgid "Skeleton2D" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" +msgid "Reset to Rest Pose" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" +msgid "Overwrite Rest Pose" msgstr "" #: editor/plugins/skeleton_editor_plugin.cpp @@ -7415,6 +7471,60 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7522,42 +7632,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -7819,6 +7909,10 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Occlusion Culling" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "" @@ -7884,7 +7978,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -11801,6 +11895,14 @@ msgstr "" msgid "Set Portal Point Position" msgstr "" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Position" +msgstr "" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12082,6 +12184,10 @@ msgstr "" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Build Solution" +msgstr "" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -12554,159 +12660,148 @@ msgstr "" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Uninstalling..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Installing to device, please wait..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not execute on device." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -12714,57 +12809,57 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -12772,54 +12867,54 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package not found: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -12827,19 +12922,19 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Adding files..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13289,6 +13384,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -13578,6 +13681,14 @@ msgstr "" msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13618,6 +13729,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/fr.po b/editor/translations/fr.po index e6e2c9021e..9416a14cdc 100644 --- a/editor/translations/fr.po +++ b/editor/translations/fr.po @@ -66,7 +66,7 @@ # Fabrice <fabricecipolla@gmail.com>, 2019. # Romain Paquet <titou.paquet@gmail.com>, 2019. # Xavier Sellier <contact@binogure-studio.com>, 2019. -# Sofiane <Sofiane-77@caramail.fr>, 2019. +# Sofiane <Sofiane-77@caramail.fr>, 2019, 2021. # Camille Mohr-Daurat <pouleyketchoup@gmail.com>, 2019. # Pierre Stempin <pierre.stempin@gmail.com>, 2019. # Pierre Caye <pierrecaye@laposte.net>, 2020, 2021. @@ -87,8 +87,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2021-08-12 14:48+0000\n" -"Last-Translator: Blackiris <divjvc@free.fr>\n" +"PO-Revision-Date: 2021-08-20 06:04+0000\n" +"Last-Translator: Pierre Caye <pierrecaye@laposte.net>\n" "Language-Team: French <https://hosted.weblate.org/projects/godot-engine/" "godot/fr/>\n" "Language: fr\n" @@ -445,15 +445,13 @@ msgstr "Insérer une animation" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "node '%s'" -msgstr "Mode d'aimantation (%s)" +msgstr "nœud '%s'" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "animation" -msgstr "Animation" +msgstr "animation" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." @@ -462,9 +460,8 @@ msgstr "" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "property '%s'" -msgstr "Il n'y a pas de propriété « %s »." +msgstr "propriété « %s »" #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -1108,7 +1105,7 @@ msgstr "" msgid "Dependencies" msgstr "Dépendances" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Ressource" @@ -1774,13 +1771,13 @@ msgstr "" "Activez 'Import Pvrtc' dans les paramètres du projet, ou désactivez 'Driver " "Fallback Enabled'." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "Modèle de débogage personnalisé introuvable." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2165,7 +2162,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "Ré-importation des assets" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "Dessus" @@ -2402,6 +2399,9 @@ msgid "" "Update Continuously is enabled, which can increase power usage. Click to " "disable it." msgstr "" +"Tourne lorsque la fenêtre de l'éditeur est redessinée.\n" +"L'option Mettre à jour en Permanence est activée, ce qui peut augmenter la " +"consommation de puissance. Cliquez pour le désactiver." #: editor/editor_node.cpp msgid "Spins when the editor window redraws." @@ -2684,6 +2684,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "La scène actuelle n'est pas enregistrée. Ouvrir quand même ?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "Annuler" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "Refaire" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "Impossible de recharger une scène qui n'a jamais été sauvegardée." @@ -3382,6 +3408,11 @@ msgid "Merge With Existing" msgstr "Fusionner avec l'existant" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Changer la transformation de l’animation" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "Ouvrir et exécuter un script" @@ -3640,6 +3671,10 @@ msgstr "" "La ressource sélectionnée (%s) ne correspond à aucun des types attendus pour " "cette propriété (%s)." +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "Rendre unique" @@ -3935,14 +3970,12 @@ msgid "Download from:" msgstr "Télécharger depuis :" #: editor/export_template_manager.cpp -#, fuzzy msgid "Open in Web Browser" -msgstr "Exécuter dans le navigateur" +msgstr "Ouvrir dans le navigateur Web" #: editor/export_template_manager.cpp -#, fuzzy msgid "Copy Mirror URL" -msgstr "Copier l'erreur" +msgstr "Copier l'URL du miroir" #: editor/export_template_manager.cpp msgid "Download and Install" @@ -5760,6 +5793,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "Déplacer le CanvasItem « %s » vers (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "Verrouillage Sélectionné" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Groupes" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6710,7 +6755,13 @@ msgid "Remove Selected Item" msgstr "Supprimer l'élément sélectionné" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +#, fuzzy +msgid "Import from Scene (Ignore Transforms)" +msgstr "Importer depuis la scène" + +#: editor/plugins/mesh_library_editor_plugin.cpp +#, fuzzy +msgid "Import from Scene (Apply Transforms)" msgstr "Importer depuis la scène" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7308,6 +7359,16 @@ msgstr "Générer des points" msgid "Flip Portal" msgstr "Retourner le Portal" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "Supprimer la transformation" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Créer un nœud" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "AnimationTree n'a pas de chemin défini vers un AnimationPlayer" @@ -7812,12 +7873,14 @@ msgid "Skeleton2D" msgstr "Squelette 2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "Créer la position de repos (d'après les os)" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "Assigner les os à la position de repos" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "Assigner les os à la position de repos" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "Écraser" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7844,6 +7907,71 @@ msgid "Perspective" msgstr "Perspective" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Orthogonal" +msgstr "Orthogonale" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Perspective" +msgstr "Perspective" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Orthogonal" +msgstr "Orthogonale" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "Perspective" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Left Orthogonal" +msgstr "Orthogonale" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Perspective" +msgstr "Perspective" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Orthogonal" +msgstr "Orthogonale" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Orthogonal" +msgstr "Orthogonale" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Perspective" +msgstr "Perspective" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Orthogonal" +msgstr "Orthogonale" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Perspective" +msgstr "Perspective" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "Transformation annulée." @@ -7951,42 +8079,22 @@ msgid "Bottom View." msgstr "Vue de dessous." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "Dessous" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "Vue de gauche." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "Gauche" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "Vue de droite." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "Droite" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "Vue avant." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "Avant" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "Vue arrière." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "Arrière" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "Aligner Transform avec la vue" @@ -8261,6 +8369,11 @@ msgid "View Portal Culling" msgstr "Afficher le Portal culling" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "Afficher le Portal culling" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "Paramètres..." @@ -8326,8 +8439,9 @@ msgid "Post" msgstr "Post" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" -msgstr "Gadget sans nom" +#, fuzzy +msgid "Unnamed Gizmo" +msgstr "Projet sans titre" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Mesh2D" @@ -8790,6 +8904,9 @@ msgid "" "Select a theme type from the list to edit its items.\n" "You can add a custom type or import a type with its items from another theme." msgstr "" +"Sélectionnez un type de thème dans la liste pour modifier ses éléments. \n" +"Vous pouvez ajouter un type personnalisé ou importer un type avec ses " +"éléments à partir d’un autre thème." #: editor/plugins/theme_editor_plugin.cpp msgid "Remove All Color Items" @@ -8820,6 +8937,9 @@ msgid "" "This theme type is empty.\n" "Add more items to it manually or by importing from another theme." msgstr "" +"Ce type de thème est vide.\n" +"Ajoutez-lui des éléments manuellement ou en important à partir d'un autre " +"thème." #: editor/plugins/theme_editor_plugin.cpp msgid "Add Color Item" @@ -12474,14 +12594,22 @@ msgid "Change Ray Shape Length" msgstr "Changer la longueur d'une forme en rayon" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Set Room Point Position" -msgstr "Définir la position du point de la courbe" +msgstr "Définir la position du point de la pièce" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Set Portal Point Position" -msgstr "Définir la position du point de la courbe" +msgstr "Définir la position du point du Portal" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Radius" +msgstr "Changer le rayon de la forme du cylindre" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr "Définir position d'entrée de la courbe" #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" @@ -12596,9 +12724,8 @@ msgid "Object can't provide a length." msgstr "L'objet ne peut fournir une longueur." #: modules/gltf/editor_scene_exporter_gltf_plugin.cpp -#, fuzzy msgid "Export Mesh GLTF2" -msgstr "Exporter le Maillage GLTF2" +msgstr "Exporter le Maillage en GLTF2" #: modules/gltf/editor_scene_exporter_gltf_plugin.cpp msgid "Export GLTF..." @@ -12769,6 +12896,11 @@ msgstr "Tracer des lightmaps" msgid "Class name can't be a reserved keyword" msgstr "Le nom de classe ne peut pas être un mot-clé réservé" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "Remplir la sélection" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "Fin de la trace d'appel (stack trace) intrinsèque" @@ -13020,9 +13152,8 @@ msgid "Add Preload Node" msgstr "Ajouter un nœud préchargé" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Add Node(s)" -msgstr "Ajouter un nœud" +msgstr "Ajouter Node(s)" #: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" @@ -13257,73 +13388,72 @@ msgstr "Rechercher VisualScript" msgid "Get %s" msgstr "Obtenir %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "Nom du paquet manquant." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "Les segments du paquet doivent être de longueur non nulle." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" "Le caractère « %s » n'est pas autorisé dans les noms de paquet " "d'applications Android." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" "Un chiffre ne peut pas être le premier caractère d'un segment de paquet." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" "Le caractère \"%s\" ne peut pas être le premier caractère d'un segment de " "paquet." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "Le paquet doit comporter au moins un séparateur « . »." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "Sélectionner appareil depuis la liste" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Running on %s" -msgstr "En cours d'exécution sur %s" +msgstr "Exécution sur %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting APK..." msgstr "Exportation de l'APK..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Uninstalling..." msgstr "Désinstallation..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Installing to device, please wait..." msgstr "Installation sur l'appareil, veuillez patienter..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" msgstr "Impossible d'installer sur l'appareil : %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "En cours d'exécution sur l'appareil..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not execute on device." msgstr "Impossible d'exécuter sur l'appareil." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "Impossible de trouver l'outil 'apksigner'." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -13331,7 +13461,7 @@ msgstr "" "Le modèle de compilation Android n'est pas installé dans le projet. " "Installez-le à partir du menu Projet." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." @@ -13339,13 +13469,13 @@ msgstr "" "Il faut configurer soit les paramètres Debug Keystore, Debug User ET Debug " "Password, soit aucun d'entre eux." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" "Le Debug keystore n'est pas configuré dans les Paramètres de l'éditeur, ni " "dans le préréglage." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." @@ -13353,55 +13483,55 @@ msgstr "" "Il faut configurer soit les paramètres Release Keystore, Release User ET " "Release Password, soit aucun d'entre eux." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" "La clé de version n'est pas configurée correctement dans le préréglage " "d'exportation." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" "Un chemin d'accès valide au SDK Android est requis dans les paramètres de " "l'éditeur." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" "Chemin d'accès invalide au SDK Android dans les paramètres de l'éditeur." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "Dossier « platform-tools » manquant !" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "Impossible de trouver la commande adb du SDK Android platform-tools." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" "Veuillez vérifier le répertoire du SDK Android spécifié dans les paramètres " "de l'éditeur." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "Dossier « build-tools » manquant !" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" "Impossible de trouver la commande apksigner du SDK Android build-tools." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "Clé publique invalide pour l'expansion APK." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "Nom de paquet invalide :" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" @@ -13409,40 +13539,24 @@ msgstr "" "Module \"GodotPaymentV3\" invalide inclus dans le paramétrage du projet " "\"android/modules\" (modifié dans Godot 3.2.2).\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "« Use Custom Build » doit être activé pour utiliser les plugins." -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" -"« Degrés de liberté » est valide uniquement lorsque le « Mode Xr » est « " -"Oculus Mobile VR »." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" "« Suivi de la main » est valide uniquement lorsque le « Mode Xr » est « " "Oculus Mobile VR »." -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" -"« Sensibilité de la mise au point » est valide uniquement lorsque le « Mode " -"Xr » est « Oculus Mobile VR »." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" "« Export AAB » est valide uniquement lorsque l'option « Use Custom Build » " "est activée." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13454,61 +13568,57 @@ msgstr "" "du SDK Android.\n" "Le paquet sortant %s est non signé." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "Signature du debug %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." msgstr "Signature de la version %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "Impossible de trouver le keystore, impossible d'exporter." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" -msgstr "'apksigner' a terminé avec l'erreur #%d" +msgstr "'apksigner' est retourné avec l'erreur #%d" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." msgstr "Vérification de %s..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." -msgstr "La vérification de %s avec 'apksigner' a échoué." +msgstr "La vérification de %s par 'apksigner' a échoué." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "Exportation vers Android" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" "Nom de fichier invalide ! Le bundle d'application Android nécessite " "l'extension *.aab." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" "L'expansion de fichier APK n'est pas compatible avec le bundle d'application " "Android." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" "Nom de fichier invalide ! Les fichiers APK d'Android nécessitent l'extension " "*.apk." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "Format d'export non supporté !\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." @@ -13517,7 +13627,7 @@ msgstr "" "information de version n'existe pour lui. Veuillez réinstaller à partir du " "menu 'Projet'." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13529,27 +13639,26 @@ msgstr "" " Version Godot : %s\n" "Veuillez réinstaller la version d'Android depuis le menu 'Projet'." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" "Impossible d'écraser les fichiers res://android/build/res/*.xml avec le nom " "du projet" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "Impossible d'exporter les fichiers du projet vers le projet gradle\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "Impossible d'écrire le fichier du paquet d'expansion !" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "Construire le Project Android (gradle)" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." @@ -13559,11 +13668,11 @@ msgstr "" "Sinon, visitez docs.godotengine.org pour la documentation de construction " "Android." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "Déplacement du résultat" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." @@ -13571,17 +13680,15 @@ msgstr "" "Impossible de copier et de renommer le fichier d'export, vérifiez le dossier " "du projet gradle pour les journaux." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Package not found: %s" -msgstr "Paquet introuvable : « %s »" +msgstr "Paquet non trouvé : %s" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." -msgstr "Création du fichier APK..." +msgstr "Création de l'APK..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" @@ -13589,33 +13696,31 @@ msgstr "" "Impossible de trouver le modèle de l'APK à exporter :\n" "%s" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" -"Bibliothèques manquantes dans le modèle d'export pour les architectures " +"Bibliothèques manquantes dans le modèle d'exportation pour les architectures " "sélectionnées : %s.\n" "Veuillez construire un modèle avec toutes les bibliothèques requises, ou " -"désélectionner les architectures manquantes dans le préréglage de l'export." +"désélectionner les architectures manquantes dans le préréglage d'exportation." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Adding files..." msgstr "Ajout de fichiers..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files" msgstr "Impossible d'exporter les fichiers du projet" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "Alignement de l'APK…" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "Impossible de décompresser l'APK temporaire non aligné." @@ -13668,9 +13773,8 @@ msgid "Could not read file:" msgstr "Impossible de lire le fichier :" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not read HTML shell:" -msgstr "Impossible de lire le shell HTML personnalisé :" +msgstr "Impossible de lire le shell HTML :" #: platform/javascript/export/export.cpp msgid "Could not create HTTP server directory:" @@ -13681,26 +13785,24 @@ msgid "Error starting HTTP server:" msgstr "Erreur de démarrage du serveur HTTP :" #: platform/osx/export/export.cpp -#, fuzzy msgid "Invalid bundle identifier:" -msgstr "Identifiant invalide :" +msgstr "Identificateur de bundle non valide :" #: platform/osx/export/export.cpp -#, fuzzy msgid "Notarization: code signing required." msgstr "Certification : signature du code requise." #: platform/osx/export/export.cpp msgid "Notarization: hardened runtime required." -msgstr "" +msgstr "Certification : exécution renforcée requise." #: platform/osx/export/export.cpp msgid "Notarization: Apple ID name not specified." -msgstr "" +msgstr "Certification : Identifiant Apple ID non spécifié." #: platform/osx/export/export.cpp msgid "Notarization: Apple ID password not specified." -msgstr "" +msgstr "Certification : Mot de passe Apple ID non spécifié." #: platform/uwp/export/export.cpp msgid "Invalid package short name." @@ -14145,7 +14247,6 @@ msgstr "" "A la place utilisez une BakedLightMap." #: scene/3d/gi_probe.cpp -#, fuzzy msgid "" "The GIProbe Compress property has been deprecated due to known bugs and no " "longer has any effect.\n" @@ -14176,6 +14277,14 @@ msgstr "" "Un NavigationMeshInstance doit être enfant ou sous-enfant d'un nœud de type " "Navigation. Il fournit uniquement des données de navigation." +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14269,78 +14378,100 @@ msgstr "" #: scene/3d/room.cpp msgid "A Room cannot have another Room as a child or grandchild." msgstr "" +"Une pièce ne peut pas avoir une autre pièce comme enfant ou petit-enfant." #: scene/3d/room.cpp msgid "The RoomManager should not be placed inside a Room." -msgstr "" +msgstr "Le RoomManager ne doit pas être placé à l'intérieur d'une pièce." #: scene/3d/room.cpp msgid "A RoomGroup should not be placed inside a Room." -msgstr "" +msgstr "Un RoomGroup ne doit pas être placé à l'intérieur d'une pièce." #: scene/3d/room.cpp msgid "" "Room convex hull contains a large number of planes.\n" "Consider simplifying the room bound in order to increase performance." msgstr "" +"La coque convexe de la pièce contient un grand nombre de plans.\n" +"Envisagez de simplifier la limite de la pièce afin d'augmenter les " +"performances." #: scene/3d/room_group.cpp msgid "The RoomManager should not be placed inside a RoomGroup." -msgstr "" +msgstr "Le RoomManager ne doit pas être placé à l'intérieur d'un RoomGroup." #: scene/3d/room_manager.cpp msgid "The RoomList has not been assigned." -msgstr "" +msgstr "La RoomList n'a pas été assignée." #: scene/3d/room_manager.cpp msgid "The RoomList node should be a Spatial (or derived from Spatial)." -msgstr "" +msgstr "Le nœud RoomList doit être un Spatial (ou un dérivé de Spatial)." #: scene/3d/room_manager.cpp msgid "" "Portal Depth Limit is set to Zero.\n" "Only the Room that the Camera is in will render." msgstr "" +"La limite de profondeur du portail est fixée à zéro.\n" +"Seule la pièce dans laquelle se trouve la caméra sera rendue." #: scene/3d/room_manager.cpp msgid "There should only be one RoomManager in the SceneTree." -msgstr "" +msgstr "Il ne doit y avoir qu'un seul RoomManager dans le SceneTree." #: scene/3d/room_manager.cpp msgid "" "RoomList path is invalid.\n" "Please check the RoomList branch has been assigned in the RoomManager." msgstr "" +"Le chemin de la RoomList est invalide.\n" +"Veuillez vérifier que la branche RoomList a été attribuée dans le " +"RoomManager." #: scene/3d/room_manager.cpp msgid "RoomList contains no Rooms, aborting." -msgstr "" +msgstr "RoomList ne contient aucune pièce, abandon." #: scene/3d/room_manager.cpp msgid "Misnamed nodes detected, check output log for details. Aborting." msgstr "" +"Des nœuds mal nommés ont été détectés, vérifiez le journal de sortie pour " +"plus de détails. Abandon." #: scene/3d/room_manager.cpp msgid "Portal link room not found, check output log for details." msgstr "" +"Lien entre le portail et la pièce introuvable, vérifiez le journal de sortie " +"pour plus de détails." #: scene/3d/room_manager.cpp msgid "" "Portal autolink failed, check output log for details.\n" "Check the portal is facing outwards from the source room." msgstr "" +"La liaison automatique du portail a échoué, vérifiez le journal de sortie " +"pour plus de détails.\n" +"Vérifiez que le portail est orienté vers l'extérieur de la pièce source." #: scene/3d/room_manager.cpp msgid "" "Room overlap detected, cameras may work incorrectly in overlapping area.\n" "Check output log for details." msgstr "" +"Chevauchement de pièces détecté, les caméras peuvent fonctionner de manière " +"incorrecte dans la zone de chevauchement.\n" +"Consultez le journal de sortie pour plus de détails." #: scene/3d/room_manager.cpp msgid "" "Error calculating room bounds.\n" "Ensure all rooms contain geometry or manual bounds." msgstr "" +"Erreur de calcul des limites de la pièce.\n" +"Assurez-vous que toutes les pièces contiennent une géométrie ou des limites " +"manuelles." #: scene/3d/soft_body.cpp msgid "This body will be ignored until you set a mesh." @@ -14406,7 +14537,7 @@ msgstr "Animation introuvable : « %s »" #: scene/animation/animation_player.cpp msgid "Anim Apply Reset" -msgstr "" +msgstr "Animer Appliquer Réinitialiser" #: scene/animation/animation_tree.cpp msgid "In node '%s', invalid animation: '%s'." @@ -14509,6 +14640,14 @@ msgstr "Utilisez une extension valide." msgid "Enable grid minimap." msgstr "Activer l'alignement." +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14565,6 +14704,10 @@ msgstr "" "La taille de la fenêtre d'affichage doit être supérieure à 0 pour pouvoir " "afficher quoi que ce soit." +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " @@ -14586,25 +14729,30 @@ msgid "Invalid comparison function for that type." msgstr "Fonction de comparaison invalide pour ce type." #: servers/visual/shader_language.cpp -#, fuzzy msgid "Varying may not be assigned in the '%s' function." -msgstr "Les variations ne peuvent être affectées que dans la fonction vertex." +msgstr "Varying ne peut pas être assigné dans la fonction '%s'." #: servers/visual/shader_language.cpp msgid "" "Varyings which assigned in 'vertex' function may not be reassigned in " "'fragment' or 'light'." msgstr "" +"Les Varyings assignées dans la fonction \"vertex\" ne peuvent pas être " +"réassignées dans 'fragment' ou 'light'." #: servers/visual/shader_language.cpp msgid "" "Varyings which assigned in 'fragment' function may not be reassigned in " "'vertex' or 'light'." msgstr "" +"Les Varyings attribuées dans la fonction 'fragment' ne peuvent pas être " +"réattribuées dans 'vertex' ou 'light'." #: servers/visual/shader_language.cpp msgid "Fragment-stage varying could not been accessed in custom function!" msgstr "" +"La varying de l'étape fragment n'a pas pu être accédée dans la fonction " +"personnalisée !" #: servers/visual/shader_language.cpp msgid "Assignment to function." @@ -14618,6 +14766,41 @@ msgstr "Affectation à la variable uniform." msgid "Constants cannot be modified." msgstr "Les constantes ne peuvent être modifiées." +#~ msgid "Make Rest Pose (From Bones)" +#~ msgstr "Créer la position de repos (d'après les os)" + +#~ msgid "Bottom" +#~ msgstr "Dessous" + +#~ msgid "Left" +#~ msgstr "Gauche" + +#~ msgid "Right" +#~ msgstr "Droite" + +#~ msgid "Front" +#~ msgstr "Avant" + +#~ msgid "Rear" +#~ msgstr "Arrière" + +#~ msgid "Nameless gizmo" +#~ msgstr "Gadget sans nom" + +#~ msgid "" +#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile " +#~ "VR\"." +#~ msgstr "" +#~ "« Degrés de liberté » est valide uniquement lorsque le « Mode Xr » est « " +#~ "Oculus Mobile VR »." + +#~ msgid "" +#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" +#~ "\"." +#~ msgstr "" +#~ "« Sensibilité de la mise au point » est valide uniquement lorsque le « " +#~ "Mode Xr » est « Oculus Mobile VR »." + #~ msgid "Package Contents:" #~ msgstr "Contenu du paquetage :" diff --git a/editor/translations/ga.po b/editor/translations/ga.po index 872463b1a9..da5c9051ed 100644 --- a/editor/translations/ga.po +++ b/editor/translations/ga.po @@ -995,7 +995,7 @@ msgstr "" msgid "Dependencies" msgstr "" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Acmhainn" @@ -1625,13 +1625,13 @@ msgid "" "Enabled'." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2002,7 +2002,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "" @@ -2481,6 +2481,30 @@ msgid "Current scene not saved. Open anyway?" msgstr "" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Undo: %s" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Redo: %s" +msgstr "" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "" @@ -3105,6 +3129,10 @@ msgid "Merge With Existing" msgstr "" #: editor/editor_node.cpp +msgid "Apply MeshInstance Transforms" +msgstr "" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "" @@ -3345,6 +3373,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "" @@ -5391,6 +5423,16 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Locked" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Grouped" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6289,7 +6331,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -6873,6 +6919,15 @@ msgstr "" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Occluder Set Transform" +msgstr "" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Nód Cumaisc2" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7367,11 +7422,11 @@ msgid "Skeleton2D" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" +msgid "Reset to Rest Pose" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" +msgid "Overwrite Rest Pose" msgstr "" #: editor/plugins/skeleton_editor_plugin.cpp @@ -7399,6 +7454,60 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7507,42 +7616,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -7804,6 +7893,10 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Occlusion Culling" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "" @@ -7869,7 +7962,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -11782,6 +11875,14 @@ msgstr "" msgid "Set Portal Point Position" msgstr "" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Position" +msgstr "" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12063,6 +12164,10 @@ msgstr "" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Build Solution" +msgstr "" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -12533,159 +12638,148 @@ msgstr "" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Uninstalling..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Installing to device, please wait..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not execute on device." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -12693,57 +12787,57 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -12751,55 +12845,55 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "Ábhar:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -12807,19 +12901,19 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Adding files..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13269,6 +13363,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -13558,6 +13660,14 @@ msgstr "" msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13598,6 +13708,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/gl.po b/editor/translations/gl.po index 054b62690d..285cdf4e3b 100644 --- a/editor/translations/gl.po +++ b/editor/translations/gl.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2021-08-12 14:48+0000\n" +"PO-Revision-Date: 2021-08-12 21:32+0000\n" "Last-Translator: davidrogel <david.rogel.pernas@icloud.com>\n" "Language-Team: Galician <https://hosted.weblate.org/projects/godot-engine/" "godot/gl/>\n" @@ -368,13 +368,12 @@ msgstr "Engadir Animación" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp msgid "node '%s'" -msgstr "" +msgstr "nodo '%s'" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "animation" -msgstr "Animación" +msgstr "animación" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." @@ -382,9 +381,8 @@ msgstr "Un AnimationPlayer non pode animarse a si mesmo, só a outros players." #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "property '%s'" -msgstr "Non existe a propiedade '%s'." +msgstr "propiedade '%s'" #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -1024,7 +1022,7 @@ msgstr "" msgid "Dependencies" msgstr "Dependencias" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Recurso" @@ -1693,13 +1691,13 @@ msgstr "" "Active 'Importar Pvrtc' na 'Configuración do Proxecto' ou desactive " "'Controlador de Respaldo Activado'." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "Non se encontrou un modelo de depuración personalizado." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2080,7 +2078,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "(Re)Importando Assets" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "Superior" @@ -2592,6 +2590,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "Escena actual non gardada ¿Abrir de todos os modos?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "Desfacer" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "Refacer" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "Non se pode volver a cargar unha escena que nunca foi gardada." @@ -3275,6 +3299,11 @@ msgid "Merge With Existing" msgstr "Combinar Con Existentes" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Cambiar Transformación da Animación" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "Abrir e Executar un Script" @@ -3528,6 +3557,10 @@ msgstr "" "O recurso seleccionado (%s) non coincide con ningún tipo esperado para esta " "propiedade (%s)." +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "Facer Único" @@ -5616,6 +5649,17 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Locked" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Grupos" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6555,7 +6599,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7145,6 +7193,15 @@ msgstr "Número de Puntos Xerados:" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Occluder Set Transform" +msgstr "" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Crear Nodo" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7641,12 +7698,14 @@ msgid "Skeleton2D" msgstr "Skeleton2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "Crear Pose de Repouso (a partir dos Ósos)" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "Asignar Pose de Repouso aos Ósos" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "Asignar Pose de Repouso aos Ósos" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "Sobreescribir" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7673,6 +7732,71 @@ msgid "Perspective" msgstr "Perspetiva" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Perspective" +msgstr "Perspetiva" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "Perspetiva" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Left Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Perspective" +msgstr "Perspetiva" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Perspective" +msgstr "Perspetiva" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Perspective" +msgstr "Perspetiva" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7791,42 +7915,22 @@ msgid "Bottom View." msgstr "Vista Inferior." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "Inferior" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "Vista Esquerda." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "Esquerda" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "Vista Dereita." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "Dereita" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "Vista Frontal." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "Frontal" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "Vista Traseria." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "Traseira" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "Aliñar Transformación con Perspectiva" @@ -8100,6 +8204,11 @@ msgid "View Portal Culling" msgstr "Axustes de Visión" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "Axustes de Visión" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "Axustes..." @@ -8165,8 +8274,9 @@ msgid "Post" msgstr "Posterior (Post)" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" -msgstr "Gizmo sen nome" +#, fuzzy +msgid "Unnamed Gizmo" +msgstr "Proxecto Sen Nome" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Mesh2D" @@ -12240,6 +12350,14 @@ msgstr "" msgid "Set Portal Point Position" msgstr "" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Position" +msgstr "" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12523,6 +12641,11 @@ msgstr "" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "Resolución á Metade" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -12992,170 +13115,159 @@ msgstr "Buscar en VisualScript" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting APK..." msgstr "Exportar..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Uninstalling..." msgstr "Desinstalar" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Installing to device, please wait..." msgstr "Cargando, por favor agarde..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not install to device: %s" msgstr "Non se puido iniciar subproceso!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not execute on device." msgstr "Non se puido crear cartafol." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" "Non está configurado o Keystore de depuración nin na configuración do " "editor, nin nos axustes de exportación." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" "O Keystore Release non está configurado correctamente nos axustes de " "exportación." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" "\"Use Custom Build\" debe estar activado para usar estas características " "adicionais (plugins)." -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13163,61 +13275,61 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Signing release %s..." msgstr "" "Examinando arquivos,\n" "Por favor, espere..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Verifying %s..." msgstr "Engadindo %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13225,25 +13337,25 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files to gradle project\n" msgstr "Non se pudo editar o arquivo 'project.godot' na ruta do proxecto." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "Construir Proxecto Android (gradle)" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." @@ -13253,33 +13365,33 @@ msgstr "" "Ou visita docs.godotengine.org para ver a documentación sobre compilación " "para Android." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "Contenido do Paquete:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Creating APK..." msgstr "Conectando..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13287,21 +13399,21 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Adding files..." msgstr "Engadindo %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files" msgstr "Non se puido iniciar subproceso!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13794,6 +13906,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14101,6 +14221,14 @@ msgstr "" msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14150,6 +14278,10 @@ msgstr "" "As dimensións da Mini-Ventá (Viewport) deben de ser maior que 0 para poder " "renderizar nada." +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " @@ -14200,6 +14332,27 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#~ msgid "Make Rest Pose (From Bones)" +#~ msgstr "Crear Pose de Repouso (a partir dos Ósos)" + +#~ msgid "Bottom" +#~ msgstr "Inferior" + +#~ msgid "Left" +#~ msgstr "Esquerda" + +#~ msgid "Right" +#~ msgstr "Dereita" + +#~ msgid "Front" +#~ msgstr "Frontal" + +#~ msgid "Rear" +#~ msgstr "Traseira" + +#~ msgid "Nameless gizmo" +#~ msgstr "Gizmo sen nome" + #~ msgid "Singleton" #~ msgstr "Singleton" diff --git a/editor/translations/he.po b/editor/translations/he.po index d0a09565de..15c4694949 100644 --- a/editor/translations/he.po +++ b/editor/translations/he.po @@ -1041,7 +1041,7 @@ msgstr "" msgid "Dependencies" msgstr "תלויות" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "משאב" @@ -1692,13 +1692,13 @@ msgid "" "Enabled'." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "תבנית ניפוי שגיאות מותאמת אישית לא נמצאה." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2096,7 +2096,7 @@ msgstr "יש מספר מייבאים לסוגים שונים המצביעים ל msgid "(Re)Importing Assets" msgstr "ייבוא משאבים (מחדש)" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "עליון" @@ -2594,6 +2594,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "הסצנה הנוכחית לא נשמרה. לפתוח בכל זאת?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "ביטול" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "ביצוע חוזר" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "לא ניתן לרענן סצנה שמעולם לא נשמרה." @@ -3265,6 +3291,11 @@ msgid "Merge With Existing" msgstr "מיזוג עם נוכחיים" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "החלפת הנפשת אפקט שינוי צורה" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "פתיחה והרצה של סקריפט" @@ -3516,6 +3547,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "" @@ -5673,6 +5708,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "בחירת מיקוד" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "קבוצות" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6633,7 +6680,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7237,6 +7288,16 @@ msgstr "מחיקת נקודה" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "התמרה" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "מפרק אחר" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7764,12 +7825,14 @@ msgid "Skeleton2D" msgstr "יחידני" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "טעינת בררת המחדל" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "דריסה" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7799,6 +7862,63 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "מבט תחתי" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Left Orthogonal" +msgstr "כפתור שמאלי" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Orthogonal" +msgstr "כפתור ימני" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7914,42 +8034,22 @@ msgid "Bottom View." msgstr "מבט מתחת." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "מתחת" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "מבט משמאל." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "שמאל" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "מבט מימין." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "ימין" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "מבט קדמי." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "קדמי" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "מבט אחורי." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "אחורי" - -#: editor/plugins/spatial_editor_plugin.cpp #, fuzzy msgid "Align Transform with View" msgstr "יישור עם התצוגה" @@ -8221,6 +8321,11 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "עריכת מצולע" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy msgid "Settings..." @@ -8287,7 +8392,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -12444,6 +12549,15 @@ msgstr "" msgid "Set Portal Point Position" msgstr "" +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Radius" +msgstr "שינוי רדיוס לצורת גליל" + +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Position" +msgstr "" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "שינוי רדיוס גליל" @@ -12731,6 +12845,11 @@ msgstr "מדפיס תאורות:" msgid "Class name can't be a reserved keyword" msgstr "שם מחלקה לא יכול להיות מילת מפתח שמורה" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "מילוי הבחירה" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "סוף מחסנית מעקב לחריגה פנימית" @@ -13208,143 +13327,143 @@ msgstr "חיפוש VisualScript" msgid "Get %s" msgstr "קבלת %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "שם החבילה חסר." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "מקטעי החבילה חייבים להיות באורך שאינו אפס." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "התו '%s' אינו מותר בשמות חבילת יישום אנדרואיד." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "ספרה אינה יכולה להיות התו הראשון במקטע חבילה." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "התו '%s' אינו יכול להיות התו הראשון במקטע חבילה." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "החבילה חייבת לכלול לפחות מפריד '.' אחד." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "נא לבחור התקן מהרשימה" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting APK..." msgstr "ייצוא" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Uninstalling..." msgstr "הסרה" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Installing to device, please wait..." msgstr "" "הקבצים נסרקים,\n" "נא להמתין…" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not install to device: %s" msgstr "לא ניתן להפעיל תהליך משנה!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Running on device..." msgstr "מופעל סקריפט מותאם אישית…" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not execute on device." msgstr "לא ניתן ליצור תיקייה." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "תבנית בנייה לאנדרואיד לא מותקנת בפרוייקט. ההתקנה היא מתפריט המיזם." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "מפתח לניפוי שגיאות לא נקבע בהגדרות העורך ולא בהגדרות הייצוא." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "מפתח גירסת שיחרור נקבע באופן שגוי בהגדרות הייצוא." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "A valid Android SDK path is required in Editor Settings." msgstr "" "נתיב לא חוקי לערכת פיתוח אנדרואיד עבור בנייה מותאמת אישית בהגדרות העורך." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Invalid Android SDK path in Editor Settings." msgstr "" "נתיב לא חוקי לערכת פיתוח אנדרואיד עבור בנייה מותאמת אישית בהגדרות העורך." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" "נתיב לא חוקי לערכת פיתוח אנדרואיד עבור בנייה מותאמת אישית בהגדרות העורך." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "מפתח ציבורי לא חוקי להרחבת APK." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "שם חבילה לא חוקי:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" @@ -13352,34 +13471,21 @@ msgstr "" "מודול \"GodotPaymentV3\" לא חוקי נמצא בהגדרת המיזם ב-\"אנדרואיד/מודולים" "\" (שינוי בגודו 3.2.2).\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "חובה לאפשר ״שימוש בבניה מותאמת אישית״ כדי להשתמש בתוספים." -#: platform/android/export/export.cpp -#, fuzzy -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "\"דרגות של חופש\" תקף רק כאשר \"מצב Xr\" הוא \"Oculus Mobile VR\"." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "\"Hand Tracking\" תקף רק כאשר \"מצב Xr\" הוא \"Oculus Mobile VR\"." -#: platform/android/export/export.cpp -#, fuzzy -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "\"Focus Awareness\" תקף רק כאשר \"מצב Xr\" הוא \"Oculus Mobile VR\"." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13387,57 +13493,57 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Signing release %s..." msgstr "" "הקבצים נסרקים,\n" "נא להמתין…" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not find keystore, unable to export." msgstr "לא ניתן לפתוח תבנית לייצוא:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Verifying %s..." msgstr "הגדרות" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting for Android" msgstr "ייצוא" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." @@ -13445,7 +13551,7 @@ msgstr "" "מנסה לבנות מתבנית מותאמת אישית, אך לא קיים מידע על גירסת הבניה. נא להתקין " "מחדש מתפריט 'Project'." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" "Android build version mismatch:\n" @@ -13458,25 +13564,25 @@ msgstr "" " גרסת גודו: %s\n" "נא להתקין מחדש את תבנית בניית אנדרואיד מתפריט 'Project'." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not write expansion package file!" msgstr "לא ניתן לכתוב קובץ:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "בניית מיזם אנדרואיד (gradle)" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." @@ -13484,34 +13590,34 @@ msgstr "" "בניית מיזם אנדרואיד נכשלה, ניתן לבדוק את הפלט לאיתור השגיאה.\n" "לחלופין, קיים ב- docs.godotengine.org תיעוד לבניית אנדרואיד." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "הנפשה לא נמצאה: '%s'" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Creating APK..." msgstr "יצירת קווי מתאר..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" "Could not find template APK to export:\n" "%s" msgstr "לא ניתן לפתוח תבנית לייצוא:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13519,21 +13625,21 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Adding files..." msgstr "איתור…" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files" msgstr "לא ניתן לכתוב קובץ:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -14044,6 +14150,14 @@ msgstr "" "NavigationMeshInstance חייב להיות ילד או נכד למפרק Navigation. הוא מספק רק " "נתוני ניווט." +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14363,6 +14477,14 @@ msgstr "יש להשתמש בסיומת תקנית." msgid "Enable grid minimap." msgstr "הפעלת הצמדה" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14413,6 +14535,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "גודל חלון התצוגה חייב להיות גדול מ-0 על מנת להציג משהו." +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " @@ -14464,6 +14590,34 @@ msgstr "השמה ל-uniform." msgid "Constants cannot be modified." msgstr "אי אפשר לשנות קבועים." +#~ msgid "Bottom" +#~ msgstr "מתחת" + +#~ msgid "Left" +#~ msgstr "שמאל" + +#~ msgid "Right" +#~ msgstr "ימין" + +#~ msgid "Front" +#~ msgstr "קדמי" + +#~ msgid "Rear" +#~ msgstr "אחורי" + +#, fuzzy +#~ msgid "" +#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile " +#~ "VR\"." +#~ msgstr "\"דרגות של חופש\" תקף רק כאשר \"מצב Xr\" הוא \"Oculus Mobile VR\"." + +#, fuzzy +#~ msgid "" +#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" +#~ "\"." +#~ msgstr "" +#~ "\"Focus Awareness\" תקף רק כאשר \"מצב Xr\" הוא \"Oculus Mobile VR\"." + #~ msgid "Package Contents:" #~ msgstr "תוכן החבילה:" diff --git a/editor/translations/hi.po b/editor/translations/hi.po index 916e6fd01d..e6a2a76f37 100644 --- a/editor/translations/hi.po +++ b/editor/translations/hi.po @@ -1027,7 +1027,7 @@ msgstr "" msgid "Dependencies" msgstr "निर्भरताएँ" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "संसाधन" @@ -1688,13 +1688,13 @@ msgstr "" "आवश्यकता होती है।\n" "प्रोजेक्ट सेटिंग्स में \"आयात Pvrtc\" सक्षम करें, या \"ड्राइवर फ़ॉलबैक सक्षम\" अक्षम करें।" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "कस्टम डिबग टेम्प्लेट नहीं मिला." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2075,7 +2075,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "अस्सेट (पुन:) इंपोर्ट" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "सर्वोच्च" @@ -2578,6 +2578,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "वर्तमान दृश्य को बचाया नहीं गया । वैसे भी खुला?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "पूर्ववत्" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "दोहराएँ" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "एक दृश्य है कि कभी नहीं बचाया गया था फिर से लोड नहीं कर सकते ।" @@ -3253,6 +3279,11 @@ msgid "Merge With Existing" msgstr "मौजूदा के साथ विलय" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Anim परिवर्तन परिणत" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "ओपन एंड रन एक स्क्रिप्ट" @@ -3506,6 +3537,10 @@ msgid "" msgstr "" "चयनित संसाधन (%s) इस संपत्ति (% एस) के लिए अपेक्षित किसी भी प्रकार से मेल नहीं खाता है।" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "अद्वितीय बनाओ" @@ -5595,6 +5630,17 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Locked" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "अनेक ग्रुप" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6511,7 +6557,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7105,6 +7155,16 @@ msgstr "अंक बनाएं।" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "एनीमेशन परिवर्तन परिणत" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "को हटा दें" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7610,12 +7670,14 @@ msgid "Skeleton2D" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "प्रायिक लोड कीजिये" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "मौजूदा के ऊपर लिखे" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7643,6 +7705,60 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7753,42 +7869,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -8053,6 +8149,11 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "सदस्यता बनाएं" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "" @@ -8118,7 +8219,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -12178,6 +12279,14 @@ msgstr "" msgid "Set Portal Point Position" msgstr "" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Position" +msgstr "" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12467,6 +12576,11 @@ msgstr "लाईटमॅप बना रहा है" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "सभी खंड" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -12950,166 +13064,155 @@ msgstr "" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting APK..." msgstr "निर्यात..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Uninstalling..." msgstr "अनइंस्टाल करें" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Installing to device, please wait..." msgstr "दर्पण को पुनः प्राप्त करना, कृपया प्रतीक्षा करें ..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not install to device: %s" msgstr "उपप्रक्रिया शुरू नहीं कर सका!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Running on device..." msgstr "कस्टम स्क्रिप्ट चला रहा है..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not execute on device." msgstr "फ़ोल्डर नही बना सकते." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Invalid package name:" msgstr "गलत फॉण्ट का आकार |" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13117,60 +13220,60 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Signing release %s..." msgstr "" "फ़ाइले स्कैन कर रहा है,\n" "कृपया रुकिये..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13178,56 +13281,56 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "पैकेज में है:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Creating APK..." msgstr "जोड़ने..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13235,21 +13338,21 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Adding files..." msgstr "पसंदीदा:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files" msgstr "उपप्रक्रिया शुरू नहीं कर सका!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13712,6 +13815,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14003,6 +14114,14 @@ msgstr "मान्य एक्सटेनशन इस्तेमाल क msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14043,6 +14162,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/hr.po b/editor/translations/hr.po index 37d517cba0..c5fcf3ab6e 100644 --- a/editor/translations/hr.po +++ b/editor/translations/hr.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2021-07-16 05:47+0000\n" +"PO-Revision-Date: 2021-08-13 19:05+0000\n" "Last-Translator: LeoClose <leoclose575@gmail.com>\n" "Language-Team: Croatian <https://hosted.weblate.org/projects/godot-engine/" "godot/hr/>\n" @@ -18,7 +18,7 @@ msgstr "" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.7.2-dev\n" +"X-Generator: Weblate 4.8-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -149,7 +149,7 @@ msgstr "Animacija - Promijeni prijelaz" #: editor/animation_track_editor.cpp msgid "Anim Change Transform" -msgstr "" +msgstr "Anim Promijeni Transform" #: editor/animation_track_editor.cpp msgid "Anim Change Keyframe Value" @@ -213,9 +213,8 @@ msgid "Animation Playback Track" msgstr "" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation length (frames)" -msgstr "Trajanje animacije (u sekundama)" +msgstr "Trajanje animacije (frames)" #: editor/animation_track_editor.cpp msgid "Animation length (seconds)" @@ -523,12 +522,12 @@ msgstr "" #: editor/animation_track_editor.cpp msgid "Seconds" -msgstr "" +msgstr "Sekunde" #: editor/animation_track_editor.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "FPS" -msgstr "" +msgstr "FPS" #: editor/animation_track_editor.cpp editor/editor_plugin_settings.cpp #: editor/editor_resource_picker.cpp @@ -539,15 +538,15 @@ msgstr "" #: editor/project_settings_editor.cpp editor/property_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Edit" -msgstr "" +msgstr "Uredi" #: editor/animation_track_editor.cpp msgid "Animation properties." -msgstr "" +msgstr "Svojstva animacije." #: editor/animation_track_editor.cpp msgid "Copy Tracks" -msgstr "" +msgstr "Kopiraj Zapise" #: editor/animation_track_editor.cpp msgid "Scale Selection" @@ -942,11 +941,11 @@ msgstr "Napravi novi %s" #: editor/create_dialog.cpp editor/plugins/asset_library_editor_plugin.cpp msgid "No results for \"%s\"." -msgstr "" +msgstr "Nema rezultata za \"%s\"." #: editor/create_dialog.cpp editor/property_selector.cpp msgid "No description available for %s." -msgstr "" +msgstr "Opis za %s nije dostupan." #: editor/create_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp @@ -1006,7 +1005,7 @@ msgstr "" msgid "Dependencies" msgstr "Ovisnosti" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Resurs" @@ -1645,13 +1644,13 @@ msgid "" "Enabled'." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2029,7 +2028,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "" @@ -2507,6 +2506,30 @@ msgid "Current scene not saved. Open anyway?" msgstr "" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Undo: %s" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Redo: %s" +msgstr "" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "" @@ -3132,6 +3155,11 @@ msgid "Merge With Existing" msgstr "" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Anim Promijeni Transform" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "" @@ -3375,6 +3403,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "" @@ -5429,6 +5461,16 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Locked" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Grouped" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6334,7 +6376,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -6920,6 +6966,15 @@ msgstr "Pomakni Bezier Točke" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Occluder Set Transform" +msgstr "" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Premjesti čvor(node)" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7414,11 +7469,12 @@ msgid "Skeleton2D" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "Učitaj Zadano" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" +msgid "Overwrite Rest Pose" msgstr "" #: editor/plugins/skeleton_editor_plugin.cpp @@ -7446,6 +7502,60 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7555,42 +7665,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -7853,6 +7943,10 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Occlusion Culling" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "" @@ -7918,7 +8012,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -8904,9 +8998,8 @@ msgid "Occlusion Mode" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Navigation Mode" -msgstr "Način Interpolacije" +msgstr "Način Navigacije" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Bitmask Mode" @@ -9174,9 +9267,8 @@ msgid "Detect new changes" msgstr "" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Changes" -msgstr "Promijeni" +msgstr "Promjene" #: editor/plugins/version_control_editor_plugin.cpp msgid "Modified" @@ -11858,6 +11950,14 @@ msgstr "" msgid "Set Portal Point Position" msgstr "" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Position" +msgstr "" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12142,6 +12242,10 @@ msgstr "" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Build Solution" +msgstr "" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -12617,159 +12721,148 @@ msgstr "" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Uninstalling..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Installing to device, please wait..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not execute on device." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -12777,57 +12870,57 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -12835,54 +12928,54 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package not found: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -12890,19 +12983,19 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Adding files..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13353,6 +13446,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -13642,6 +13743,14 @@ msgstr "Nastavak mora biti ispravan." msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13682,6 +13791,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/hu.po b/editor/translations/hu.po index c822f5bd53..2df1fc98b0 100644 --- a/editor/translations/hu.po +++ b/editor/translations/hu.po @@ -1039,7 +1039,7 @@ msgstr "" msgid "Dependencies" msgstr "Függőségek" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Forrás" @@ -1705,13 +1705,13 @@ msgstr "" "Engedélyezze az 'Import Pvrtc' beállítást a Projekt Beállításokban, vagy " "kapcsolja ki a 'Driver Fallback Enabled' beállítást." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "Az egyéni hibakeresési sablon nem található." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2095,7 +2095,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "Eszközök (Újra) Betöltése" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "Eleje" @@ -2612,6 +2612,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "Még nem mentette az aktuális jelenetet. Megnyitja mindenképp?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "Visszavonás" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "Újra" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "Nem lehet újratölteni egy olyan jelenetet, amit soha nem mentett el." @@ -3297,6 +3323,11 @@ msgid "Merge With Existing" msgstr "Egyesítés Meglévővel" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Animáció - Transzformáció Változtatása" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "Szkriptet Megnyit és Futtat" @@ -3545,6 +3576,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "Egyedivé tétel" @@ -5652,6 +5687,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "%s CanvasItem mozgatása (%d, %d)-ra/re" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "Kijelölés zárolása" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Csoportok" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6577,7 +6624,13 @@ msgid "Remove Selected Item" msgstr "Kijelölt Elem Eltávolítása" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +#, fuzzy +msgid "Import from Scene (Ignore Transforms)" +msgstr "Importálás Jelenetből" + +#: editor/plugins/mesh_library_editor_plugin.cpp +#, fuzzy +msgid "Import from Scene (Apply Transforms)" msgstr "Importálás Jelenetből" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7164,6 +7217,16 @@ msgstr "Generált Pontok Száma:" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "Megnéz a Síklap transzformációját." + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Node létrehozás" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7660,12 +7723,14 @@ msgid "Skeleton2D" msgstr "Csontváz2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "Visszaállítás Alapértelmezettre" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "Felülírás" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7692,6 +7757,71 @@ msgid "Perspective" msgstr "Perspektíva" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Orthogonal" +msgstr "Ortogonális" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Perspective" +msgstr "Perspektíva" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Orthogonal" +msgstr "Ortogonális" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "Perspektíva" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Left Orthogonal" +msgstr "Ortogonális" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Perspective" +msgstr "Perspektíva" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Orthogonal" +msgstr "Ortogonális" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Orthogonal" +msgstr "Ortogonális" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Perspective" +msgstr "Perspektíva" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Orthogonal" +msgstr "Ortogonális" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Perspective" +msgstr "Perspektíva" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "Átalakítás Megszakítva." @@ -7809,42 +7939,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -8109,6 +8219,10 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Occlusion Culling" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "Beállítások..." @@ -8174,8 +8288,9 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" -msgstr "" +#, fuzzy +msgid "Unnamed Gizmo" +msgstr "Névtelen projekt" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Mesh2D" @@ -12161,6 +12276,15 @@ msgstr "Görbe Pont Pozíció Beállítása" msgid "Set Portal Point Position" msgstr "Görbe Pont Pozíció Beállítása" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr "Be-Görbe Pozíció Beállítása" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12446,6 +12570,11 @@ msgstr "Fénytérképek Ábrázolása" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "Kijelölés kitöltése" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -12921,165 +13050,154 @@ msgstr "" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "Válasszon készüléket a listából" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting APK..." msgstr "Összes exportálása" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Uninstalling..." msgstr "Eltávolítás" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Installing to device, please wait..." msgstr "Betöltés, kérem várjon..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not install to device: %s" msgstr "Az alprocesszt nem lehetett elindítani!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Running on device..." msgstr "Tetszőleges Szkript Futtatása..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not execute on device." msgstr "Nem sikerült létrehozni a mappát." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "Érvénytelen csomagnév:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13087,62 +13205,62 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Signing release %s..." msgstr "" "Fájlok vizsgálata,\n" "kérjük várjon..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Verifying %s..." msgstr "%s Hozzáadása..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting for Android" msgstr "Összes exportálása" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13150,56 +13268,56 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "Az animáció nem található: '%s'" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Creating APK..." msgstr "Kontúrok létrehozása…" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13207,21 +13325,21 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Adding files..." msgstr "%s Hozzáadása..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files" msgstr "Az alprocesszt nem lehetett elindítani!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13678,6 +13796,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -13967,6 +14093,14 @@ msgstr "Használjon érvényes kiterjesztést." msgid "Enable grid minimap." msgstr "Rács kistérkép engedélyezése." +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14011,6 +14145,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/id.po b/editor/translations/id.po index 3426bd0962..83b80592b1 100644 --- a/editor/translations/id.po +++ b/editor/translations/id.po @@ -10,7 +10,7 @@ # Fajar Ru <kzofajar@gmail.com>, 2018. # Khairul Hidayat <khairulcyber4rt@gmail.com>, 2016. # Reza Hidayat Bayu Prabowo <rh.bayu.prabowo@gmail.com>, 2018, 2019. -# Romi Kusuma Bakti <romikusumab@gmail.com>, 2017, 2018. +# Romi Kusuma Bakti <romikusumab@gmail.com>, 2017, 2018, 2021. # Sofyan Sugianto <sofyanartem@gmail.com>, 2017-2018, 2019, 2020, 2021. # Tito <ijavadroid@gmail.com>, 2018. # Tom My <tom.asadinawan@gmail.com>, 2017. @@ -32,12 +32,13 @@ # Reza Almanda <rezaalmanda27@gmail.com>, 2021. # Naufal Adriansyah <naufaladrn90@gmail.com>, 2021. # undisputedgoose <diablodvorak@gmail.com>, 2021. +# Tsaqib Fadhlurrahman Soka <sokatsaqib@gmail.com>, 2021. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2021-07-05 14:32+0000\n" -"Last-Translator: undisputedgoose <diablodvorak@gmail.com>\n" +"PO-Revision-Date: 2021-09-20 14:46+0000\n" +"Last-Translator: Sofyan Sugianto <sofyanartem@gmail.com>\n" "Language-Team: Indonesian <https://hosted.weblate.org/projects/godot-engine/" "godot/id/>\n" "Language: id\n" @@ -45,12 +46,12 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.8-dev\n" +"X-Generator: Weblate 4.9-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." -msgstr "Tipe argumen salah dalam penggunaan convert(), gunakan konstan TYPE_*." +msgstr "Tipe argumen tidak valid untuk convert(), gunakan konstanta TYPE_*." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp msgid "Expected a string of length 1 (a character)." @@ -60,9 +61,7 @@ msgstr "String dengan panjang 1 (karakter) yang diharapkan." #: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." -msgstr "" -"Tidak memiliki bytes yang cukup untuk merubah bytes ke nilai asal, atau " -"format tidak valid." +msgstr "Tidak cukup byte untuk mendekode byte, atau format tidak valid." #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" @@ -70,7 +69,8 @@ msgstr "Masukkan tidak sah %i (tidak diberikan) dalam ekspresi" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" -msgstr "self tidak dapat digunakan karena instansi adalah null" +msgstr "" +"self tidak dapat digunakan karena instance bernilai null (tidak di-passing)" #: core/math/expression.cpp msgid "Invalid operands to operator %s, %s and %s." @@ -395,15 +395,13 @@ msgstr "Sisipkan Anim" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "node '%s'" -msgstr "Tidak dapat membuka '%s'." +msgstr "node '%s'" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "animation" -msgstr "Animasi" +msgstr "animasi" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." @@ -412,9 +410,8 @@ msgstr "" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "property '%s'" -msgstr "Tidak ada properti '%s'." +msgstr "properti '%s'" #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -584,7 +581,7 @@ msgstr "FPS" #: editor/project_settings_editor.cpp editor/property_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Edit" -msgstr "Sunting" +msgstr "Edit" #: editor/animation_track_editor.cpp msgid "Animation properties." @@ -624,9 +621,8 @@ msgid "Go to Previous Step" msgstr "Pergi ke Langkah Sebelumnya" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Apply Reset" -msgstr "Reset" +msgstr "Terapkan Reset" #: editor/animation_track_editor.cpp msgid "Optimize Animation" @@ -645,9 +641,8 @@ msgid "Use Bezier Curves" msgstr "Gunakan Lengkungan Bezier" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Create RESET Track(s)" -msgstr "Tempel Trek-trek" +msgstr "Buat RESET Track" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" @@ -971,9 +966,8 @@ msgid "Edit..." msgstr "sunting..." #: editor/connections_dialog.cpp -#, fuzzy msgid "Go to Method" -msgstr "Menuju Ke Fungsi" +msgstr "Menuju Ke Metode" #: editor/create_dialog.cpp msgid "Change %s Type" @@ -993,7 +987,7 @@ msgstr "Tidak ada hasil untuk \"%s\"." #: editor/create_dialog.cpp editor/property_selector.cpp msgid "No description available for %s." -msgstr "" +msgstr "Tidak ada deskripsi tersedia untuk %s." #: editor/create_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp @@ -1053,7 +1047,7 @@ msgstr "" msgid "Dependencies" msgstr "Ketergantungan" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Resource" @@ -1093,17 +1087,16 @@ msgid "Owners Of:" msgstr "Pemilik Dari:" #: editor/dependency_editor.cpp -#, fuzzy msgid "" "Remove the selected files from the project? (Cannot be undone.)\n" "Depending on your filesystem configuration, the files will either be moved " "to the system trash or deleted permanently." msgstr "" "Hapus berkas yang dipilih dari proyek? (tidak bisa dibatalkan)\n" -"Anda bisa menemukan berkas yang telah dihapus di tong sampah." +"Tergantung pada konfigurasi sistem file Anda, file akan dipindahkan ke " +"tempat sampah sistem atau dihapus secara permanen." #: editor/dependency_editor.cpp -#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -1111,10 +1104,11 @@ msgid "" "Depending on your filesystem configuration, the files will either be moved " "to the system trash or deleted permanently." msgstr "" -"File-file yang telah dihapus diperlukan oleh resource lain agar mereka dapat " -"bekerja.\n" +"File-file yang telah dihapus diperlukan oleh sumber daya lain agar mereka " +"dapat bekerja.\n" "Hapus saja? (tidak bisa dibatalkan)\n" -"Anda bisa menemukan berkas yang telah dihapus di tong sampah." +"Tergantung pada konfigurasi sistem file Anda, file akan dipindahkan ke " +"tempat sampah sistem atau dihapus secara permanen." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1284,41 +1278,36 @@ msgid "Licenses" msgstr "Lisensi" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Error opening asset file for \"%s\" (not in ZIP format)." -msgstr "Galat saat membuka berkas paket (tidak dalam format ZIP)." +msgstr "Gagal saat membuka berkas aset untuk \"%s\" (tidak dalam format ZIP)." #: editor/editor_asset_installer.cpp -#, fuzzy msgid "%s (already exists)" -msgstr "%s (Sudah Ada)" +msgstr "%s (sudah ada)" #: editor/editor_asset_installer.cpp msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:" -msgstr "" +msgstr "Konten dari aset \"%s\" - %d berkas-berkas konflik dengan proyek anda:" #: editor/editor_asset_installer.cpp msgid "Contents of asset \"%s\" - No files conflict with your project:" -msgstr "" +msgstr "Konten dari aset \"%s\" - Tidak ada konflik dengan proyek anda:" #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" msgstr "Membuka Aset Terkompresi" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "The following files failed extraction from asset \"%s\":" -msgstr "Berkas berikut gagal diekstrak dari paket:" +msgstr "Berkas ini gagal mengekstrak dari aset \"%s\":" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "(and %s more files)" -msgstr "Dan %s berkas lebih banyak." +msgstr "(dan %s berkas lebih banyak)" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Asset \"%s\" installed successfully!" -msgstr "Paket Sukses Terpasang!" +msgstr "Aset \"%s\" sukses terpasang!" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -1330,9 +1319,8 @@ msgid "Install" msgstr "Pasang" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Asset Installer" -msgstr "Paket Instalasi" +msgstr "Aset Instalasi" #: editor/editor_audio_buses.cpp msgid "Speakers" @@ -1395,9 +1383,8 @@ msgid "Bypass" msgstr "Jalan Lingkar" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Bus Options" -msgstr "Opsi Bus" +msgstr "Pilihan Bus" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp #: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp @@ -1563,13 +1550,13 @@ msgid "Can't add autoload:" msgstr "Tidak dapat menambahkan autoload" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "%s is an invalid path. File does not exist." -msgstr "File tidak ada." +msgstr "%s adalah jalur yang tidak valid. Berkas tidak ada." #: editor/editor_autoload_settings.cpp msgid "%s is an invalid path. Not in resource path (res://)." msgstr "" +"%s adalah jalur yang tidak valid. Tidak dalam jalur sumber daya (res://)." #: editor/editor_autoload_settings.cpp msgid "Add AutoLoad" @@ -1593,9 +1580,8 @@ msgid "Name" msgstr "Nama" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Global Variable" -msgstr "Namai kembali Variabel" +msgstr "Variabel Global" #: editor/editor_data.cpp msgid "Paste Params" @@ -1719,13 +1705,13 @@ msgstr "" "Aktifkan 'Impor Pvrtc' di Pengaturan Proyek, atau matikan 'Driver Fallback " "Enabled'." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "Templat awakutu kustom tidak ditemukan." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -1769,48 +1755,52 @@ msgstr "Dok Impor" #: editor/editor_feature_profile.cpp msgid "Allows to view and edit 3D scenes." -msgstr "" +msgstr "Memungkinkan untuk melihat dan mengedit scene 3D." #: editor/editor_feature_profile.cpp msgid "Allows to edit scripts using the integrated script editor." msgstr "" +"Memungkinkan untuk mengedit skrip menggunakan editor skrip terintegrasi." #: editor/editor_feature_profile.cpp msgid "Provides built-in access to the Asset Library." -msgstr "" +msgstr "Menyediakan akses bawaan ke Perpustakaan Aset." #: editor/editor_feature_profile.cpp msgid "Allows editing the node hierarchy in the Scene dock." -msgstr "" +msgstr "Memungkinkan pengeditan hierarki node di dock Scene." #: editor/editor_feature_profile.cpp msgid "" "Allows to work with signals and groups of the node selected in the Scene " "dock." msgstr "" +"Memungkinkan untuk bekerja dengan sinyal dan kelompok node yang dipilih di " +"dock Scene." #: editor/editor_feature_profile.cpp msgid "Allows to browse the local file system via a dedicated dock." -msgstr "" +msgstr "Memungkinkan untuk menelusuri sistem file lokal melalui dock khusus." #: editor/editor_feature_profile.cpp msgid "" "Allows to configure import settings for individual assets. Requires the " "FileSystem dock to function." msgstr "" +"Memungkinkan untuk mengkonfigurasi pengaturan impor untuk aset individu. " +"Membutuhkan dock FileSystem untuk berfungsi." #: editor/editor_feature_profile.cpp -#, fuzzy msgid "(current)" -msgstr "(Kondisi Saat Ini)" +msgstr "(saat ini)" #: editor/editor_feature_profile.cpp msgid "(none)" -msgstr "" +msgstr "(tidak ada)" #: editor/editor_feature_profile.cpp msgid "Remove currently selected profile, '%s'? Cannot be undone." -msgstr "" +msgstr "Menghapus profil yang dipilih saat ini, '%s'? Tidak bisa dibatalkan." #: editor/editor_feature_profile.cpp msgid "Profile must be a valid filename and must not contain '.'" @@ -1841,19 +1831,16 @@ msgid "Enable Contextual Editor" msgstr "Aktifkan Editor Kontekstual" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Class Properties:" -msgstr "Properti:" +msgstr "Properti Kelas:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Main Features:" -msgstr "Fitur-fitur" +msgstr "Fitur Utama:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Nodes and Classes:" -msgstr "Kelas yang Diaktifkan:" +msgstr "Node dan Kelas:" #: editor/editor_feature_profile.cpp msgid "File '%s' format is invalid, import aborted." @@ -1872,23 +1859,20 @@ msgid "Error saving profile to path: '%s'." msgstr "Galat saat menyimpan profil ke: '%s'." #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Reset to Default" -msgstr "Kembalikan ke Nilai Baku" +msgstr "Reset ke Default" #: editor/editor_feature_profile.cpp msgid "Current Profile:" msgstr "Profil Sekarang:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Create Profile" -msgstr "Hapus Profil" +msgstr "Membuat Profil" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Remove Profile" -msgstr "Hapus Tile" +msgstr "Hapus Profil" #: editor/editor_feature_profile.cpp msgid "Available Profiles:" @@ -1908,18 +1892,17 @@ msgid "Export" msgstr "Ekspor" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Configure Selected Profile:" -msgstr "Profil Sekarang:" +msgstr "Konfigurasi Profil Saat Ini:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Extra Options:" -msgstr "Opsi Tekstur" +msgstr "Opsi Ekstra:" #: editor/editor_feature_profile.cpp msgid "Create or import a profile to edit available classes and properties." msgstr "" +"Buat atau impor profil untuk mengedit kelas dan properti yang tersedia." #: editor/editor_feature_profile.cpp msgid "New profile name:" @@ -1946,9 +1929,8 @@ msgid "Select Current Folder" msgstr "Pilih Folder Saat Ini" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "File exists, overwrite?" -msgstr "File telah ada, Overwrite?" +msgstr "File sudah ada, timpa?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Select This Folder" @@ -2109,7 +2091,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "Mengimpor ulang Aset" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "Atas" @@ -2346,6 +2328,9 @@ msgid "" "Update Continuously is enabled, which can increase power usage. Click to " "disable it." msgstr "" +"Berputar saat jendela editor menggambar ulang.\n" +"Perbarui Berkelanjutan diaktifkan, yang dapat meningkatkan penggunaan daya. " +"Klik untuk menonaktifkannya." #: editor/editor_node.cpp msgid "Spins when the editor window redraws." @@ -2582,13 +2567,16 @@ msgid "" "The current scene has no root node, but %d modified external resource(s) " "were saved anyway." msgstr "" +"Scene saat ini tidak memiliki node root, tetapi %d sumber daya eksternal " +"yang diubah tetap disimpan." #: editor/editor_node.cpp -#, fuzzy msgid "" "A root node is required to save the scene. You can add a root node using the " "Scene tree dock." -msgstr "Node akar diperlukan untuk menyimpan skena." +msgstr "" +"Node root diperlukan untuk menyimpan scene. Anda dapat menambahkan node root " +"menggunakan dok pohon Scene." #: editor/editor_node.cpp msgid "Save Scene As..." @@ -2619,6 +2607,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "Skena saat ini belum disimpan. Buka saja?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "Batal" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "Ulangi" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "Tidak bisa memuat ulang skena yang belum pernah disimpan." @@ -2970,9 +2984,8 @@ msgid "Orphan Resource Explorer..." msgstr "Penjelajah Resource Orphan..." #: editor/editor_node.cpp -#, fuzzy msgid "Reload Current Project" -msgstr "Ubah Nama Proyek" +msgstr "Muat Ulang Project Saat Ini" #: editor/editor_node.cpp msgid "Quit to Project List" @@ -3131,13 +3144,12 @@ msgid "Help" msgstr "Bantuan" #: editor/editor_node.cpp -#, fuzzy msgid "Online Documentation" -msgstr "Buka Dokumentasi" +msgstr "Dokumentasi Online" #: editor/editor_node.cpp msgid "Questions & Answers" -msgstr "" +msgstr "Pertanyaan & Jawaban" #: editor/editor_node.cpp msgid "Report a Bug" @@ -3145,7 +3157,7 @@ msgstr "Laporkan Kutu" #: editor/editor_node.cpp msgid "Suggest a Feature" -msgstr "" +msgstr "Sarankan Fitur" #: editor/editor_node.cpp msgid "Send Docs Feedback" @@ -3156,9 +3168,8 @@ msgid "Community" msgstr "Komunitas" #: editor/editor_node.cpp -#, fuzzy msgid "About Godot" -msgstr "Tentang" +msgstr "Tentang Godot" #: editor/editor_node.cpp msgid "Support Godot Development" @@ -3250,14 +3261,12 @@ msgid "Manage Templates" msgstr "Kelola Templat" #: editor/editor_node.cpp -#, fuzzy msgid "Install from file" -msgstr "Memasang dari berkas" +msgstr "Install dari file" #: editor/editor_node.cpp -#, fuzzy msgid "Select android sources file" -msgstr "Pilih Mesh Sumber:" +msgstr "Pilih file sumber android" #: editor/editor_node.cpp msgid "" @@ -3306,6 +3315,11 @@ msgid "Merge With Existing" msgstr "Gabung dengan yang Ada" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Ubah Transformasi Animasi" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "Buka & Jalankan Skrip" @@ -3340,9 +3354,8 @@ msgid "Select" msgstr "Pilih" #: editor/editor_node.cpp -#, fuzzy msgid "Select Current" -msgstr "Pilih Folder Saat Ini" +msgstr "Pilih Saat Ini" #: editor/editor_node.cpp msgid "Open 2D Editor" @@ -3377,9 +3390,8 @@ msgid "No sub-resources found." msgstr "Tidak ada sub-resourc yang ditemukan." #: editor/editor_path.cpp -#, fuzzy msgid "Open a list of sub-resources." -msgstr "Tidak ada sub-resourc yang ditemukan." +msgstr "Buka daftar sub-sumber daya." #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" @@ -3406,14 +3418,12 @@ msgid "Update" msgstr "Perbarui" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Version" -msgstr "Versi:" +msgstr "Versi" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Author" -msgstr "Pengarang" +msgstr "Pencipta" #: editor/editor_plugin_settings.cpp #: editor/plugins/version_control_editor_plugin.cpp @@ -3426,14 +3436,12 @@ msgid "Measure:" msgstr "Ukuran:" #: editor/editor_profiler.cpp -#, fuzzy msgid "Frame Time (ms)" -msgstr "Waktu Frame (sec)" +msgstr "Waktu Frame (ms)" #: editor/editor_profiler.cpp -#, fuzzy msgid "Average Time (ms)" -msgstr "Waktu Rata-rata (sec)" +msgstr "Waktu Rata-rata (ms)" #: editor/editor_profiler.cpp msgid "Frame %" @@ -3563,6 +3571,10 @@ msgstr "" "Resource yang terpilih (%s) tidak sesuai dengan tipe apapun yang diharapkan " "untuk properti ini (%s)." +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "Jadikan Unik" @@ -3582,9 +3594,8 @@ msgid "Paste" msgstr "Tempel" #: editor/editor_resource_picker.cpp editor/property_editor.cpp -#, fuzzy msgid "Convert to %s" -msgstr "Konversikan ke %s" +msgstr "Konversi ke %s" #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "New %s" @@ -3632,11 +3643,10 @@ msgid "Did you forget the '_run' method?" msgstr "Apakah anda lupa dengan fungsi '_run' ?" #: editor/editor_spin_slider.cpp -#, fuzzy msgid "Hold %s to round to integers. Hold Shift for more precise changes." msgstr "" -"Tahan Ctrl untuk membulatkan bilangan. Tahan Shift untuk meletakkan bilangan " -"yang lebih presisi." +"Tahan %s untuk membulatkan ke integer. Tahan Shift untuk perubahan yang " +"lebih presisi." #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" @@ -3656,49 +3666,43 @@ msgstr "Impor dari Node:" #: editor/export_template_manager.cpp msgid "Open the folder containing these templates." -msgstr "" +msgstr "Buka folder yang berisi template ini." #: editor/export_template_manager.cpp msgid "Uninstall these templates." -msgstr "" +msgstr "Uninstall template ini." #: editor/export_template_manager.cpp -#, fuzzy msgid "There are no mirrors available." -msgstr "Tidak ada berkas '%s'." +msgstr "Tidak ada mirror yang tersedia." #: editor/export_template_manager.cpp -#, fuzzy msgid "Retrieving the mirror list..." -msgstr "Mendapatkan informasi cermin, silakan tunggu..." +msgstr "Mengambil daftar mirror..." #: editor/export_template_manager.cpp msgid "Starting the download..." -msgstr "" +msgstr "Memulai download..." #: editor/export_template_manager.cpp msgid "Error requesting URL:" msgstr "Galat saat meminta URL:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Connecting to the mirror..." -msgstr "Menyambungkan..." +msgstr "Menghubungkan ke mirror..." #: editor/export_template_manager.cpp -#, fuzzy msgid "Can't resolve the requested address." -msgstr "Tidak dapat menjelaskan hostname:" +msgstr "Tidak dapat menyelesaikan alamat yang diminta." #: editor/export_template_manager.cpp -#, fuzzy msgid "Can't connect to the mirror." -msgstr "Tidak dapat terhubung ke host:" +msgstr "Tidak dapat terhubung ke mirror." #: editor/export_template_manager.cpp -#, fuzzy msgid "No response from the mirror." -msgstr "Tidak ada respon dari host:" +msgstr "Tidak ada respon dari mirror." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -3706,18 +3710,16 @@ msgid "Request failed." msgstr "Permintaan gagal." #: editor/export_template_manager.cpp -#, fuzzy msgid "Request ended up in a redirect loop." -msgstr "Permintaan gagal, terlalu banyak pengalihan" +msgstr "Permintaan berakhir di loop pengalihan." #: editor/export_template_manager.cpp -#, fuzzy msgid "Request failed:" -msgstr "Permintaan gagal." +msgstr "Permintaan gagal:" #: editor/export_template_manager.cpp msgid "Download complete; extracting templates..." -msgstr "" +msgstr "Download selesai; mengekstrak template..." #: editor/export_template_manager.cpp msgid "Cannot remove temporary file:" @@ -3736,13 +3738,14 @@ msgid "Error getting the list of mirrors." msgstr "Galat dalam mendapatkan daftar mirror." #: editor/export_template_manager.cpp -#, fuzzy msgid "Error parsing JSON with the list of mirrors. Please report this issue!" -msgstr "Galat mengurai JSON dari daftar mirror. Silakan laporkan masalah ini!" +msgstr "" +"Kesalahan saat mengurai JSON dengan daftar mirror. Silakan laporkan masalah " +"ini!" #: editor/export_template_manager.cpp msgid "Best available mirror" -msgstr "" +msgstr "Mirror terbaik yang tersedia" #: editor/export_template_manager.cpp msgid "" @@ -3795,24 +3798,20 @@ msgid "SSL Handshake Error" msgstr "Kesalahan jabat tangan SSL" #: editor/export_template_manager.cpp -#, fuzzy msgid "Can't open the export templates file." -msgstr "Tidak dapat membuka ekspor template-template zip." +msgstr "Tidak dapat membuka file template ekspor." #: editor/export_template_manager.cpp -#, fuzzy msgid "Invalid version.txt format inside the export templates file: %s." -msgstr "Format version.txt tidak valid dalam berkas templat: %s." +msgstr "Format version.txt tidak valid di dalam file template ekspor: %s." #: editor/export_template_manager.cpp -#, fuzzy msgid "No version.txt found inside the export templates file." -msgstr "Berkas version.txt tidak ditemukan dalam templat." +msgstr "Tidak ada version.txt yang ditemukan di dalam file template ekspor." #: editor/export_template_manager.cpp -#, fuzzy msgid "Error creating path for extracting templates:" -msgstr "Kesalahan saat membuat lokasi untuk templat:" +msgstr "Kesalahan saat membuat jalur untuk mengekstrak template:" #: editor/export_template_manager.cpp msgid "Extracting Export Templates" @@ -3823,9 +3822,8 @@ msgid "Importing:" msgstr "Mengimpor:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Remove templates for the version '%s'?" -msgstr "Hapus templat versi '%s'?" +msgstr "Hapus template untuk versi '%s'?" #: editor/export_template_manager.cpp msgid "Uncompressing Android Build Sources" @@ -3841,68 +3839,61 @@ msgstr "Versi sekarang:" #: editor/export_template_manager.cpp msgid "Export templates are missing. Download them or install from a file." -msgstr "" +msgstr "Template ekspor tidak ada. Download atau instal dari file." #: editor/export_template_manager.cpp msgid "Export templates are installed and ready to be used." -msgstr "" +msgstr "Template ekspor sudah terinstal dan siap digunakan." #: editor/export_template_manager.cpp -#, fuzzy msgid "Open Folder" -msgstr "Buka Berkas" +msgstr "Buka Folder" #: editor/export_template_manager.cpp msgid "Open the folder containing installed templates for the current version." -msgstr "" +msgstr "Buka folder yang berisi template yang diinstal untuk versi saat ini." #: editor/export_template_manager.cpp msgid "Uninstall" msgstr "Copot Pemasangan" #: editor/export_template_manager.cpp -#, fuzzy msgid "Uninstall templates for the current version." -msgstr "Nilai awal untuk penghitung" +msgstr "Uninstall template untuk versi saat ini." #: editor/export_template_manager.cpp -#, fuzzy msgid "Download from:" -msgstr "Unduhan Gagal" +msgstr "Download dari:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Open in Web Browser" -msgstr "Jalankan di Peramban" +msgstr "Buka di Browser Web" #: editor/export_template_manager.cpp -#, fuzzy msgid "Copy Mirror URL" -msgstr "Salin Galat" +msgstr "Salin URL Mirror" #: editor/export_template_manager.cpp msgid "Download and Install" -msgstr "" +msgstr "Download dan Instal" #: editor/export_template_manager.cpp msgid "" "Download and install templates for the current version from the best " "possible mirror." -msgstr "" +msgstr "Download dan instal template untuk versi saat ini dari mirror terbaik." #: editor/export_template_manager.cpp msgid "Official export templates aren't available for development builds." msgstr "Templat ekspor resmi tidak tersedia untuk build pengembangan." #: editor/export_template_manager.cpp -#, fuzzy msgid "Install from File" -msgstr "Memasang dari berkas" +msgstr "Install dari File" #: editor/export_template_manager.cpp -#, fuzzy msgid "Install templates from a local file." -msgstr "Impor Templat dari Berkas ZIP" +msgstr "Instal template dari file lokal." #: editor/export_template_manager.cpp editor/find_in_files.cpp #: editor/progress_dialog.cpp scene/gui/dialogs.cpp @@ -3910,19 +3901,16 @@ msgid "Cancel" msgstr "Batal" #: editor/export_template_manager.cpp -#, fuzzy msgid "Cancel the download of the templates." -msgstr "Tidak dapat membuka ekspor template-template zip." +msgstr "Batalkan download template." #: editor/export_template_manager.cpp -#, fuzzy msgid "Other Installed Versions:" -msgstr "Versi Terpasang:" +msgstr "Versi Terinstal Lainnya:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Uninstall Template" -msgstr "Copot Pemasangan" +msgstr "Uninstal Template" #: editor/export_template_manager.cpp msgid "Select Template File" @@ -3937,6 +3925,8 @@ msgid "" "The templates will continue to download.\n" "You may experience a short editor freeze when they finish." msgstr "" +"Templat akan dilanjutkan untuk diunduh.\n" +"Editor Anda mungkin mengalami pembekuan sementara saat unduhan selesai." #: editor/filesystem_dock.cpp msgid "Favorites" @@ -4036,7 +4026,7 @@ msgstr "Buka Skena" #: editor/filesystem_dock.cpp msgid "Instance" -msgstr "hal" +msgstr "Instance" #: editor/filesystem_dock.cpp msgid "Add to Favorites" @@ -4083,35 +4073,32 @@ msgid "Collapse All" msgstr "Lipat Semua" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Sort files" -msgstr "Cari berkas" +msgstr "Urutkan berkas" #: editor/filesystem_dock.cpp msgid "Sort by Name (Ascending)" -msgstr "" +msgstr "Urutkan berdasarkan Nama (Ascending)" #: editor/filesystem_dock.cpp msgid "Sort by Name (Descending)" -msgstr "" +msgstr "Urutkan berdasarkan Nama (Descending)" #: editor/filesystem_dock.cpp msgid "Sort by Type (Ascending)" -msgstr "" +msgstr "Urutkan berdasarkan Jenis (Ascending)" #: editor/filesystem_dock.cpp msgid "Sort by Type (Descending)" -msgstr "" +msgstr "Urutkan berdasarkan Jenis (Descending)" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Sort by Last Modified" -msgstr "Terakhir Diubah" +msgstr "Urut dari Terakhir Diubah" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Sort by First Modified" -msgstr "Terakhir Diubah" +msgstr "Urut dari Pertama Diubah" #: editor/filesystem_dock.cpp msgid "Duplicate..." @@ -4123,7 +4110,7 @@ msgstr "Ubah Nama..." #: editor/filesystem_dock.cpp msgid "Focus the search box" -msgstr "" +msgstr "Memfokuskan kotak pencarian" #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -4432,14 +4419,12 @@ msgid "Failed to load resource." msgstr "Gagal memuat resource." #: editor/inspector_dock.cpp -#, fuzzy msgid "Copy Properties" -msgstr "Properti" +msgstr "Salin Properti" #: editor/inspector_dock.cpp -#, fuzzy msgid "Paste Properties" -msgstr "Properti" +msgstr "Tempel Properti" #: editor/inspector_dock.cpp msgid "Make Sub-Resources Unique" @@ -4464,23 +4449,20 @@ msgid "Save As..." msgstr "Simpan Sebagai..." #: editor/inspector_dock.cpp -#, fuzzy msgid "Extra resource options." -msgstr "Tidak dalam lokasi resource." +msgstr "Opsi resource tambahan." #: editor/inspector_dock.cpp -#, fuzzy msgid "Edit Resource from Clipboard" -msgstr "Sunting Papan Klip Resource" +msgstr "Edit Resource dari Papan Klip" #: editor/inspector_dock.cpp msgid "Copy Resource" msgstr "Salin Resource" #: editor/inspector_dock.cpp -#, fuzzy msgid "Make Resource Built-In" -msgstr "Buat Menjadi Bawaan" +msgstr "Buat Resource Menjadi Bawaan" #: editor/inspector_dock.cpp msgid "Go to the previous edited object in history." @@ -4495,9 +4477,8 @@ msgid "History of recently edited objects." msgstr "Histori dari objek terdireksi baru-baru saja." #: editor/inspector_dock.cpp -#, fuzzy msgid "Open documentation for this object." -msgstr "Buka Dokumentasi" +msgstr "Buka Dokumentasi objek ini." #: editor/inspector_dock.cpp editor/scene_tree_dock.cpp msgid "Open Documentation" @@ -4508,9 +4489,8 @@ msgid "Filter properties" msgstr "Filter properti" #: editor/inspector_dock.cpp -#, fuzzy msgid "Manage object properties." -msgstr "Properti Objek." +msgstr "Atur properti objek." #: editor/inspector_dock.cpp msgid "Changes may be lost!" @@ -4754,9 +4734,8 @@ msgid "Blend:" msgstr "Campur:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Parameter Changed:" -msgstr "Parameter Berubah" +msgstr "Parameter Berubah:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -5483,11 +5462,11 @@ msgstr "Semua" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Search templates, projects, and demos" -msgstr "" +msgstr "Cari templat, proyek, dan demo" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Search assets (excluding templates, projects, and demos)" -msgstr "" +msgstr "Cari aset (kecuali templat, proyek, dan demo)" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." @@ -5531,7 +5510,7 @@ msgstr "Berkas Aset ZIP" #: editor/plugins/audio_stream_editor_plugin.cpp msgid "Audio Preview Play/Pause" -msgstr "" +msgstr "Putar/Jeda Pratinjau Audio" #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "" @@ -5568,11 +5547,10 @@ msgstr "" "persegi [0.0,1.0]." #: editor/plugins/baked_lightmap_editor_plugin.cpp -#, fuzzy msgid "" "Godot editor was built without ray tracing support, lightmaps can't be baked." msgstr "" -"Editor Godot di-build tanpa dukungan ray tracing, sehingga lightmaps tidak " +"Editor Godot di-build tanpa dukungan ray tracing, sehingga lightmap tidak " "dapat di-bake." #: editor/plugins/baked_lightmap_editor_plugin.cpp @@ -5689,6 +5667,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "Pindahkan CanvasItem \"%s\" ke (%d,%d)" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "Kunci yang Dipilih" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Kelompok" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -5790,13 +5780,12 @@ msgstr "Ubah Jangkar-jangkar" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "" "Project Camera Override\n" "Overrides the running project's camera with the editor viewport camera." msgstr "" -"Timpa Kamera Gim\n" -"Menimpa kamera gim dengan kamera viewport editor." +"Timpa Kamera Proyek\n" +"Menimpa kamera proyek yang dijalankan dengan kamera viewport editor." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5805,6 +5794,9 @@ msgid "" "No project instance running. Run the project from the editor to use this " "feature." msgstr "" +"Timpa Kamera Proyek\n" +"Tidak ada instance proyek yang berjalan. Jalankan proyek dari editor untuk " +"menggunakan fitur ini." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5872,31 +5864,27 @@ msgstr "Mode Seleksi" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Drag: Rotate selected node around pivot." -msgstr "Hapus node atau transisi terpilih." +msgstr "Seret: Putar node terpilih sekitar pivot." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Alt+Drag: Move selected node." -msgstr "Alt+Geser: Pindah" +msgstr "Alt+Seret: Pindahkan node terpilih." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "V: Set selected node's pivot position." -msgstr "Hapus node atau transisi terpilih." +msgstr "V: Atur posisi pivot node terpilih." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Alt+RMB: Show list of all nodes at position clicked, including locked." msgstr "" -"Tampilkan semua objek dalam posisi klik ke sebuah daftar\n" -"(sama seperti Alt+Klik kanan dalam mode seleksi)." +"Alt+Klik Kanan: Tampilkan semua daftar node di posisi yang diklik, termasuk " +"yang dikunci." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "RMB: Add node at position clicked." -msgstr "" +msgstr "Klik Kanan: Tambah node di posisi yang diklik." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -6134,14 +6122,12 @@ msgid "Clear Pose" msgstr "Hapus Pose" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Add Node Here" -msgstr "Tambahkan Node" +msgstr "Tambahkan Node Di sini" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Instance Scene Here" -msgstr "Instansi Skena" +msgstr "Instansi Skena Di sini" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Multiply grid step by 2" @@ -6157,49 +6143,43 @@ msgstr "Geser Tampilan" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 3.125%" -msgstr "" +msgstr "Perbesar 3.125%" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 6.25%" -msgstr "" +msgstr "Perbesar 6.25%" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 12.5%" -msgstr "" +msgstr "Perbesar 12.5%" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 25%" -msgstr "Perkecil Pandangan" +msgstr "Perbesar 25%" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 50%" -msgstr "Perkecil Pandangan" +msgstr "Perbesar 50%" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 100%" -msgstr "Perkecil Pandangan" +msgstr "Perbesar 100%" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 200%" -msgstr "Perkecil Pandangan" +msgstr "Perbesar 200%" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 400%" -msgstr "Perkecil Pandangan" +msgstr "Perbesar 400%" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 800%" -msgstr "Perkecil Pandangan" +msgstr "Perbesar 800%" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 1600%" -msgstr "" +msgstr "Perbesar 1600%" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" @@ -6444,9 +6424,8 @@ msgid "Couldn't create a single convex collision shape." msgstr "Tidak dapat membuat convex collision shape tunggal." #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Simplified Convex Shape" -msgstr "Buat Bentuk Cembung" +msgstr "Buat Bentuk Cembung yang Disederhanakan" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Single Convex Shape" @@ -6481,9 +6460,8 @@ msgid "No mesh to debug." msgstr "Tidak ada mesh untuk diawakutu." #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Mesh has no UV in layer %d." -msgstr "Model tidak memiliki UV dalam lapisan ini" +msgstr "Mesh tidak memiliki UV di layer %d." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "MeshInstance lacks a Mesh!" @@ -6641,7 +6619,13 @@ msgid "Remove Selected Item" msgstr "Hapus Item yang Dipilih" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +#, fuzzy +msgid "Import from Scene (Ignore Transforms)" +msgstr "Impor dari Skena" + +#: editor/plugins/mesh_library_editor_plugin.cpp +#, fuzzy +msgid "Import from Scene (Apply Transforms)" msgstr "Impor dari Skena" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -6925,7 +6909,7 @@ msgstr "Cermin Pengatur Panjang" #: editor/plugins/path_editor_plugin.cpp msgid "Curve Point #" -msgstr "Titik # Curve" +msgstr "Titik Kurva #" #: editor/plugins/path_editor_plugin.cpp msgid "Set Curve Point Position" @@ -7219,9 +7203,8 @@ msgid "ResourcePreloader" msgstr "ResourcePreloader" #: editor/plugins/room_manager_editor_plugin.cpp -#, fuzzy msgid "Flip Portals" -msgstr "Balik secara Horizontal" +msgstr "Balikkan Portal" #: editor/plugins/room_manager_editor_plugin.cpp #, fuzzy @@ -7234,9 +7217,18 @@ msgid "Generate Points" msgstr "Jumlah Titik yang Dihasilkan:" #: editor/plugins/room_manager_editor_plugin.cpp -#, fuzzy msgid "Flip Portal" -msgstr "Balik secara Horizontal" +msgstr "Balikkan Portal" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "Bersihkan Transformasi" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Buat Node" #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" @@ -7743,12 +7735,14 @@ msgid "Skeleton2D" msgstr "Skeleton2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "Buat Pose Istirahat (Dari Pertulangan)" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "Atur Tulang ke Pose Istirahat" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "Atur Tulang ke Pose Istirahat" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "Timpa" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7775,6 +7769,71 @@ msgid "Perspective" msgstr "Perspektif" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Perspective" +msgstr "Perspektif" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "Perspektif" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Left Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Perspective" +msgstr "Perspektif" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Perspective" +msgstr "Perspektif" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Perspective" +msgstr "Perspektif" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "Transformasi Dibatalkan." @@ -7801,20 +7860,17 @@ msgid "None" msgstr "Tidak ada" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Rotate" -msgstr "Mode Putar" +msgstr "Putar" #. TRANSLATORS: This refers to the movement that changes the position of an object. #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Translate" -msgstr "Translasi:" +msgstr "Translasi" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Scale" -msgstr "Skala:" +msgstr "Skala" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scaling: " @@ -7846,9 +7902,8 @@ msgid "Yaw:" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Size:" -msgstr "Ukuran: " +msgstr "Ukuran:" #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy @@ -7893,42 +7948,22 @@ msgid "Bottom View." msgstr "Tampilan Bawah." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "Bawah" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "Tampilan Kiri." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "Kiri" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "Tampilan Kanan." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "Kanan" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "Tampilan Depan." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "Depan" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "Tampilan Belakang." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "Belakang" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "Sejajarkan Transformasi dengan Tampilan" @@ -8046,12 +8081,11 @@ msgid "View Rotation Locked" msgstr "Rotasi Tampilan Terkunci" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "" "To zoom further, change the camera's clipping planes (View -> Settings...)" msgstr "" -"Untuk memperbesar lebih jauh, ganti kamera clipping planes (Tinjau -> " -"Setelan...)" +"Untuk memperbesar lebih lanjut, ubah bidang kliping kamera (View -> " +"Setting...)" #: editor/plugins/spatial_editor_plugin.cpp msgid "" @@ -8206,6 +8240,11 @@ msgid "View Portal Culling" msgstr "Pengaturan Viewport" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "Pengaturan Viewport" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "Pengaturan…" @@ -8271,8 +8310,9 @@ msgid "Post" msgstr "Sesudah" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" -msgstr "Gizmo tak bernama" +#, fuzzy +msgid "Unnamed Gizmo" +msgstr "Proyek Tanpa Nama" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Mesh2D" @@ -11391,7 +11431,7 @@ msgstr "Aksi" #: editor/project_settings_editor.cpp msgid "Deadzone" -msgstr "Zona tidak aktif" +msgstr "Zona mati" #: editor/project_settings_editor.cpp msgid "Device:" @@ -12470,6 +12510,16 @@ msgstr "Atur Posisi Titik Kurva" msgid "Set Portal Point Position" msgstr "Atur Posisi Titik Kurva" +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Radius" +msgstr "Ubah Radius Bentuk Silinder" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr "Atur Posisi Kurva Dalam" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "Ubah Radius Silinder" @@ -12754,6 +12804,11 @@ msgstr "Memetakan lightmap" msgid "Class name can't be a reserved keyword" msgstr "Nama kelas tidak boleh reserved keyword" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "Isi Pilihan" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "Akhir dari inner exception stack trace" @@ -13241,73 +13296,73 @@ msgstr "Cari VisualScript" msgid "Get %s" msgstr "Dapatkan %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "Nama paket tidak ada." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "Segmen paket panjangnya harus tidak boleh nol." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "Karakter '%s' tidak diizinkan dalam penamaan paket aplikasi Android." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "Digit tidak boleh diletakkan sebagai karakter awal di segmen paket." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "Karakter '%s' tidak bisa dijadikan karakter awal dalam segmen paket." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "Package setidaknya harus memiliki sebuah pemisah '.'." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "Pilih perangkat pada daftar" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting APK..." msgstr "Mengekspor Semua" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Uninstalling..." msgstr "Copot Pemasangan" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Installing to device, please wait..." msgstr "Memuat, tunggu sejenak..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not install to device: %s" msgstr "Tidak dapat memulai subproses!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Running on device..." msgstr "Menjalankan Script Khusus..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not execute on device." msgstr "Tidak dapat membuat folder." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "Tak dapat menemukan perkakas 'apksigner'." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -13315,66 +13370,66 @@ msgstr "" "Templat build Android belum terpasang dalam proyek. Pasanglah dari menu " "Proyek." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" "Berkas debug keystore belum dikonfigurasi dalam Pengaturan Editor maupun di " "prasetel proyek." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "Berkas keystore rilis belum dikonfigurasi di prasetel ekspor." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "Lokasi Android SDK yang valid dibutuhkan di Pengaturan Editor." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "Lokasi Android SDK tidak valid di Pengaturan Editor." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "Direktori 'platform-tools' tidak ada!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "Tidak dapat menemukan perintah adb di Android SDK platform-tools." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" "Silakan cek direktori Android SDK yang diisikan dalam Pengaturan Editor." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "Direktori 'build-tools' tidak ditemukan!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "Tidak dapat menemukan apksigner dalam Android SDK build-tools." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "Kunci Publik untuk ekspansi APK tidak valid." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "Nama paket tidak valid:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" @@ -13382,38 +13437,23 @@ msgstr "" "Modul \"GodotPaymentV3\" tidak valid yang dimasukkan dalam pengaturan proyek " "\"android/modules\" (diubah di Godot 3.2.2)\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "\"Gunakan Build Custom\" harus diaktifkan untuk menggunakan plugin." -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" -"\"Derajat Kebebasan\" hanya valid ketika \"Mode Xr\" bernilai \"Occulus " -"Mobile VR\"." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" "\"Pelacakan Tangan\" hanya valid ketika \"Mode Xr\" bernilai \"Oculus Mobile " "VR\"." -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" -"\"Focus Awareness\" hanya valid ketika \"Mode Xr\" bernilai \"Oculus Mobile " -"VR\"." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" "\"Expor AAB\" hanya bisa valid ketika \"Gunakan Build Custom\" diaktifkan." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13421,57 +13461,57 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Signing release %s..." msgstr "" "Memindai Berkas,\n" "Silakan Tunggu..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not find keystore, unable to export." msgstr "Tidak dapat membuka templat untuk ekspor:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Verifying %s..." msgstr "Menambahkan %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting for Android" msgstr "Mengekspor Semua" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "Nama berkas tak valid! Android App Bundle memerlukan ekstensi *.aab ." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "Ekspansi APK tidak kompatibel dengan Android App Bundle." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "Nama berkas tidak valid! APK Android memerlukan ekstensi *.apk ." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." @@ -13479,7 +13519,7 @@ msgstr "" "Mencoba untuk membangun dari templat build khusus, tapi tidak ada informasi " "versinya. Silakan pasang ulang dari menu 'Proyek'." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13491,26 +13531,25 @@ msgstr "" " Versi Godot: %s\n" "Silakan pasang ulang templat build Android dari menu 'Project'." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" -msgstr "Tidak dapat menyunting project.godot dalam lokasi proyek." +msgstr "Tidak dapat menyunting proyek gradle dalam lokasi proyek\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not write expansion package file!" msgstr "Tidak dapat menulis berkas:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "Membangun Proyek Android (gradle)" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." @@ -13518,11 +13557,11 @@ msgstr "" "Pembangunan proyek Android gagal, periksa output untuk galatnya.\n" "Atau kunjungi docs.godotengine.org untuk dokumentasi build Android." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "Memindahkan keluaran" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." @@ -13530,24 +13569,24 @@ msgstr "" "Tidak dapat menyalin dan mengubah nama berkas ekspor, cek direktori proyek " "gradle untuk hasilnya." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "Animasi tidak ditemukan: '%s'" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Creating APK..." msgstr "Membuat kontur..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" "Could not find template APK to export:\n" "%s" msgstr "Tidak dapat membuka templat untuk ekspor:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13555,21 +13594,21 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Adding files..." msgstr "Menambahkan %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files" msgstr "Tidak dapat menulis berkas:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -14115,6 +14154,14 @@ msgstr "" "NavigationMeshInstance harus menjadi child atau grandchild untuk sebuah node " "Navigation. Ini hanya menyediakan data navigasi." +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14445,6 +14492,14 @@ msgstr "Harus menggunakan ekstensi yang sah." msgid "Enable grid minimap." msgstr "Aktifkan peta mini grid." +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14501,6 +14556,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "Ukuran viewport harus lebih besar dari 0 untuk me-render apa pun." +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " @@ -14554,6 +14613,41 @@ msgstr "Pemberian nilai untuk uniform." msgid "Constants cannot be modified." msgstr "Konstanta tidak dapat dimodifikasi." +#~ msgid "Make Rest Pose (From Bones)" +#~ msgstr "Buat Pose Istirahat (Dari Pertulangan)" + +#~ msgid "Bottom" +#~ msgstr "Bawah" + +#~ msgid "Left" +#~ msgstr "Kiri" + +#~ msgid "Right" +#~ msgstr "Kanan" + +#~ msgid "Front" +#~ msgstr "Depan" + +#~ msgid "Rear" +#~ msgstr "Belakang" + +#~ msgid "Nameless gizmo" +#~ msgstr "Gizmo tak bernama" + +#~ msgid "" +#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile " +#~ "VR\"." +#~ msgstr "" +#~ "\"Derajat Kebebasan\" hanya valid ketika \"Mode Xr\" bernilai \"Occulus " +#~ "Mobile VR\"." + +#~ msgid "" +#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" +#~ "\"." +#~ msgstr "" +#~ "\"Focus Awareness\" hanya valid ketika \"Mode Xr\" bernilai \"Oculus " +#~ "Mobile VR\"." + #~ msgid "Package Contents:" #~ msgstr "Isi Paket:" diff --git a/editor/translations/is.po b/editor/translations/is.po index e536b0a8f6..33fee00267 100644 --- a/editor/translations/is.po +++ b/editor/translations/is.po @@ -1029,7 +1029,7 @@ msgstr "" msgid "Dependencies" msgstr "" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "" @@ -1660,13 +1660,13 @@ msgid "" "Enabled'." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2041,7 +2041,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "" @@ -2520,6 +2520,30 @@ msgid "Current scene not saved. Open anyway?" msgstr "" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Undo: %s" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Redo: %s" +msgstr "" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "" @@ -3148,6 +3172,11 @@ msgid "Merge With Existing" msgstr "" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Breyta umbreytingu" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "" @@ -3390,6 +3419,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "" @@ -5454,6 +5487,17 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Locked" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Fjarlægja val" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6364,7 +6408,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -6953,6 +7001,16 @@ msgstr "" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "Breyta umbreytingu" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Anim DELETE-lyklar" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7448,11 +7506,11 @@ msgid "Skeleton2D" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" +msgid "Reset to Rest Pose" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" +msgid "Overwrite Rest Pose" msgstr "" #: editor/plugins/skeleton_editor_plugin.cpp @@ -7480,6 +7538,60 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7588,42 +7700,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -7885,6 +7977,11 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "Breyta Viðbót" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "" @@ -7950,7 +8047,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -11926,6 +12023,14 @@ msgstr "" msgid "Set Portal Point Position" msgstr "" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Position" +msgstr "" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12212,6 +12317,11 @@ msgstr "" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "Allt úrvalið" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -12691,160 +12801,149 @@ msgstr "" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting APK..." msgstr "Breyta..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Uninstalling..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Installing to device, please wait..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not execute on device." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -12852,57 +12951,57 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -12910,54 +13009,54 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package not found: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -12965,19 +13064,19 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Adding files..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13427,6 +13526,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -13716,6 +13823,14 @@ msgstr "" msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13756,6 +13871,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/it.po b/editor/translations/it.po index c3aa84d4b6..0b25d41fa0 100644 --- a/editor/translations/it.po +++ b/editor/translations/it.po @@ -64,8 +64,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2021-08-10 21:39+0000\n" -"Last-Translator: Mirko <miknsop@gmail.com>\n" +"PO-Revision-Date: 2021-08-22 22:46+0000\n" +"Last-Translator: Riteo Siuga <riteo@posteo.net>\n" "Language-Team: Italian <https://hosted.weblate.org/projects/godot-engine/" "godot/it/>\n" "Language: it\n" @@ -73,7 +73,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.8-dev\n" +"X-Generator: Weblate 4.8.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -96,7 +96,7 @@ msgstr "Input %i non valido (assente) nell'espressione" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" -msgstr "self non può essere utilizzato perché l'istanza è nulla (non passata)" +msgstr "self non può essere usato perché l'istanza è nulla (non passata)" #: core/math/expression.cpp msgid "Invalid operands to operator %s, %s and %s." @@ -421,15 +421,13 @@ msgstr "Inserisci un'animazione" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "node '%s'" -msgstr "Impossibile aprire '%s'." +msgstr "nodo \"%s\"" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "animation" -msgstr "Animazione" +msgstr "animazione" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." @@ -437,9 +435,8 @@ msgstr "AnimationPlayer non può animare se stesso, solo altri nodi." #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "property '%s'" -msgstr "Non esiste nessuna proprietà \"%s\"." +msgstr "proprietà \"%s\"" #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -657,7 +654,7 @@ msgstr "Vai al passo precedente" #: editor/animation_track_editor.cpp #, fuzzy msgid "Apply Reset" -msgstr "Reset" +msgstr "Applica reset" #: editor/animation_track_editor.cpp msgid "Optimize Animation" @@ -678,7 +675,7 @@ msgstr "Usa le curve di Bézier" #: editor/animation_track_editor.cpp #, fuzzy msgid "Create RESET Track(s)" -msgstr "Incolla delle tracce" +msgstr "Crea delle tracce di reimpostazione" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" @@ -908,7 +905,6 @@ msgid "Deferred" msgstr "Differita" #: editor/connections_dialog.cpp -#, fuzzy msgid "" "Defers the signal, storing it in a queue and only firing it at idle time." msgstr "" @@ -1004,7 +1000,6 @@ msgid "Edit..." msgstr "Modifica..." #: editor/connections_dialog.cpp -#, fuzzy msgid "Go to Method" msgstr "Vai al metodo" @@ -1026,7 +1021,7 @@ msgstr "Nessun risultato per \"%s\"." #: editor/create_dialog.cpp editor/property_selector.cpp msgid "No description available for %s." -msgstr "" +msgstr "Nessuna descrizione disponibile per %s." #: editor/create_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp @@ -1086,7 +1081,7 @@ msgstr "" msgid "Dependencies" msgstr "Dipendenze" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Risorsa" @@ -1126,17 +1121,16 @@ msgid "Owners Of:" msgstr "Proprietari di:" #: editor/dependency_editor.cpp -#, fuzzy msgid "" "Remove the selected files from the project? (Cannot be undone.)\n" "Depending on your filesystem configuration, the files will either be moved " "to the system trash or deleted permanently." msgstr "" "Rimuovere i file selezionati dal progetto? (non annullabile)\n" -"Sarà possibile ripristinarli accedendo al cestino di sistema." +"A seconda della propria configurazione di sistema, essi saranno spostati nel " +"cestino di sistema oppure eliminati permanentemente." #: editor/dependency_editor.cpp -#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -1147,7 +1141,8 @@ msgstr "" "I file che stanno per essere rimossi sono richiesti per il funzionamento di " "altre risorse.\n" "Rimuoverli comunque? (non annullabile)\n" -"Sarà possibile ripristinarli accedendo al cestino di sistema." +"A seconda della propria configurazione di sistema, essi saranno spostati nel " +"cestino di sistema oppure eliminati permanentemente." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1317,41 +1312,38 @@ msgid "Licenses" msgstr "Licenze" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Error opening asset file for \"%s\" (not in ZIP format)." -msgstr "Errore nell'apertura del file package (non è in formato ZIP)." +msgstr "" +"Errore nell'apertura del file del contenuto per \"%s\" (non è in formato " +"ZIP)." #: editor/editor_asset_installer.cpp -#, fuzzy msgid "%s (already exists)" msgstr "%s (già esistente)" #: editor/editor_asset_installer.cpp msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:" -msgstr "" +msgstr "File del contenuto \"%s\" - %d file sono in conflitto col progetto:" #: editor/editor_asset_installer.cpp msgid "Contents of asset \"%s\" - No files conflict with your project:" -msgstr "" +msgstr "File del contenuto \"%s\" - Nessun file è in conflitto col progetto:" #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" -msgstr "Estrazione asset" +msgstr "Estraendo i contenuti" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "The following files failed extraction from asset \"%s\":" -msgstr "Impossibile estrarre i seguenti file dal pacchetto:" +msgstr "L'estrazione dei seguenti file dal contenuto \"%s\" è fallita:" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "(and %s more files)" -msgstr "E %s altri file." +msgstr "(e %s altri file)" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Asset \"%s\" installed successfully!" -msgstr "Pacchetto installato con successo!" +msgstr "Contenuto \"%s\" installato con successo!" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -1363,9 +1355,8 @@ msgid "Install" msgstr "Installa" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Asset Installer" -msgstr "Installatore di pacchetti" +msgstr "Installatore di contenuti" #: editor/editor_audio_buses.cpp msgid "Speakers" @@ -1610,7 +1601,7 @@ msgstr "File inesistente." #: editor/editor_autoload_settings.cpp msgid "%s is an invalid path. Not in resource path (res://)." -msgstr "" +msgstr "%s non è una strada valida. Essa non punta nelle risorse (res://)." #: editor/editor_autoload_settings.cpp msgid "Add AutoLoad" @@ -1761,13 +1752,13 @@ msgstr "" "Attiva \"Import Pvrtc\" nelle impostazioni del progetto, oppure disattiva " "\"Driver Fallback Enabled\"." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "Modello di sviluppo personalizzato non trovato." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -1792,9 +1783,8 @@ msgid "Script Editor" msgstr "Editor degli script" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Asset Library" -msgstr "Libreria degli asset" +msgstr "Libreria dei contenuti" #: editor/editor_feature_profile.cpp msgid "Scene Tree Editing" @@ -1814,35 +1804,40 @@ msgstr "Pannello d'importazione" #: editor/editor_feature_profile.cpp msgid "Allows to view and edit 3D scenes." -msgstr "" +msgstr "Permette di visuallizzare e modificare le scene 3D." #: editor/editor_feature_profile.cpp msgid "Allows to edit scripts using the integrated script editor." -msgstr "" +msgstr "Permette di modificare gli script usando l'editor di script integrato." #: editor/editor_feature_profile.cpp msgid "Provides built-in access to the Asset Library." -msgstr "" +msgstr "Offre un accesso alla libreria dei contenuti integrato." #: editor/editor_feature_profile.cpp msgid "Allows editing the node hierarchy in the Scene dock." -msgstr "" +msgstr "Permette di modificare la gerarchia dei nodi nel pannello della scena." #: editor/editor_feature_profile.cpp msgid "" "Allows to work with signals and groups of the node selected in the Scene " "dock." msgstr "" +"Permette di lavorare coi segnali e i gruppi del nodo selezionato nel " +"pannello della scena." #: editor/editor_feature_profile.cpp msgid "Allows to browse the local file system via a dedicated dock." msgstr "" +"Permette di esplorare il file system locale tramite un pannello dedicato." #: editor/editor_feature_profile.cpp msgid "" "Allows to configure import settings for individual assets. Requires the " "FileSystem dock to function." msgstr "" +"Permette di configurare le impostazioni d'importazione di contenuti " +"individuali. Richiede il pannello del file system per funzionare." #: editor/editor_feature_profile.cpp #, fuzzy @@ -1851,11 +1846,13 @@ msgstr "(Corrente)" #: editor/editor_feature_profile.cpp msgid "(none)" -msgstr "" +msgstr "(nulla)" #: editor/editor_feature_profile.cpp msgid "Remove currently selected profile, '%s'? Cannot be undone." msgstr "" +"Rimuovere il profilo '%s' attualmente selezionato? Ciò non potrà essere " +"annullato." #: editor/editor_feature_profile.cpp #, fuzzy @@ -1967,6 +1964,8 @@ msgstr "Opzioni Texture" #: editor/editor_feature_profile.cpp msgid "Create or import a profile to edit available classes and properties." msgstr "" +"Creare o importare un profilo per modificare le classi e le proprietà " +"disponibili." #: editor/editor_feature_profile.cpp msgid "New profile name:" @@ -2153,11 +2152,10 @@ msgstr "" "importazione annullata" #: editor/editor_file_system.cpp -#, fuzzy msgid "(Re)Importing Assets" -msgstr "Reimportazione degli asset" +msgstr "Reimportando i contenuti" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "In cima" @@ -2396,6 +2394,9 @@ msgid "" "Update Continuously is enabled, which can increase power usage. Click to " "disable it." msgstr "" +"Gira quando la finestra dell'editor si aggiorna.\n" +"Aggiorna continuamente è attivo, il che può aumentare il consumo di " +"corrente. Cliccare per disabilitarlo." #: editor/editor_node.cpp msgid "Spins when the editor window redraws." @@ -2636,6 +2637,8 @@ msgid "" "The current scene has no root node, but %d modified external resource(s) " "were saved anyway." msgstr "" +"La scena attuale non ha un nodo radice, ma %d risorse esterne modificate " +"sono state salvate comunque." #: editor/editor_node.cpp #, fuzzy @@ -2673,6 +2676,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "Scena attuale non salvata. Aprire comunque?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "Annulla" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "Rifai" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "Impossibile ricaricare una scena che non è mai stata salvata." @@ -3081,7 +3110,7 @@ msgstr "" "esporterà un eseguibile senza i dati del progetto.\n" "Il filesystem verrà provvisto dall'editor attraverso la rete.\n" "Su Android, esso userà il cavo USB per ottenere delle prestazioni migliori. " -"Questa impostazione rende più veloci i progetti con risorse pesanti." +"Questa impostazione rende più veloci i progetti con contenuti pesanti." #: editor/editor_node.cpp msgid "Visible Collision Shapes" @@ -3202,7 +3231,7 @@ msgstr "Apri la documentazione" #: editor/editor_node.cpp msgid "Questions & Answers" -msgstr "" +msgstr "Domande e risposte" #: editor/editor_node.cpp msgid "Report a Bug" @@ -3380,6 +3409,11 @@ msgid "Merge With Existing" msgstr "Unisci con una esistente" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Cambia la trasformazione di un'animazione" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "Apri ed esegui uno script" @@ -3431,9 +3465,8 @@ msgid "Open Script Editor" msgstr "Apri l'editor degli script" #: editor/editor_node.cpp editor/project_manager.cpp -#, fuzzy msgid "Open Asset Library" -msgstr "Apri la libreria degli Asset" +msgstr "Apri la libreria dei contenuti" #: editor/editor_node.cpp msgid "Open the next Editor" @@ -3526,7 +3559,7 @@ msgstr "Inclusivo" #: editor/editor_profiler.cpp msgid "Self" -msgstr "Se stesso" +msgstr "Proprio" #: editor/editor_profiler.cpp msgid "" @@ -3537,6 +3570,12 @@ msgid "" "functions called by that function.\n" "Use this to find individual functions to optimize." msgstr "" +"Inclusivo: include il tempo speso dalle altre funzioni chiamate da questa.\n" +"Utilizzare questa opzione per trovare dei colli di bottiglia.\n" +"\n" +"Proprio: conta solo il tempo speso dalla funzione stessa, non in altre " +"chiamate da essa.\n" +"Utilizzare questa opzione per trovare delle funzioni singole da ottimizzare." #: editor/editor_profiler.cpp msgid "Frame #:" @@ -3641,6 +3680,10 @@ msgstr "" "La risorsa selezionata (%s) non corrisponde ad alcun tipo previsto per " "questa proprietà (%s)." +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp #, fuzzy msgid "Make Unique" @@ -3738,11 +3781,11 @@ msgstr "Importa Da Nodo:" #: editor/export_template_manager.cpp msgid "Open the folder containing these templates." -msgstr "" +msgstr "Apre la cartella che contiene questi modelli." #: editor/export_template_manager.cpp msgid "Uninstall these templates." -msgstr "" +msgstr "Disinstalla questi modelli." #: editor/export_template_manager.cpp #, fuzzy @@ -3756,7 +3799,7 @@ msgstr "Recupero dei mirror, attendi..." #: editor/export_template_manager.cpp msgid "Starting the download..." -msgstr "" +msgstr "Avviando lo scaricamento..." #: editor/export_template_manager.cpp msgid "Error requesting URL:" @@ -3799,7 +3842,7 @@ msgstr "Richiesta fallita." #: editor/export_template_manager.cpp msgid "Download complete; extracting templates..." -msgstr "" +msgstr "Scaricamento completato; estraendo i modelli..." #: editor/export_template_manager.cpp msgid "Cannot remove temporary file:" @@ -3826,7 +3869,7 @@ msgstr "" #: editor/export_template_manager.cpp msgid "Best available mirror" -msgstr "" +msgstr "Miglior mirror disponibile" #: editor/export_template_manager.cpp msgid "" @@ -3925,11 +3968,11 @@ msgstr "Versione Corrente:" #: editor/export_template_manager.cpp msgid "Export templates are missing. Download them or install from a file." -msgstr "" +msgstr "Modelli d'eportazione mancanti. Scaricarli o installarli da un file." #: editor/export_template_manager.cpp msgid "Export templates are installed and ready to be used." -msgstr "" +msgstr "I modelli d'esportazione sono installati e pronti all'uso." #: editor/export_template_manager.cpp #, fuzzy @@ -3939,6 +3982,7 @@ msgstr "Apri file" #: editor/export_template_manager.cpp msgid "Open the folder containing installed templates for the current version." msgstr "" +"Apre la cartella contenente i modelli installati per la versione corrente." #: editor/export_template_manager.cpp msgid "Uninstall" @@ -3966,13 +4010,15 @@ msgstr "Copia Errore" #: editor/export_template_manager.cpp msgid "Download and Install" -msgstr "" +msgstr "Scarica e installa" #: editor/export_template_manager.cpp msgid "" "Download and install templates for the current version from the best " "possible mirror." msgstr "" +"Scarica e installa i modelli per la versione corrente dal miglior mirror " +"possibile." #: editor/export_template_manager.cpp msgid "Official export templates aren't available for development builds." @@ -4023,6 +4069,8 @@ msgid "" "The templates will continue to download.\n" "You may experience a short editor freeze when they finish." msgstr "" +"I modelli continueranno a scaricare.\n" +"L'editor potrebbe bloccarsi brevemente a scaricamento finito." #: editor/filesystem_dock.cpp msgid "Favorites" @@ -4176,19 +4224,19 @@ msgstr "Cerca file" #: editor/filesystem_dock.cpp msgid "Sort by Name (Ascending)" -msgstr "" +msgstr "Ordina per nome (crescente)" #: editor/filesystem_dock.cpp msgid "Sort by Name (Descending)" -msgstr "" +msgstr "Ordina per nome (decrescente)" #: editor/filesystem_dock.cpp msgid "Sort by Type (Ascending)" -msgstr "" +msgstr "Ordina per tipo (crescente)" #: editor/filesystem_dock.cpp msgid "Sort by Type (Descending)" -msgstr "" +msgstr "Ordina per tipo (decrescente)" #: editor/filesystem_dock.cpp #, fuzzy @@ -4210,7 +4258,7 @@ msgstr "Rinomina..." #: editor/filesystem_dock.cpp msgid "Focus the search box" -msgstr "" +msgstr "Seleziona la barra di ricerca" #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -4511,8 +4559,8 @@ msgstr "Cambiare il tipo di un file importato richiede il riavvio dell'editor." msgid "" "WARNING: Assets exist that use this resource, they may stop loading properly." msgstr "" -"ATTENZIONE: Esistono degli elementi che utilizzano questa risorsa, " -"potrebbero non essere più caricati correttamente." +"ATTENZIONE: Esistono dei contenuti che utilizzano questa risorsa, potrebbero " +"non essere più caricati correttamente." #: editor/inspector_dock.cpp msgid "Failed to load resource." @@ -5495,7 +5543,7 @@ msgstr "Check has SHA-256 fallito" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Asset Download Error:" -msgstr "Errore di Download Asset:" +msgstr "Errore di scaricamento del contenuto:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Downloading (%s / %s)..." @@ -5531,7 +5579,7 @@ msgstr "Errore durante il download" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Download for this asset is already in progress!" -msgstr "Il download per questo asset è già in corso!" +msgstr "Lo scaricamento di questo contenuto è già in corso!" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Recently Updated" @@ -5579,11 +5627,11 @@ msgstr "Tutti" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Search templates, projects, and demos" -msgstr "" +msgstr "Cerca tra modelli, progetti e demo" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Search assets (excluding templates, projects, and demos)" -msgstr "" +msgstr "Cerca tra i contenuti (escludendo modelli, progetti e demo)" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." @@ -5623,11 +5671,11 @@ msgstr "Caricamento…" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Assets ZIP File" -msgstr "ZIP File degli Asset" +msgstr "File ZIP dei contenuti" #: editor/plugins/audio_stream_editor_plugin.cpp msgid "Audio Preview Play/Pause" -msgstr "" +msgstr "Avvia/Pausa l'anteprima audio" #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "" @@ -5791,6 +5839,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "Sposta CanvasItem \"%s\" a (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "Blocca selezionato" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Gruppo" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -5907,6 +5967,9 @@ msgid "" "No project instance running. Run the project from the editor to use this " "feature." msgstr "" +"Sovrascrivi la camera del progetto\n" +"Nessuna istanza del progetto avviata. Eseguire il progetto dall'editor per " +"utilizzare questa funzionalità." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5998,7 +6061,7 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "RMB: Add node at position clicked." -msgstr "" +msgstr "Click destro: aggiungi un nodo sulla posizione cliccata." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -6276,15 +6339,15 @@ msgstr "Trasla Visuale" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 3.125%" -msgstr "" +msgstr "Ingrandisci al 3.125%" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 6.25%" -msgstr "" +msgstr "Ingrandisci al 6.25%" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 12.5%" -msgstr "" +msgstr "Ingrandisci al 12.5%" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -6318,7 +6381,7 @@ msgstr "Rimpicciolisci" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 1600%" -msgstr "" +msgstr "Ingrandisci al 1600%" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" @@ -6447,6 +6510,7 @@ msgid "Flat 0" msgstr "Flat 0" #: editor/plugins/curve_editor_plugin.cpp +#, fuzzy msgid "Flat 1" msgstr "Flat 1" @@ -6686,6 +6750,9 @@ msgid "" "This is similar to single collision shape, but can result in a simpler " "geometry in some cases, at the cost of accuracy." msgstr "" +"Crea una forma di collisione convessa semplificata.\n" +"Essa è simile a una forma di collisione singola ma in alcuni casi può " +"risultare in una geometria più semplice al costo di risultare inaccurata." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Multiple Convex Collision Siblings" @@ -6767,7 +6834,13 @@ msgid "Remove Selected Item" msgstr "Rimuovi Elementi Selezionati" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +#, fuzzy +msgid "Import from Scene (Ignore Transforms)" +msgstr "Importa da Scena" + +#: editor/plugins/mesh_library_editor_plugin.cpp +#, fuzzy +msgid "Import from Scene (Apply Transforms)" msgstr "Importa da Scena" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7367,6 +7440,16 @@ msgstr "Conteggio Punti Generati:" msgid "Flip Portal" msgstr "Ribalta orizzontalmente" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "Azzera la trasformazione" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Crea Nodo" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "AnimationTree non ha nessun percorso impostato a un AnimationPlayer" @@ -7874,12 +7957,14 @@ msgid "Skeleton2D" msgstr "Skeleton2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "Crea Posizione di Riposo (Dalle Ossa)" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "Imposta Ossa in Posizione di Riposo" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "Imposta Ossa in Posizione di Riposo" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "Sovrascrivi Scena esistente" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7906,6 +7991,71 @@ msgid "Perspective" msgstr "Prospettiva" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Orthogonal" +msgstr "Ortogonale" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Perspective" +msgstr "Prospettiva" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Orthogonal" +msgstr "Ortogonale" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "Prospettiva" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Left Orthogonal" +msgstr "Ortogonale" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Perspective" +msgstr "Prospettiva" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Orthogonal" +msgstr "Ortogonale" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Orthogonal" +msgstr "Ortogonale" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Perspective" +msgstr "Prospettiva" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Orthogonal" +msgstr "Ortogonale" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Perspective" +msgstr "Prospettiva" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "Transform Abortito." @@ -7973,7 +8123,7 @@ msgstr "Inclinazione" #: editor/plugins/spatial_editor_plugin.cpp msgid "Yaw:" -msgstr "" +msgstr "Imbardata:" #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy @@ -8012,7 +8162,7 @@ msgstr "Vertici" #: editor/plugins/spatial_editor_plugin.cpp msgid "FPS: %d (%s ms)" -msgstr "" +msgstr "FPS: %d (%s ms)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Top View." @@ -8023,42 +8173,22 @@ msgid "Bottom View." msgstr "Vista dal basso." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "Basso" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "Vista da sinistra." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "Sinistra" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "Vista da destra." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "Destra" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "Vista frontale." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "Fronte" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "Vista dal retro." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "Retro" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "Allinea la trasformazione con la vista" @@ -8340,6 +8470,11 @@ msgid "View Portal Culling" msgstr "Impostazioni Viewport" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "Impostazioni Viewport" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "Impostazioni…" @@ -8409,8 +8544,9 @@ msgid "Post" msgstr "Post" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" -msgstr "Gizmo senza nome" +#, fuzzy +msgid "Unnamed Gizmo" +msgstr "Progetto Senza Nome" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Mesh2D" @@ -8686,7 +8822,7 @@ msgstr "Stile Box" #: editor/plugins/theme_editor_plugin.cpp msgid "{num} color(s)" -msgstr "" +msgstr "{num} colori" #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8704,8 +8840,9 @@ msgid "No constants found." msgstr "Costante di colore." #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy msgid "{num} font(s)" -msgstr "" +msgstr "{num} caratteri" #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8714,7 +8851,7 @@ msgstr "Non trovato!" #: editor/plugins/theme_editor_plugin.cpp msgid "{num} icon(s)" -msgstr "" +msgstr "{num} icone" #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8723,7 +8860,7 @@ msgstr "Non trovato!" #: editor/plugins/theme_editor_plugin.cpp msgid "{num} stylebox(es)" -msgstr "" +msgstr "{num} stylebox" #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8732,7 +8869,7 @@ msgstr "Nessuna sottorisorsa trovata." #: editor/plugins/theme_editor_plugin.cpp msgid "{num} currently selected" -msgstr "" +msgstr "{num} selezionati" #: editor/plugins/theme_editor_plugin.cpp msgid "Nothing was selected for the import." @@ -11134,8 +11271,8 @@ msgid "" "Can't run project: Assets need to be imported.\n" "Please edit the project to trigger the initial import." msgstr "" -"Impossibile eseguire il progetto: le Risorse devono essere importate.\n" -"Per favore modifica il progetto per azionare l'importo iniziale." +"Impossibile eseguire il progetto: i contenuti devono essere importati.\n" +"Per favore modifica il progetto per avviare l'importazione iniziale." #: editor/project_manager.cpp msgid "Are you sure to run %d projects at once?" @@ -11241,9 +11378,8 @@ msgid "About" msgstr "Informazioni su Godot" #: editor/project_manager.cpp -#, fuzzy msgid "Asset Library Projects" -msgstr "Libreria degli asset" +msgstr "Progetti della libreria dei contenuti" #: editor/project_manager.cpp msgid "Restart Now" @@ -11266,8 +11402,8 @@ msgid "" "You currently don't have any projects.\n" "Would you like to explore official example projects in the Asset Library?" msgstr "" -"Al momento non hai nessun progetto.\n" -"Ti piacerebbe esplorare gli esempi ufficiali nella libreria degli Asset?" +"Al momento non esiste alcun progetto.\n" +"Esplorare i progetti di esempio ufficiali nella libreria dei contenuti?" #: editor/project_manager.cpp #, fuzzy @@ -12630,6 +12766,16 @@ msgstr "Imposta Posizione Punto Curva" msgid "Set Portal Point Position" msgstr "Imposta Posizione Punto Curva" +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Radius" +msgstr "Modifica Raggio di Forma del Cilindro" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr "Imposta Curva In Posizione" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "Modifica Raggio del Cilindro" @@ -12916,6 +13062,11 @@ msgstr "Stampando le lightmap" msgid "Class name can't be a reserved keyword" msgstr "Il nome della classe non può essere una parola chiave riservata" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "Riempi Selezione" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "Fine dell'analisi dell’eccezione interna dello stack" @@ -13402,78 +13553,78 @@ msgstr "Ricerca VisualScript" msgid "Get %s" msgstr "Ottieni %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "Il nome del pacchetto è mancante." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "I segmenti del pacchetto devono essere di lunghezza diversa da zero." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" "Il carattere \"%s\" non è consentito nei nomi dei pacchetti delle " "applicazioni Android." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" "Una cifra non può essere il primo carattere di un segmento di un pacchetto." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" "Il carattere \"%s\" non può essere il primo carattere di un segmento di " "pacchetto." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "Il pacchetto deve avere almeno un \".\" separatore." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "Seleziona il dispositivo dall'elenco" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting APK..." msgstr "Esportando Tutto" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Uninstalling..." msgstr "Disinstalla" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Installing to device, please wait..." msgstr "Caricamento, per favore attendere..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not install to device: %s" msgstr "Impossibile istanziare la scena!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Running on device..." msgstr "Eseguendo Script Personalizzato..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not execute on device." msgstr "Impossibile creare la cartella." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "Impossibile trovare lo strumento \"apksigner\"." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -13481,72 +13632,72 @@ msgstr "" "Il template build di Android non è installato in questo progetto. Installalo " "dal menu Progetto." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" "Debug keystore non configurato nelle Impostazioni dell'Editor né nel preset." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" "Release keystore non configurato correttamente nel preset di esportazione." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" "Un percorso valido per il SDK Android è richiesto nelle Impostazioni Editor." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "Un percorso invalido per il SDK Android nelle Impostazioni Editor." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "Cartella \"platform-tools\" inesistente!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" "Impossibile trovare il comando adb negli strumenti di piattaforma del SDK " "Android." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" "Per favore, controlla la directory specificata del SDK Android nelle " "Impostazioni Editor." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "Cartella \"build-tools\" inesistente!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" "Impossibile trovare il comando apksigner negli strumenti di piattaforma del " "SDK Android." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "Chiave pubblica non valida per l'espansione dell'APK." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "Nome del pacchetto non valido:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" @@ -13554,38 +13705,23 @@ msgstr "" "Modulo \"GodotPaymentV3\" non valido incluso nelle impostazione del progetto " "\"android/moduli\" (modificato in Godot 3.2.2).\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "Per utilizzare i plugin \"Use Custom Build\" deve essere abilitato." -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" -"\"Degrees Of Freedom\" è valido solamente quando \"Xr Mode\" è \"Oculus " -"Mobile VR\"." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" "\"Hand Tracking\" è valido solo quando \"Xr Mode\" è impostato su \"Oculus " "Mobile VR\"." -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" -"\"Focus Awareness\" è valido solo quando \"Xr Mode\" è impostato su \"Oculus " -"Mobile VR\"." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" "\"Export AAB\" è valido soltanto quanto \"Use Custom Build\" è abilitato." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13593,57 +13729,57 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Signing release %s..." msgstr "" "Scansione File,\n" "Si prega di attendere..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not find keystore, unable to export." msgstr "Impossibile aprire il template per l'esportazione:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Verifying %s..." msgstr "Aggiungendo %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting for Android" msgstr "Esportazione per Android" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "Nome file invalido! Il Bundle Android App richiede l'estensione *.aab." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "L'estensione APK non è compatibile con il Bundle Android App." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "Nome file invalido! L'APK Android richiede l'estensione *.apk." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." @@ -13652,7 +13788,7 @@ msgstr "" "informazione sulla sua versione esiste. Perfavore, reinstallalo dal menu " "\"Progetto\"." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13664,26 +13800,26 @@ msgstr "" " Versione Godot: %s\n" "Perfavore, reinstalla il build template di Android dal menu \"Progetto\"." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files to gradle project\n" msgstr "Impossibile creare project.godot nel percorso di progetto." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not write expansion package file!" msgstr "Impossibile scrivere il file:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "Compilazione di un progetto Android (gradle)" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." @@ -13693,11 +13829,11 @@ msgstr "" "In alternativa, visita docs.godotengine.org per la documentazione della " "build Android." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "Spostando l'output" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." @@ -13705,24 +13841,24 @@ msgstr "" "Impossibile copiare e rinominare il file di esportazione, controlla la " "directory del progetto gradle per gli output." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "Animazione non trovata: \"%s\"" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Creating APK..." msgstr "Creazione contorni..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" "Could not find template APK to export:\n" "%s" msgstr "Impossibile aprire il template per l'esportazione:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13730,21 +13866,21 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Adding files..." msgstr "Aggiungendo %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files" msgstr "Impossibile scrivere il file:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -14308,6 +14444,14 @@ msgstr "" "NavigationMeshInstance deve essere un figlio o nipote di un nodo Navigation. " "Fornisce solamente dati per la navigazione." +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14633,6 +14777,14 @@ msgstr "È necessaria un'estensione valida." msgid "Enable grid minimap." msgstr "Abilita mini-mappa griglia." +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14688,6 +14840,10 @@ msgstr "" "La dimensione del Viewport deve essere maggiore di 0 affinché qualcosa sia " "visibile." +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " @@ -14742,6 +14898,41 @@ msgstr "Assegnazione all'uniforme." msgid "Constants cannot be modified." msgstr "Le constanti non possono essere modificate." +#~ msgid "Make Rest Pose (From Bones)" +#~ msgstr "Crea Posizione di Riposo (Dalle Ossa)" + +#~ msgid "Bottom" +#~ msgstr "Basso" + +#~ msgid "Left" +#~ msgstr "Sinistra" + +#~ msgid "Right" +#~ msgstr "Destra" + +#~ msgid "Front" +#~ msgstr "Fronte" + +#~ msgid "Rear" +#~ msgstr "Retro" + +#~ msgid "Nameless gizmo" +#~ msgstr "Gizmo senza nome" + +#~ msgid "" +#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile " +#~ "VR\"." +#~ msgstr "" +#~ "\"Degrees Of Freedom\" è valido solamente quando \"Xr Mode\" è \"Oculus " +#~ "Mobile VR\"." + +#~ msgid "" +#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" +#~ "\"." +#~ msgstr "" +#~ "\"Focus Awareness\" è valido solo quando \"Xr Mode\" è impostato su " +#~ "\"Oculus Mobile VR\"." + #~ msgid "Package Contents:" #~ msgstr "Contenuti del pacchetto:" @@ -16709,9 +16900,6 @@ msgstr "Le constanti non possono essere modificate." #~ msgid "Images:" #~ msgstr "Immagini:" -#~ msgid "Group" -#~ msgstr "Gruppo" - #~ msgid "Sample Conversion Mode: (.wav files):" #~ msgstr "Modalità Conversione Sample (file .wav):" @@ -16845,9 +17033,6 @@ msgstr "Le constanti non possono essere modificate." #~ "le opzioni di esportazione successivamente. Gli atlas possono essere " #~ "anche generati in esportazione." -#~ msgid "Overwrite Existing Scene" -#~ msgstr "Sovrascrivi Scena esistente" - #~ msgid "Overwrite Existing, Keep Materials" #~ msgstr "Sovrascrivi Esistente, Mantieni Materiali" diff --git a/editor/translations/ja.po b/editor/translations/ja.po index 3ee6d0b49d..20cd8fc7da 100644 --- a/editor/translations/ja.po +++ b/editor/translations/ja.po @@ -33,12 +33,13 @@ # sporeball <sporeballdev@gmail.com>, 2020. # BinotaLIU <me@binota.org>, 2020, 2021. # 都築 本成 <motonari728@gmail.com>, 2021. +# Nanjakkun <nanjakkun@gmail.com>, 2021. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2021-08-12 14:48+0000\n" -"Last-Translator: sugusan <sugusan.development@gmail.com>\n" +"PO-Revision-Date: 2021-09-11 20:05+0000\n" +"Last-Translator: nitenook <admin@alterbaum.net>\n" "Language-Team: Japanese <https://hosted.weblate.org/projects/godot-engine/" "godot/ja/>\n" "Language: ja\n" @@ -46,7 +47,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.8-dev\n" +"X-Generator: Weblate 4.9-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -55,7 +56,7 @@ msgstr "convert() の引数の型が無効です。TYPE_* 定数を使用して #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp msgid "Expected a string of length 1 (a character)." -msgstr "長さが 1 の文字列 (文字) が必要です。" +msgstr "長さが1の文字列 (文字) が必要です。" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/mono/glue/gd_glue.cpp @@ -394,13 +395,11 @@ msgstr "アニメーション挿入" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "node '%s'" -msgstr "'..'を処理できません" +msgstr "ノード '%s'" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "animation" msgstr "アニメーション" @@ -412,9 +411,8 @@ msgstr "" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "property '%s'" -msgstr "プロパティ '%s' は存在しません。" +msgstr "プロパティ '%s'" #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -459,7 +457,7 @@ msgstr "" #: editor/animation_track_editor.cpp msgid "Not possible to add a new track without a root" -msgstr "root が無ければ新規トラックは追加できません" +msgstr "ルートなしで新規トラックは追加できません" #: editor/animation_track_editor.cpp msgid "Invalid track for Bezier (no suitable sub-properties)" @@ -504,7 +502,7 @@ msgstr "アニメーションキーの移動" #: editor/animation_track_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Clipboard is empty!" -msgstr "クリップボードは空です!" +msgstr "クリップボードは空です!" #: editor/animation_track_editor.cpp msgid "Paste Tracks" @@ -625,7 +623,6 @@ msgid "Go to Previous Step" msgstr "前のステップへ" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Apply Reset" msgstr "リセット" @@ -684,7 +681,7 @@ msgstr "すべてのアニメーションをクリーンアップ" #: editor/animation_track_editor.cpp msgid "Clean-Up Animation(s) (NO UNDO!)" -msgstr "アニメーションをクリーンアップ (元に戻せません!)" +msgstr "アニメーションをクリーンアップ (元に戻せません!)" #: editor/animation_track_editor.cpp msgid "Clean-Up" @@ -971,9 +968,8 @@ msgid "Edit..." msgstr "編集..." #: editor/connections_dialog.cpp -#, fuzzy msgid "Go to Method" -msgstr "メソッドへ行く" +msgstr "メソッドへ移動" #: editor/create_dialog.cpp msgid "Change %s Type" @@ -1053,7 +1049,7 @@ msgstr "" msgid "Dependencies" msgstr "依存関係" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "リソース" @@ -1093,17 +1089,16 @@ msgid "Owners Of:" msgstr "次のオーナー:" #: editor/dependency_editor.cpp -#, fuzzy msgid "" "Remove the selected files from the project? (Cannot be undone.)\n" "Depending on your filesystem configuration, the files will either be moved " "to the system trash or deleted permanently." msgstr "" -"選択したファイルをプロジェクトから削除しますか?(取り消しはできません)\n" -"削除されたファイルは、システムのゴミ箱にあるので復元できます。" +"選択したファイルをプロジェクトから削除しますか? (取り消しはできません。)\n" +"ファイルシステムの設定に応じて、そのファイルはシステムのゴミ箱に移動される" +"か、永久に削除されます。" #: editor/dependency_editor.cpp -#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -1112,8 +1107,9 @@ msgid "" "to the system trash or deleted permanently." msgstr "" "除去しようとしているファイルは他のリソースの動作に必要です。\n" -"無視して除去しますか?(取り消しはできません)\n" -"削除されたファイルは、システムのゴミ箱にあるので復元できます。" +"それでも除去しますか?(取り消しはできません。)\n" +"ファイルシステムの設定に応じて、そのファイルはシステムのゴミ箱に移動される" +"か、永久に削除されます。" #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1133,7 +1129,7 @@ msgstr "とにかく開く" #: editor/dependency_editor.cpp msgid "Which action should be taken?" -msgstr "どのアクションを実行しますか?" +msgstr "どのアクションを実行しますか?" #: editor/dependency_editor.cpp msgid "Fix Dependencies" @@ -1169,7 +1165,7 @@ msgstr "所有" #: editor/dependency_editor.cpp msgid "Resources Without Explicit Ownership:" -msgstr "所有権が明示されていないリソース:" +msgstr "所有権が明示的でないリソース:" #: editor/dictionary_property_edit.cpp msgid "Change Dictionary Key" @@ -1283,42 +1279,36 @@ msgid "Licenses" msgstr "ライセンス文書" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Error opening asset file for \"%s\" (not in ZIP format)." -msgstr "" -"パッケージ ファイルを開くときにエラーが発生しました (ZIP形式ではありません)。" +msgstr "\"%s\" のアセットファイルを開けません (ZIP形式ではありません)。" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "%s (already exists)" -msgstr "%s (すでに存在します)" +msgstr "%s (すでに存在する)" #: editor/editor_asset_installer.cpp msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:" -msgstr "" +msgstr "アセットの内容 \"%s\" - %d 個のファイルがプロジェクトと競合します:" #: editor/editor_asset_installer.cpp msgid "Contents of asset \"%s\" - No files conflict with your project:" -msgstr "" +msgstr "アセットの内容 \"%s\" - %d 個のファイルがプロジェクトと競合します:" #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" msgstr "アセットを展開" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "The following files failed extraction from asset \"%s\":" -msgstr "次のファイルをパッケージから抽出できませんでした:" +msgstr "次のファイルをアセット \"%s\" から展開できませんでした:" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "(and %s more files)" -msgstr "および %s 個のファイル。" +msgstr "(および %s 個のファイル)" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Asset \"%s\" installed successfully!" -msgstr "パッケージのインストールに成功しました!" +msgstr "アセット \"%s\" のインストールに成功しました!" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -1330,9 +1320,8 @@ msgid "Install" msgstr "インストール" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Asset Installer" -msgstr "パッケージインストーラ" +msgstr "アセットインストーラー" #: editor/editor_audio_buses.cpp msgid "Speakers" @@ -1395,7 +1384,6 @@ msgid "Bypass" msgstr "バイパス" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Bus Options" msgstr "バス オプション" @@ -1563,13 +1551,12 @@ msgid "Can't add autoload:" msgstr "自動読み込みを追加出来ません:" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "%s is an invalid path. File does not exist." -msgstr "ファイルが存在しません。" +msgstr "%s は無効なパスです。ファイルが存在しません。" #: editor/editor_autoload_settings.cpp msgid "%s is an invalid path. Not in resource path (res://)." -msgstr "" +msgstr "%s は無効なパスです。リソースパス (res://) に存在しません。" #: editor/editor_autoload_settings.cpp msgid "Add AutoLoad" @@ -1593,9 +1580,8 @@ msgid "Name" msgstr "名前" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Global Variable" -msgstr "変数" +msgstr "グローバル変数" #: editor/editor_data.cpp msgid "Paste Params" @@ -1688,8 +1674,8 @@ msgid "" msgstr "" "対象プラットフォームではGLES2へフォールバックするために'ETC'テクスチャ圧縮が" "必要です。\n" -"プロジェクト設定より 'Import Etc' をオンにするか、'Fallback To Gles 2' をオフ" -"にしてください。" +"プロジェクト設定より 'Import Etc' をオンにするか、'Driver Fallback Enabled' " +"をオフにしてください。" #: editor/editor_export.cpp msgid "" @@ -1720,13 +1706,13 @@ msgstr "" "プロジェクト設定より 'Import Pvrtc' をオンにするか、'Driver Fallback " "Enabled' をオフにしてください。" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "カスタム デバッグテンプレートが見つかりません。" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -1771,48 +1757,50 @@ msgstr "インポートドック" #: editor/editor_feature_profile.cpp msgid "Allows to view and edit 3D scenes." -msgstr "" +msgstr "3Dシーンの表示と編集ができます。" #: editor/editor_feature_profile.cpp msgid "Allows to edit scripts using the integrated script editor." -msgstr "" +msgstr "内臓のスクリプトエディタを使用してスクリプトを編集できます。" #: editor/editor_feature_profile.cpp msgid "Provides built-in access to the Asset Library." -msgstr "" +msgstr "アセットライブラリへの組み込みのアクセス機能を提供します。" #: editor/editor_feature_profile.cpp msgid "Allows editing the node hierarchy in the Scene dock." -msgstr "" +msgstr "シーンドックのノード階層を編集できます。" #: editor/editor_feature_profile.cpp msgid "" "Allows to work with signals and groups of the node selected in the Scene " "dock." -msgstr "" +msgstr "シーンドックで選択されたノードのシグナルとグループを操作できます。" #: editor/editor_feature_profile.cpp msgid "Allows to browse the local file system via a dedicated dock." -msgstr "" +msgstr "専用のドックを使用して、ローカルファイルシステムを閲覧できます。" #: editor/editor_feature_profile.cpp msgid "" "Allows to configure import settings for individual assets. Requires the " "FileSystem dock to function." msgstr "" +"各アセットのインポート設定を構成できます。動作にはファイルシステム ドッグが必" +"要です。" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "(current)" msgstr "(現在)" #: editor/editor_feature_profile.cpp msgid "(none)" -msgstr "" +msgstr "(なし)" #: editor/editor_feature_profile.cpp msgid "Remove currently selected profile, '%s'? Cannot be undone." msgstr "" +"選択されているプロファイル '%s' を除去しますか? 取り消しはできません。" #: editor/editor_feature_profile.cpp msgid "Profile must be a valid filename and must not contain '.'" @@ -1844,19 +1832,16 @@ msgid "Enable Contextual Editor" msgstr "コンテキストエディタを有効にする" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Class Properties:" -msgstr "プロパティ:" +msgstr "クラス プロパティ:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Main Features:" -msgstr "機能" +msgstr "主要機能:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Nodes and Classes:" -msgstr "クラスを有効にする:" +msgstr "ノードとクラス:" #: editor/editor_feature_profile.cpp msgid "File '%s' format is invalid, import aborted." @@ -1875,23 +1860,20 @@ msgid "Error saving profile to path: '%s'." msgstr "指定されたパスへの保存中にエラーが発生しました: '%s'." #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Reset to Default" -msgstr "デフォルトにリセットする" +msgstr "デフォルトに戻す" #: editor/editor_feature_profile.cpp msgid "Current Profile:" msgstr "現在のプロファイル:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Create Profile" -msgstr "プロファイルを消去" +msgstr "プロファイルを作成" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Remove Profile" -msgstr "タイルを除去" +msgstr "プロファイルを除去" #: editor/editor_feature_profile.cpp msgid "Available Profiles:" @@ -1899,7 +1881,7 @@ msgstr "利用可能なプロファイル:" #: editor/editor_feature_profile.cpp msgid "Make Current" -msgstr "最新にする" +msgstr "使用する" #: editor/editor_feature_profile.cpp editor/editor_node.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp @@ -1911,18 +1893,18 @@ msgid "Export" msgstr "エクスポート" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Configure Selected Profile:" -msgstr "現在のプロファイル:" +msgstr "選択されたプロファイルの設定:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Extra Options:" -msgstr "テクスチャ オプション" +msgstr "追加のオプション:" #: editor/editor_feature_profile.cpp msgid "Create or import a profile to edit available classes and properties." msgstr "" +"プロファイルを作成またはインポートして、利用可能なクラスやプロパティを編集で" +"きます。" #: editor/editor_feature_profile.cpp msgid "New profile name:" @@ -1949,7 +1931,6 @@ msgid "Select Current Folder" msgstr "現在のフォルダを選択" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "File exists, overwrite?" msgstr "ファイルが既に存在します。上書きしますか?" @@ -2065,7 +2046,7 @@ msgstr "親フォルダへ移動する。" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Refresh files." -msgstr "ファイル更新。" +msgstr "ファイルの一覧をリフレッシュする。" #: editor/editor_file_dialog.cpp msgid "(Un)favorite current folder." @@ -2112,7 +2093,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "アセットを(再)インポート中" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "トップ" @@ -2179,7 +2160,7 @@ msgid "" "[color=$color][url=$url]contributing one[/url][/color]!" msgstr "" "現在、このプロパティの説明はありません。[color=$color][url=$url]貢献[/url][/" -"color]して私たちを助けてください!" +"color]して私たちを助けてください!" #: editor/editor_help.cpp msgid "Method Descriptions" @@ -2191,7 +2172,7 @@ msgid "" "$color][url=$url]contributing one[/url][/color]!" msgstr "" "現在、このメソッドの説明はありません。[color=$color][url=$url]貢献[/url][/" -"color]して私たちを助けてください!" +"color]して私たちを助けてください!" #: editor/editor_help_search.cpp editor/editor_node.cpp #: editor/plugins/script_editor_plugin.cpp @@ -2349,6 +2330,9 @@ msgid "" "Update Continuously is enabled, which can increase power usage. Click to " "disable it." msgstr "" +"エディタウィンドウの再描画時にスピンします。\n" +"継続的に更新 が有効になっており、電力消費量が増加する可能性があります。クリッ" +"クで無効化します。" #: editor/editor_node.cpp msgid "Spins when the editor window redraws." @@ -2427,7 +2411,7 @@ msgstr "サムネイルを作成" #: editor/editor_node.cpp msgid "This operation can't be done without a tree root." -msgstr "この操作は、ツリーの root なしでは実行できません。" +msgstr "この操作は、ツリーのルートなしで実行できません。" #: editor/editor_node.cpp msgid "" @@ -2447,7 +2431,7 @@ msgstr "" #: editor/editor_node.cpp editor/scene_tree_dock.cpp msgid "Can't overwrite scene that is still open!" -msgstr "開いているシーンを上書きすることはできません!" +msgstr "開いているシーンを上書きすることはできません!" #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" @@ -2455,7 +2439,7 @@ msgstr "マージするメッシュライブラリーが読込めません!" #: editor/editor_node.cpp msgid "Error saving MeshLibrary!" -msgstr "メッシュライブラリーの保存エラー!" +msgstr "メッシュライブラリーの保存エラー!" #: editor/editor_node.cpp msgid "Can't load TileSet for merging!" @@ -2550,7 +2534,7 @@ msgstr "実行前にシーンを保存..." #: editor/editor_node.cpp msgid "Could not start subprocess!" -msgstr "サブプロセスを開始できませんでした!" +msgstr "サブプロセスを開始できませんでした!" #: editor/editor_node.cpp editor/filesystem_dock.cpp msgid "Open Scene" @@ -2585,13 +2569,16 @@ msgid "" "The current scene has no root node, but %d modified external resource(s) " "were saved anyway." msgstr "" +"現在のシーンにはルートノードがありませんが、%d 個の変更された外部リソースが保" +"存されました。" #: editor/editor_node.cpp -#, fuzzy msgid "" "A root node is required to save the scene. You can add a root node using the " "Scene tree dock." -msgstr "シーンを保存するにはルートノードが必要です。" +msgstr "" +"シーンを保存するにはルートノードが必要です。シーンツリーのドックから、ルート" +"ノードを追加することができます。" #: editor/editor_node.cpp msgid "Save Scene As..." @@ -2622,6 +2609,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "現在のシーンは保存されていません。それでも開きますか?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "元に戻す" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "やり直す" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "保存されていないシーンを読み込むことはできません。" @@ -2703,15 +2716,14 @@ msgid "Unable to load addon script from path: '%s'." msgstr "パス '%s' からアドオンスクリプトを読込めません。" #: editor/editor_node.cpp -#, fuzzy msgid "" "Unable to load addon script from path: '%s'. This might be due to a code " "error in that script.\n" "Disabling the addon at '%s' to prevent further errors." msgstr "" -"パス '%s' からアドオンスクリプトを読み込めません。コードにエラーがある可能性" -"があります。\n" -"構文を確認してください。" +"アドオンスクリプト パス: '%s' をロードできません。これは、そのスクリプトの" +"コードエラーが原因の可能性があります。\n" +"さらなるエラーを防ぐため、%s のアドオンを無効化します。" #: editor/editor_node.cpp msgid "" @@ -2757,7 +2769,7 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" -"メインシーンが定義されていません。選択しますか?\n" +"メインシーンが定義されていません。選択しますか?\n" "'アプリケーション' カテゴリの下の \"プロジェクト設定\" からも変更できます。" #: editor/editor_node.cpp @@ -2766,7 +2778,7 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" -"選択したシーン '%s' は存在しません。有効なシーンを選択しますか?\n" +"選択したシーン '%s' は存在しません。有効なシーンを選択しますか?\n" "'アプリケーション' カテゴリの下の \"プロジェクト設定\" で後から変更できます。" #: editor/editor_node.cpp @@ -2776,7 +2788,7 @@ msgid "" "category." msgstr "" "選択したシーン '%s' はシーンファイルではありません。有効なシーンを選択します" -"か?\n" +"か?\n" "'アプリケーション' カテゴリの下の \"プロジェクト設定\" で後から変更できます。" #: editor/editor_node.cpp @@ -2785,7 +2797,7 @@ msgstr "レイアウトを保存" #: editor/editor_node.cpp msgid "Delete Layout" -msgstr "レイアウトの削除" +msgstr "レイアウトを削除" #: editor/editor_node.cpp editor/import_dock.cpp #: editor/script_create_dialog.cpp @@ -2973,9 +2985,8 @@ msgid "Orphan Resource Explorer..." msgstr "孤立リソースエクスプローラー..." #: editor/editor_node.cpp -#, fuzzy msgid "Reload Current Project" -msgstr "プロジェクト名の変更" +msgstr "現在のプロジェクトをリロード" #: editor/editor_node.cpp msgid "Quit to Project List" @@ -3135,22 +3146,20 @@ msgid "Help" msgstr "ヘルプ" #: editor/editor_node.cpp -#, fuzzy msgid "Online Documentation" -msgstr "ドキュメントを開く" +msgstr "オンラインドキュメント" #: editor/editor_node.cpp msgid "Questions & Answers" -msgstr "" +msgstr "質問 & 回答" #: editor/editor_node.cpp msgid "Report a Bug" msgstr "バグを報告" #: editor/editor_node.cpp -#, fuzzy msgid "Suggest a Feature" -msgstr "値を設定する" +msgstr "機能を提案する" #: editor/editor_node.cpp msgid "Send Docs Feedback" @@ -3161,9 +3170,8 @@ msgid "Community" msgstr "コミュニティ" #: editor/editor_node.cpp -#, fuzzy msgid "About Godot" -msgstr "概要" +msgstr "Godotについて" #: editor/editor_node.cpp msgid "Support Godot Development" @@ -3257,14 +3265,12 @@ msgid "Manage Templates" msgstr "テンプレートの管理" #: editor/editor_node.cpp -#, fuzzy msgid "Install from file" msgstr "ファイルからインストール" #: editor/editor_node.cpp -#, fuzzy msgid "Select android sources file" -msgstr "ソースメッシュを選択:" +msgstr "Androidのソースファイルを選択" #: editor/editor_node.cpp msgid "" @@ -3312,6 +3318,11 @@ msgid "Merge With Existing" msgstr "既存の(ライブラリを)マージ" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "アニメーションのトランスフォームを変更" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "スクリプトを開いて実行" @@ -3321,7 +3332,7 @@ msgid "" "What action should be taken?" msgstr "" "以下のファイルより新しいものがディスク上に存在します。\n" -"どうしますか?" +"どうしますか?" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/shader_editor_plugin.cpp @@ -3383,9 +3394,8 @@ msgid "No sub-resources found." msgstr "サブリソースが見つかりませんでした。" #: editor/editor_path.cpp -#, fuzzy msgid "Open a list of sub-resources." -msgstr "サブリソースが見つかりませんでした。" +msgstr "サブリソースのリストを開く。" #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" @@ -3409,15 +3419,13 @@ msgstr "インストール済プラグイン:" #: editor/editor_plugin_settings.cpp editor/plugin_config_dialog.cpp msgid "Update" -msgstr "アップデート" +msgstr "更新" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Version" -msgstr "バージョン:" +msgstr "バージョン" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Author" msgstr "作者" @@ -3432,14 +3440,12 @@ msgid "Measure:" msgstr "測定:" #: editor/editor_profiler.cpp -#, fuzzy msgid "Frame Time (ms)" -msgstr "フレーム時間(秒)" +msgstr "フレーム時間 (ms)" #: editor/editor_profiler.cpp -#, fuzzy msgid "Average Time (ms)" -msgstr "平均時間(秒)" +msgstr "平均時間 (ms)" #: editor/editor_profiler.cpp msgid "Frame %" @@ -3451,11 +3457,11 @@ msgstr "物理フレーム %" #: editor/editor_profiler.cpp msgid "Inclusive" -msgstr "含" +msgstr "包括" #: editor/editor_profiler.cpp msgid "Self" -msgstr "セルフ(Self)" +msgstr "自己" #: editor/editor_profiler.cpp msgid "" @@ -3466,6 +3472,12 @@ msgid "" "functions called by that function.\n" "Use this to find individual functions to optimize." msgstr "" +"包括: この関数が呼び出す、他の関数の時間を含みます。\n" +"ボトルネックを見つけるために使用します。\n" +"\n" +"自己: この関数が呼び出す他の関数の時間を含まず、この関数自体に費やされた時間" +"のみをカウントします。\n" +"最適化する個々の関数を見つけるために使用します。" #: editor/editor_profiler.cpp msgid "Frame #:" @@ -3568,6 +3580,10 @@ msgstr "" "選択されたリソース (%s) は、このプロパティ (%s) が求める型に一致していませ" "ん。" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "ユニーク化" @@ -3587,7 +3603,6 @@ msgid "Paste" msgstr "貼り付け" #: editor/editor_resource_picker.cpp editor/property_editor.cpp -#, fuzzy msgid "Convert to %s" msgstr "%s に変換" @@ -3638,9 +3653,8 @@ msgid "Did you forget the '_run' method?" msgstr "'_run' メソッドを忘れていませんか?" #: editor/editor_spin_slider.cpp -#, fuzzy msgid "Hold %s to round to integers. Hold Shift for more precise changes." -msgstr "Ctrlを押したままで整数値に丸める。Shiftを押したままで精密調整。" +msgstr "%s を押したままで整数値に丸める。Shiftを押したままで精密調整。" #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" @@ -3667,14 +3681,12 @@ msgid "Uninstall these templates." msgstr "これらのテンプレートをアンインストールします。" #: editor/export_template_manager.cpp -#, fuzzy msgid "There are no mirrors available." -msgstr "'%s' ファイルがありません。" +msgstr "有効なミラーはありません。" #: editor/export_template_manager.cpp -#, fuzzy msgid "Retrieving the mirror list..." -msgstr "ミラーを取得しています。しばらくお待ちください..." +msgstr "ミラーリストを取得中..." #: editor/export_template_manager.cpp msgid "Starting the download..." @@ -3685,24 +3697,20 @@ msgid "Error requesting URL:" msgstr "URL リクエストのエラー:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Connecting to the mirror..." msgstr "ミラーに接続中..." #: editor/export_template_manager.cpp -#, fuzzy msgid "Can't resolve the requested address." -msgstr "ホスト名を解決できません:" +msgstr "要求されたアドレスを解決できません。" #: editor/export_template_manager.cpp -#, fuzzy msgid "Can't connect to the mirror." -msgstr "ホストに接続できません:" +msgstr "ミラーに接続できません。" #: editor/export_template_manager.cpp -#, fuzzy msgid "No response from the mirror." -msgstr "ホストから応答がありません:" +msgstr "ミラーから応答がありません。" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -3710,14 +3718,12 @@ msgid "Request failed." msgstr "リクエストは失敗しました。" #: editor/export_template_manager.cpp -#, fuzzy msgid "Request ended up in a redirect loop." -msgstr "リクエスト失敗。リダイレクト過多" +msgstr "リクエストはリダイレクトループのため終了しました。" #: editor/export_template_manager.cpp -#, fuzzy msgid "Request failed:" -msgstr "リクエストは失敗しました。" +msgstr "リクエスト失敗:" #: editor/export_template_manager.cpp msgid "Download complete; extracting templates..." @@ -3740,13 +3746,12 @@ msgid "Error getting the list of mirrors." msgstr "ミラーリストの取得エラー。" #: editor/export_template_manager.cpp -#, fuzzy msgid "Error parsing JSON with the list of mirrors. Please report this issue!" -msgstr "ミラーリストのJSONを読み込み失敗。この問題の報告をお願いします!" +msgstr "ミラーリストのJSONの解析に失敗しました。この問題の報告をお願いします!" #: editor/export_template_manager.cpp msgid "Best available mirror" -msgstr "" +msgstr "有効な最良のミラー" #: editor/export_template_manager.cpp msgid "" @@ -3799,24 +3804,20 @@ msgid "SSL Handshake Error" msgstr "SSL ハンドシェイクエラー" #: editor/export_template_manager.cpp -#, fuzzy msgid "Can't open the export templates file." -msgstr "エクスポート テンプレート ZIP ファイルを開けません。" +msgstr "エクスポートテンプレート ファイルを開けません。" #: editor/export_template_manager.cpp -#, fuzzy msgid "Invalid version.txt format inside the export templates file: %s." -msgstr "テンプレート内の version.txt フォーマットが不正です: %s。" +msgstr "エクスポートテンプレート内の version.txt フォーマットが不正です: %s。" #: editor/export_template_manager.cpp -#, fuzzy msgid "No version.txt found inside the export templates file." -msgstr "テンプレート内に version.txt が見つかりません。" +msgstr "エクスポートテンプレート内に version.txt が見つかりません。" #: editor/export_template_manager.cpp -#, fuzzy msgid "Error creating path for extracting templates:" -msgstr "テンプレートのパス生成エラー:" +msgstr "テンプレート展開のためのパスの作成エラー:" #: editor/export_template_manager.cpp msgid "Extracting Export Templates" @@ -3827,9 +3828,8 @@ msgid "Importing:" msgstr "インポート中:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Remove templates for the version '%s'?" -msgstr "テンプレート バージョン '%s' を除去しますか?" +msgstr "バージョン '%s' のテンプレートを削除しますか?" #: editor/export_template_manager.cpp msgid "Uncompressing Android Build Sources" @@ -3837,7 +3837,7 @@ msgstr "Androidビルドソースの解凍" #: editor/export_template_manager.cpp msgid "Export Template Manager" -msgstr "テンプレートのエクスポート マネージャー" +msgstr "エクスポートテンプレート マネージャー" #: editor/export_template_manager.cpp msgid "Current Version:" @@ -3854,37 +3854,32 @@ msgid "Export templates are installed and ready to be used." msgstr "エクスポート テンプレートはインストールされており、利用できます。" #: editor/export_template_manager.cpp -#, fuzzy msgid "Open Folder" -msgstr "ファイルを開く" +msgstr "フォルダを開く" #: editor/export_template_manager.cpp msgid "Open the folder containing installed templates for the current version." -msgstr "" +msgstr "現在のバージョンのテンプレートがインストールされたフォルダを開きます。" #: editor/export_template_manager.cpp msgid "Uninstall" msgstr "アンインストール" #: editor/export_template_manager.cpp -#, fuzzy msgid "Uninstall templates for the current version." -msgstr "カウンタの初期値" +msgstr "現在のバージョンのテンプレートをアンインストールする。" #: editor/export_template_manager.cpp -#, fuzzy msgid "Download from:" -msgstr "ダウンロードエラー" +msgstr "ダウンロード元:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Open in Web Browser" -msgstr "ブラウザで実行" +msgstr "Webブラウザで開く" #: editor/export_template_manager.cpp -#, fuzzy msgid "Copy Mirror URL" -msgstr "エラーをコピー" +msgstr "エラーのURLをコピー" #: editor/export_template_manager.cpp msgid "Download and Install" @@ -3895,20 +3890,20 @@ msgid "" "Download and install templates for the current version from the best " "possible mirror." msgstr "" +"現在のバージョンのテンプレートを最適なミラーからダウンロードしてインストール" +"します。" #: editor/export_template_manager.cpp msgid "Official export templates aren't available for development builds." msgstr "公式の書き出しテンプレートは開発用ビルドの場合は使用できません。" #: editor/export_template_manager.cpp -#, fuzzy msgid "Install from File" msgstr "ファイルからインストール" #: editor/export_template_manager.cpp -#, fuzzy msgid "Install templates from a local file." -msgstr "ZIPファイルからテンプレートをインポート" +msgstr "ローカルファイルからテンプレートをインストールする。" #: editor/export_template_manager.cpp editor/find_in_files.cpp #: editor/progress_dialog.cpp scene/gui/dialogs.cpp @@ -3916,19 +3911,16 @@ msgid "Cancel" msgstr "キャンセル" #: editor/export_template_manager.cpp -#, fuzzy msgid "Cancel the download of the templates." -msgstr "エクスポート テンプレート ZIP ファイルを開けません。" +msgstr "テンプレートのダウンロードをキャンセルする。" #: editor/export_template_manager.cpp -#, fuzzy msgid "Other Installed Versions:" -msgstr "インストールされたバージョン:" +msgstr "他のインストールされたバージョン:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Uninstall Template" -msgstr "アンインストール" +msgstr "テンプレートをアンインストール" #: editor/export_template_manager.cpp msgid "Select Template File" @@ -3943,6 +3935,8 @@ msgid "" "The templates will continue to download.\n" "You may experience a short editor freeze when they finish." msgstr "" +"テンプレートのダウンロードは継続されます。\n" +"完了時に、短い間エディタがフリーズする可能性があります。" #: editor/filesystem_dock.cpp msgid "Favorites" @@ -4127,7 +4121,7 @@ msgstr "名前を変更..." #: editor/filesystem_dock.cpp msgid "Focus the search box" -msgstr "" +msgstr "検索ボックスにフォーカス" #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -4275,7 +4269,7 @@ msgstr "グループがノードありません" #: editor/groups_editor.cpp editor/scene_tree_dock.cpp #: editor/scene_tree_editor.cpp msgid "Filter nodes" -msgstr "フィルタノード" +msgstr "ノードのフィルタ" #: editor/groups_editor.cpp msgid "Nodes in Group" @@ -4376,18 +4370,16 @@ msgid "Saving..." msgstr "保存中..." #: editor/import_defaults_editor.cpp -#, fuzzy msgid "Select Importer" -msgstr "選択モード" +msgstr "インポータを選択" #: editor/import_defaults_editor.cpp -#, fuzzy msgid "Importer:" -msgstr "インポート" +msgstr "インポータ:" #: editor/import_defaults_editor.cpp msgid "Reset to Defaults" -msgstr "デフォルトにリセットする" +msgstr "デフォルトに戻す" #: editor/import_dock.cpp msgid "Keep File (No Import)" @@ -4437,14 +4429,12 @@ msgid "Failed to load resource." msgstr "リソースの読込みに失敗しました。" #: editor/inspector_dock.cpp -#, fuzzy msgid "Copy Properties" -msgstr "プロパティ" +msgstr "プロパティをコピー" #: editor/inspector_dock.cpp -#, fuzzy msgid "Paste Properties" -msgstr "プロパティ" +msgstr "プロパティを貼り付け" #: editor/inspector_dock.cpp msgid "Make Sub-Resources Unique" @@ -4469,23 +4459,20 @@ msgid "Save As..." msgstr "名前を付けて保存..." #: editor/inspector_dock.cpp -#, fuzzy msgid "Extra resource options." -msgstr "リソースパスにありません。" +msgstr "追加のリソースオプション。" #: editor/inspector_dock.cpp -#, fuzzy msgid "Edit Resource from Clipboard" -msgstr "リソースのクリップボードを編集" +msgstr "クリップボードからリソースを編集" #: editor/inspector_dock.cpp msgid "Copy Resource" msgstr "リソースをコピー" #: editor/inspector_dock.cpp -#, fuzzy msgid "Make Resource Built-In" -msgstr "組み込みにする" +msgstr "リソースを組み込みにする" #: editor/inspector_dock.cpp msgid "Go to the previous edited object in history." @@ -4500,9 +4487,8 @@ msgid "History of recently edited objects." msgstr "最近編集したオブジェクトの履歴。" #: editor/inspector_dock.cpp -#, fuzzy msgid "Open documentation for this object." -msgstr "ドキュメントを開く" +msgstr "このオブジェクトのドキュメントを開く。" #: editor/inspector_dock.cpp editor/scene_tree_dock.cpp msgid "Open Documentation" @@ -4513,9 +4499,8 @@ msgid "Filter properties" msgstr "フィルタプロパティ" #: editor/inspector_dock.cpp -#, fuzzy msgid "Manage object properties." -msgstr "オブジェクトのプロパティ。" +msgstr "オブジェクトのプロパティを管理。" #: editor/inspector_dock.cpp msgid "Changes may be lost!" @@ -4759,9 +4744,8 @@ msgid "Blend:" msgstr "ブレンド:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Parameter Changed:" -msgstr "パラメータが変更されました" +msgstr "パラメータが変更されました:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -5445,11 +5429,11 @@ msgstr "このアセットのダウンロードは既に進行中!" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Recently Updated" -msgstr "更新日時" +msgstr "最新の更新日" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Least Recently Updated" -msgstr "更新日時 (逆)" +msgstr "最古の更新日" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Name (A-Z)" @@ -5489,11 +5473,11 @@ msgstr "すべて" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Search templates, projects, and demos" -msgstr "" +msgstr "テンプレート、プロジェクト、デモを検索" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Search assets (excluding templates, projects, and demos)" -msgstr "" +msgstr "アセットを検索 (テンプレート、プロジェクト、デモを除く)" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." @@ -5525,7 +5509,7 @@ msgstr "公式" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Testing" -msgstr "テストする" +msgstr "試験的" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Loading..." @@ -5537,7 +5521,7 @@ msgstr "アセットのzipファイル" #: editor/plugins/audio_stream_editor_plugin.cpp msgid "Audio Preview Play/Pause" -msgstr "" +msgstr "オーディオプレビューの再生/一時停止" #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "" @@ -5548,13 +5532,13 @@ msgstr "" "シーンを保存してから再度行ってください。" #: editor/plugins/baked_lightmap_editor_plugin.cpp -#, fuzzy msgid "" "No meshes to bake. Make sure they contain an UV2 channel and that the 'Use " "In Baked Light' and 'Generate Lightmap' flags are on." msgstr "" -"ベイクするメッシュがありません。メッシュに UV2チャンネルが含まれてお" -"り、'Bake Light' フラグがオンになっていることを確認してください。" +"ベイクするメッシュがありません。メッシュに UV2チャンネルが含まれており、Use " +"In Baked Light' と 'Generate Lightmap' フラグがオンになっていることを確認して" +"ください。" #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Failed creating lightmap images, make sure path is writable." @@ -5697,6 +5681,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "CanvasItem \"%s\" を (%d, %d) に移動" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "選択対象をロック" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "グループ" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -5797,13 +5793,13 @@ msgstr "アンカーを変更" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "" "Project Camera Override\n" "Overrides the running project's camera with the editor viewport camera." msgstr "" -"ゲームカメラの置き換え\n" -"エディタのビューポートカメラでゲームカメラを置き換える。" +"プロジェクトのカメラのオーバーライド\n" +"実行中のプロジェクトのカメラを、エディタのビューポートカメラでオーバーライド" +"します。" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5812,6 +5808,9 @@ msgid "" "No project instance running. Run the project from the editor to use this " "feature." msgstr "" +"プロジェクトのカメラのオーバーライド\n" +"実行中のプロジェクトのインスタンスはありません。この機能を使用するには、エ" +"ディターからプロジェクトを実行します。" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5877,31 +5876,27 @@ msgstr "選択モード" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Drag: Rotate selected node around pivot." -msgstr "選択したノードまたはトランジションを除去。" +msgstr "ドラッグ: 選択したノードをピボットを中心に回転する。" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Alt+Drag: Move selected node." -msgstr "Alt+ドラッグ: 移動" +msgstr "Alt+ドラッグ: 選択したノードを移動。" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "V: Set selected node's pivot position." -msgstr "選択したノードまたはトランジションを除去。" +msgstr "V: 選択したノードのピボットの位置を設定する。" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Alt+RMB: Show list of all nodes at position clicked, including locked." msgstr "" -"クリックした位置にあるオブジェクトのリストを表示\n" -"(選択モードでのAlt+右クリックと同じ)。" +"Alt+右クリック: クリックした位置のすべてのノードを一覧で表示。ロックされたも" +"のも含む。" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "RMB: Add node at position clicked." -msgstr "" +msgstr "右クリック: クリックした位置にノードを追加。" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -6011,7 +6006,7 @@ msgstr "ガイドにスナップ" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Lock the selected object in place (can't be moved)." -msgstr "選択したオブジェクトを現在位置でロック (移動不可能にする)。" +msgstr "選択したオブジェクトの位置をロック (移動不可能にする)。" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -6138,14 +6133,12 @@ msgid "Clear Pose" msgstr "ポーズをクリアする" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Add Node Here" -msgstr "ノードを追加" +msgstr "ここにノードを追加" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Instance Scene Here" -msgstr "シーンのインスタンス化" +msgstr "ここにシーンをインスタンス化する" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Multiply grid step by 2" @@ -6161,49 +6154,43 @@ msgstr "ビューをパン" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 3.125%" -msgstr "" +msgstr "3.125%にズーム" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 6.25%" -msgstr "" +msgstr "6.25%にズーム" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 12.5%" -msgstr "" +msgstr "12.5%にズーム" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 25%" -msgstr "ズームアウト" +msgstr "25%にズーム" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 50%" -msgstr "ズームアウト" +msgstr "50%にズーム" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 100%" -msgstr "ズームアウト" +msgstr "100%にズーム" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 200%" -msgstr "ズームアウト" +msgstr "200%にズーム" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 400%" -msgstr "ズームアウト" +msgstr "400%にズーム" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 800%" -msgstr "ズームアウト" +msgstr "800%にズーム" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 1600%" -msgstr "" +msgstr "1600%にズーム" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" @@ -6276,7 +6263,7 @@ msgstr "放出マスクをクリア" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp msgid "Particles" -msgstr "パーティクル" +msgstr "Particles" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp @@ -6315,7 +6302,7 @@ msgstr "放出色" #: editor/plugins/cpu_particles_editor_plugin.cpp msgid "CPUParticles" -msgstr "CPUパーティクル" +msgstr "CPUParticles" #: editor/plugins/cpu_particles_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp @@ -6421,7 +6408,7 @@ msgstr "オクルーダーポリゴンを生成" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh is empty!" -msgstr "メッシュがありません!" +msgstr "メッシュがありません!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Couldn't create a Trimesh collision shape." @@ -6433,7 +6420,7 @@ msgstr "三角形メッシュ静的ボディを作成" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" -msgstr "これはシーンのルートでは機能しません!" +msgstr "これはシーンのルートでは機能しません!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Shape" @@ -6449,9 +6436,8 @@ msgid "Couldn't create a single convex collision shape." msgstr "単一の凸型コリジョンシェイプを作成できませんでした。" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Simplified Convex Shape" -msgstr "単一の凸型シェイプを作成する" +msgstr "簡略化された凸型シェイプを作成する" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Single Convex Shape" @@ -6480,16 +6466,15 @@ msgstr "含まれているメッシュがArrayMesh型ではありません。" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "UV Unwrap failed, mesh may not be manifold?" -msgstr "UV展開に失敗しました。メッシュが非多様体ではありませんか?" +msgstr "UV展開に失敗しました。メッシュが非多様体ではありませんか?" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "No mesh to debug." msgstr "デバッグするメッシュがありません。" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Mesh has no UV in layer %d." -msgstr "モデルにはこのレイヤーにUVがありません" +msgstr "メッシュのレイヤー %dにUVがありません。" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "MeshInstance lacks a Mesh!" @@ -6497,15 +6482,15 @@ msgstr "MeshInstanceにメッシュがありません!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh has not surface to create outlines from!" -msgstr "メッシュにアウトラインを作成するためのサーフェスが存在しません!" +msgstr "メッシュにアウトラインを作成するためのサーフェスが存在しません!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" -msgstr "メッシュのプリミティブ型が PRIMITIVE_TRIANGLES ではありません!" +msgstr "メッシュのプリミティブ型が PRIMITIVE_TRIANGLES ではありません!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" -msgstr "アウトラインを生成できませんでした!" +msgstr "アウトラインを生成できませんでした!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline" @@ -6554,9 +6539,8 @@ msgstr "" "これは、衝突検出の最速の(ただし精度が最も低い)オプションです。" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Simplified Convex Collision Sibling" -msgstr "単一の凸型コリジョンの兄弟を作成" +msgstr "簡略化された凸型コリジョンの兄弟を作成" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "" @@ -6564,6 +6548,9 @@ msgid "" "This is similar to single collision shape, but can result in a simpler " "geometry in some cases, at the cost of accuracy." msgstr "" +"簡略化された凸型コリジョンシェイプを作成します。\n" +"これは単一の凸型コリジョンシェイプと似ていますが、精度を犠牲により単純なジオ" +"メトリになることがあります。" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Multiple Convex Collision Siblings" @@ -6644,7 +6631,13 @@ msgid "Remove Selected Item" msgstr "選択したアイテムを取り除く" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +#, fuzzy +msgid "Import from Scene (Ignore Transforms)" +msgstr "シーンからインポート" + +#: editor/plugins/mesh_library_editor_plugin.cpp +#, fuzzy +msgid "Import from Scene (Apply Transforms)" msgstr "シーンからインポート" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7171,7 +7164,7 @@ msgstr "ボーンをポリゴンに同期させる" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ERROR: Couldn't load resource!" -msgstr "エラー: リソースを読み込めませんでした!" +msgstr "エラー: リソースを読み込めませんでした!" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Add Resource" @@ -7188,7 +7181,7 @@ msgstr "リソースを削除" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Resource clipboard is empty!" -msgstr "リソースクリップボードが空です!" +msgstr "リソースクリップボードが空です!" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Paste Resource" @@ -7220,9 +7213,8 @@ msgid "ResourcePreloader" msgstr "ResourcePreloader" #: editor/plugins/room_manager_editor_plugin.cpp -#, fuzzy msgid "Flip Portals" -msgstr "左右反転" +msgstr "ポータルを反転" #: editor/plugins/room_manager_editor_plugin.cpp #, fuzzy @@ -7235,9 +7227,18 @@ msgid "Generate Points" msgstr "生成したポイントの数:" #: editor/plugins/room_manager_editor_plugin.cpp -#, fuzzy msgid "Flip Portal" -msgstr "左右反転" +msgstr "ポータルを反転" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "トランスフォームをクリア" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "ノードを生成" #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" @@ -7253,7 +7254,7 @@ msgstr "最近開いたファイルの履歴をクリア" #: editor/plugins/script_editor_plugin.cpp msgid "Close and save changes?" -msgstr "変更を保存して閉じますか?" +msgstr "変更を保存して閉じますか?" #: editor/plugins/script_editor_plugin.cpp msgid "Error writing TextFile:" @@ -7265,7 +7266,7 @@ msgstr "ファイルが読み込めませんでした:" #: editor/plugins/script_editor_plugin.cpp msgid "Error saving file!" -msgstr "ファイルの保存エラー!" +msgstr "ファイルの保存エラー!" #: editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme." @@ -7347,7 +7348,7 @@ msgstr "前を検索" #: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" -msgstr "フィルタスクリプト" +msgstr "スクリプトのフィルタ" #: editor/plugins/script_editor_plugin.cpp msgid "Toggle alphabetical sorting of the method list." @@ -7469,7 +7470,7 @@ msgstr "続行" #: editor/plugins/script_editor_plugin.cpp msgid "Keep Debugger Open" -msgstr "デバッガを開いたままに" +msgstr "デバッガを開いたままにする" #: editor/plugins/script_editor_plugin.cpp msgid "Debug with External Editor" @@ -7506,7 +7507,7 @@ msgid "" "What action should be taken?:" msgstr "" "以下のファイルより新しいものがディスク上に存在します。\n" -"どうしますか?:" +"どうしますか?:" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Debugger" @@ -7721,7 +7722,7 @@ msgid "" "What action should be taken?" msgstr "" "このシェーダーはディスク上で修正されています。\n" -"どうしますか?" +"どうしますか?" #: editor/plugins/shader_editor_plugin.cpp msgid "Shader" @@ -7744,12 +7745,14 @@ msgid "Skeleton2D" msgstr "Skeleton2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "レスト・ポーズの作成(ボーンから)" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "レスト・ポーズへボーンを設定する" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "レスト・ポーズへボーンを設定する" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "上書き" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7776,6 +7779,71 @@ msgid "Perspective" msgstr "透視投影" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Orthogonal" +msgstr "平行投影" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Perspective" +msgstr "透視投影" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Orthogonal" +msgstr "平行投影" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "透視投影" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Left Orthogonal" +msgstr "平行投影" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Perspective" +msgstr "透視投影" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Orthogonal" +msgstr "平行投影" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Orthogonal" +msgstr "平行投影" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Perspective" +msgstr "透視投影" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Orthogonal" +msgstr "平行投影" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Perspective" +msgstr "透視投影" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "トランスフォームは中止されました。" @@ -7802,20 +7870,17 @@ msgid "None" msgstr "None" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Rotate" -msgstr "回転モード" +msgstr "回転" #. TRANSLATORS: This refers to the movement that changes the position of an object. #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Translate" -msgstr "移動:" +msgstr "移動" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Scale" -msgstr "スケール:" +msgstr "スケール" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scaling: " @@ -7838,52 +7903,44 @@ msgid "Animation Key Inserted." msgstr "アニメーションキーが挿入されました。" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Pitch:" -msgstr "ピッチ" +msgstr "ピッチ:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Yaw:" -msgstr "" +msgstr "ヨー:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Size:" -msgstr "サイズ: " +msgstr "サイズ:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Objects Drawn:" -msgstr "描画されたオブジェクト" +msgstr "描画されたオブジェクト:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Material Changes:" -msgstr "マテリアルの変更" +msgstr "マテリアルの変更:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Shader Changes:" -msgstr "シェーダーの変更" +msgstr "シェーダーの変更:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Surface Changes:" -msgstr "サーフェスの変更" +msgstr "サーフェスの変更:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Draw Calls:" -msgstr "ドローコール" +msgstr "ドローコール:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Vertices:" -msgstr "頂点" +msgstr "頂点:" #: editor/plugins/spatial_editor_plugin.cpp msgid "FPS: %d (%s ms)" -msgstr "" +msgstr "FPS: %d (%s ms)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Top View." @@ -7894,42 +7951,22 @@ msgid "Bottom View." msgstr "下面図。" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "下面" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "左側面図。" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "左側面" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "右側面図。" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "右側面" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "前面図。" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "前面" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "後面図." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "後面" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "トランスフォームをビューに合わせる" @@ -8038,9 +8075,8 @@ msgid "Freelook Slow Modifier" msgstr "フリールックの減速調整" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Toggle Camera Preview" -msgstr "カメラサイズを変更" +msgstr "カメラのプレビューを切り替え" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Rotation Locked" @@ -8050,6 +8086,8 @@ msgstr "ビューの回転を固定中" msgid "" "To zoom further, change the camera's clipping planes (View -> Settings...)" msgstr "" +"さらにズームするには、カメラのクリッピング面を変更してください (ビュー -> 設" +"定...)" #: editor/plugins/spatial_editor_plugin.cpp msgid "" @@ -8083,7 +8121,6 @@ msgstr "" "半開きの目: ギズモは非透明な面を通しても可視 (「X線」)。" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Snap Nodes to Floor" msgstr "ノードをフロアにスナップ" @@ -8190,16 +8227,20 @@ msgstr "ギズモ" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Origin" -msgstr "ビューの原点" +msgstr "原点を表示" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Grid" -msgstr "ビューのグリッド" +msgstr "グリッドを表示" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View Portal Culling" -msgstr "ビューポートの設定" +msgstr "ポータルカリングを表示" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "ポータルカリングを表示" #: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp @@ -8232,11 +8273,11 @@ msgstr "視野角(度):" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Z-Near:" -msgstr "Z-Nearを表示:" +msgstr "Z-Nearの表示:" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Z-Far:" -msgstr "Z-Farを表示:" +msgstr "Z-Farの表示:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Change" @@ -8267,8 +8308,9 @@ msgid "Post" msgstr "後" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" -msgstr "無名のギズモ" +#, fuzzy +msgid "Unnamed Gizmo" +msgstr "名無しのプロジェクト" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Mesh2D" @@ -8304,7 +8346,7 @@ msgstr "LightOccluder2D プレビュー" #: editor/plugins/sprite_editor_plugin.cpp msgid "Sprite is empty!" -msgstr "スプライトは空です!" +msgstr "スプライトは空です!" #: editor/plugins/sprite_editor_plugin.cpp msgid "Can't convert a sprite using animation frames to mesh." @@ -8384,11 +8426,11 @@ msgstr "画像を読み込めませんでした:" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "ERROR: Couldn't load frame resource!" -msgstr "エラー:フレームリソースを読み込めませんでした!" +msgstr "エラー:フレームリソースを読み込めませんでした!" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Resource clipboard is empty or not a texture!" -msgstr "リソースクリップボードは空か、テクスチャ以外のものです!" +msgstr "リソースクリップボードは空か、テクスチャ以外のものです!" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Paste Frame" @@ -8519,106 +8561,92 @@ msgid "TextureRegion" msgstr "テクスチャ領域" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Colors" -msgstr "Color" +msgstr "カラー" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Fonts" msgstr "フォント" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Icons" msgstr "アイコン" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Styleboxes" -msgstr "スタイル" +msgstr "StyleBox" #: editor/plugins/theme_editor_plugin.cpp msgid "{num} color(s)" -msgstr "" +msgstr "{num} 個のカラー" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "No colors found." -msgstr "サブリソースが見つかりませんでした。" +msgstr "カラーが見つかりませんでした。" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "{num} constant(s)" -msgstr "定数" +msgstr "{num} 個の定数" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "No constants found." -msgstr "Color定数。" +msgstr "定数が見つかりませんでした。" #: editor/plugins/theme_editor_plugin.cpp msgid "{num} font(s)" -msgstr "" +msgstr "{num} 個のフォント" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "No fonts found." -msgstr "見つかりません!" +msgstr "フォントが見つかりませんでした。" #: editor/plugins/theme_editor_plugin.cpp msgid "{num} icon(s)" -msgstr "" +msgstr "{num} 個のアイコン" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "No icons found." -msgstr "見つかりません!" +msgstr "アイコンが見つかりませんでした。" #: editor/plugins/theme_editor_plugin.cpp msgid "{num} stylebox(es)" -msgstr "" +msgstr "{num} 個のスカイボックス" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "No styleboxes found." -msgstr "サブリソースが見つかりませんでした。" +msgstr "StyleBoxが見つかりませんでした。" #: editor/plugins/theme_editor_plugin.cpp msgid "{num} currently selected" -msgstr "" +msgstr "{num} 個 現在選択中" #: editor/plugins/theme_editor_plugin.cpp msgid "Nothing was selected for the import." -msgstr "" +msgstr "インポートするものが選択されていません。" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Importing Theme Items" -msgstr "テーマのインポート" +msgstr "テーマのアイテムをインポート中" #: editor/plugins/theme_editor_plugin.cpp msgid "Importing items {n}/{n}" -msgstr "" +msgstr "アイテムをインポート中 {n}/{n}" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Updating the editor" -msgstr "エディタを終了しますか?" +msgstr "エディタをアップデート中" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Finalizing" -msgstr "分析中" +msgstr "終了処理中" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Filter:" -msgstr "フィルタ: " +msgstr "フィルタ:" #: editor/plugins/theme_editor_plugin.cpp msgid "With Data" -msgstr "" +msgstr "データ付" #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8626,76 +8654,71 @@ msgid "Select by data type:" msgstr "ノードを選択" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select all visible color items." -msgstr "設定項目を設定してください!" +msgstr "表示中のすべてのカラーアイテムを選択する。" #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible color items and their data." -msgstr "" +msgstr "表示中のすべてのカラーアイテムとそのデータを選択する。" #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all visible color items." -msgstr "" +msgstr "表示中のすべてのカラーアイテムを選択解除する。" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select all visible constant items." -msgstr "設定項目を選択してください!" +msgstr "表示中のすべての定数アイテムを選択する。" #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible constant items and their data." -msgstr "" +msgstr "表示中のすべての定数アイテムとそのデータを選択する。" #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all visible constant items." -msgstr "" +msgstr "表示中のすべての定数アイテムを選択解除する。" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select all visible font items." -msgstr "設定項目を選択してください!" +msgstr "表示中のすべてのフォントアイテムを選択する。" #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible font items and their data." -msgstr "" +msgstr "表示中のすべてのフォントアイテムとそのデータを選択する。" #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all visible font items." -msgstr "" +msgstr "表示中のすべてのフォントアイテムを選択解除する。" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select all visible icon items." -msgstr "設定項目を選択してください!" +msgstr "表示中のすべてのアイコンアイテムを選択する。" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select all visible icon items and their data." -msgstr "設定項目を選択してください!" +msgstr "表示中のすべてのアイコンアイテムとそのデータを選択する。" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Deselect all visible icon items." -msgstr "設定項目を選択してください!" +msgstr "表示中のすべてのアイコンアイテムを選択解除する。" #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible stylebox items." -msgstr "" +msgstr "表示中のすべての StyleBox アイテムを選択する。" #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible stylebox items and their data." -msgstr "" +msgstr "表示中のすべての StyleBox アイテムとそのデータを選択する。" #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all visible stylebox items." -msgstr "" +msgstr "表示中のすべての StyleBox アイテムを選択解除する。" #: editor/plugins/theme_editor_plugin.cpp msgid "" "Caution: Adding icon data may considerably increase the size of your Theme " "resource." msgstr "" +"注意: アイコンデータを追加するとテーマ リソースのサイズが大幅に増加します。" #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8708,27 +8731,24 @@ msgid "Expand types." msgstr "すべて展開" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select all Theme items." -msgstr "テンプレートファイルを選択" +msgstr "すべてのテーマ アイテムを選択する。" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select With Data" -msgstr "点を選択" +msgstr "データ付きで選択" #: editor/plugins/theme_editor_plugin.cpp msgid "Select all Theme items with item data." -msgstr "" +msgstr "すべてのテーマ アイテムを、アイテムのデータ付きで選択する。" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Deselect All" -msgstr "すべて選択" +msgstr "すべて選択解除" #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all Theme items." -msgstr "" +msgstr "すべてのテーマ アイテムの選択を解除する。" #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8749,34 +8769,28 @@ msgid "" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Color Items" -msgstr "すべてのアイテムを除去" +msgstr "すべてのカラーアイテムを除去" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Item" -msgstr "アイテムを除去" +msgstr "アイテム名を変更" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Constant Items" -msgstr "すべてのアイテムを除去" +msgstr "すべての定数アイテムを除去" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Font Items" -msgstr "すべてのアイテムを除去" +msgstr "すべてのフォントアイテムを除去" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Icon Items" -msgstr "すべてのアイテムを除去" +msgstr "すべてのアイコンアイテムを除去" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All StyleBox Items" -msgstr "すべてのアイテムを除去" +msgstr "すべての StyleBox アイテムを除去" #: editor/plugins/theme_editor_plugin.cpp msgid "" @@ -8785,161 +8799,132 @@ msgid "" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Color Item" -msgstr "クラスアイテム追加" +msgstr "カラーアイテムの追加" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Constant Item" -msgstr "クラスアイテム追加" +msgstr "定数アイテムの追加" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Font Item" -msgstr "アイテムを追加" +msgstr "フォントアイテムの追加" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Icon Item" -msgstr "アイテムを追加" +msgstr "アイコンアイテムの追加" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Stylebox Item" -msgstr "すべてのアイテムを追加" +msgstr "StyleBox アイテムの追加" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Color Item" -msgstr "クラスアイテム削除" +msgstr "カラーアイテム名の変更" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Constant Item" -msgstr "クラスアイテム削除" +msgstr "定数アイテム名の変更" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Font Item" -msgstr "ノードの名前を変更" +msgstr "フォントアイテム名の変更" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Icon Item" -msgstr "ノードの名前を変更" +msgstr "アイコンアイテム名の変更" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Stylebox Item" -msgstr "選択したアイテムを取り除く" +msgstr "StyleBox アイテム名の変更" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Invalid file, not a Theme resource." -msgstr "無効なファイルです。オーディオバスのレイアウトではありません。" +msgstr "無効なファイルです。テーマ リソースではありません。" #: editor/plugins/theme_editor_plugin.cpp msgid "Invalid file, same as the edited Theme resource." msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Manage Theme Items" -msgstr "テンプレートの管理" +msgstr "テーマ アイテムの管理" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Edit Items" -msgstr "編集可能なアイテム" +msgstr "アイテムを編集" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Types:" msgstr "型:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Type:" -msgstr "型:" +msgstr "型を追加:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Item:" -msgstr "アイテムを追加" +msgstr "アイテムを追加:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add StyleBox Item" -msgstr "すべてのアイテムを追加" +msgstr "StyleBox アイテムの追加" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove Items:" -msgstr "アイテムを除去" +msgstr "アイテムを除去:" #: editor/plugins/theme_editor_plugin.cpp msgid "Remove Class Items" msgstr "クラスアイテム削除" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove Custom Items" -msgstr "クラスアイテム削除" +msgstr "" #: editor/plugins/theme_editor_plugin.cpp msgid "Remove All Items" msgstr "すべてのアイテムを除去" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Theme Item" -msgstr "GUIテーマのアイテム" +msgstr "テーマ アイテムを追加" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Old Name:" -msgstr "ノード名:" +msgstr "旧名:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Import Items" -msgstr "テーマのインポート" +msgstr "アイテムのインポート" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Default Theme" -msgstr "デフォルト" +msgstr "デフォルトのテーマ" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Editor Theme" -msgstr "テーマを編集" +msgstr "エディターのテーマ" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select Another Theme Resource:" -msgstr "リソースを削除" +msgstr "他のテーマリソースの選択:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Another Theme" -msgstr "テーマのインポート" +msgstr "他のテーマ" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Confirm Item Rename" -msgstr "Anim トラック名の変更" +msgstr "アイテム名変更の確認" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Cancel Item Rename" -msgstr "名前の一括変更" +msgstr "アイテム名変更をキャンセル" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Override Item" -msgstr "上書き" +msgstr "アイテムを上書き" #: editor/plugins/theme_editor_plugin.cpp msgid "Unpin this StyleBox as a main style." @@ -8967,51 +8952,44 @@ msgid "Node Types:" msgstr "ノードタイプ" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Show Default" -msgstr "デフォルトを読込む" +msgstr "デフォルトの表示" #: editor/plugins/theme_editor_plugin.cpp msgid "Show default type items alongside items that have been overridden." msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Override All" -msgstr "上書き" +msgstr "すべて上書き" #: editor/plugins/theme_editor_plugin.cpp msgid "Override all default type items." msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Theme:" -msgstr "テーマ" +msgstr "テーマ:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Manage Items..." -msgstr "エクスポートテンプレートの管理..." +msgstr "アイテムを管理..." #: editor/plugins/theme_editor_plugin.cpp msgid "Add, remove, organize and import Theme items." -msgstr "" +msgstr "テーマアイテムの追加、削除、整理、インポートをする。" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Preview" -msgstr "プレビュー" +msgstr "プレビューを追加" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Default Preview" -msgstr "プレビューを更新" +msgstr "デフォルトのプレビュー" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select UI Scene:" -msgstr "ソースメッシュを選択:" +msgstr "UIシーンの選択:" #: editor/plugins/theme_editor_preview.cpp msgid "" @@ -9025,7 +9003,7 @@ msgstr "切り替えボタン" #: editor/plugins/theme_editor_preview.cpp msgid "Disabled Button" -msgstr "ボタンを無効にする" +msgstr "無効なボタン" #: editor/plugins/theme_editor_preview.cpp msgid "Item" @@ -9070,15 +9048,15 @@ msgstr "サブアイテム 2" #: editor/plugins/theme_editor_preview.cpp msgid "Has" -msgstr "含んでいる" +msgstr "Has" #: editor/plugins/theme_editor_preview.cpp msgid "Many" -msgstr "多くの" +msgstr "Many" #: editor/plugins/theme_editor_preview.cpp msgid "Disabled LineEdit" -msgstr "ライン編集を無効にする" +msgstr "無効な LineEdit" #: editor/plugins/theme_editor_preview.cpp msgid "Tab 1" @@ -9110,12 +9088,11 @@ msgstr "" #: editor/plugins/theme_editor_preview.cpp msgid "Invalid PackedScene resource, must have a Control node at its root." -msgstr "" +msgstr "無効な PackedScene リソースです。ルートには Control ノードが必要です。" #: editor/plugins/theme_editor_preview.cpp -#, fuzzy msgid "Invalid file, not a PackedScene resource." -msgstr "無効なファイルです。オーディオバスのレイアウトではありません。" +msgstr "無効なファイルです。PackedScene のリソースではありません。" #: editor/plugins/theme_editor_preview.cpp msgid "Reload the scene to reflect its most actual state." @@ -9189,16 +9166,16 @@ msgid "" "Shift+LMB: Line Draw\n" "Shift+Command+LMB: Rectangle Paint" msgstr "" -"Shift+左マウスボタン: 直線に描く\n" -"Shift+Command+左マウスボタン: 長方形ペイント" +"Shift+左クリック: 直線に描く\n" +"Shift+Command+左クリック: 長方形ペイント" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" "Shift+LMB: Line Draw\n" "Shift+Ctrl+LMB: Rectangle Paint" msgstr "" -"Shift+左マウスボタン: 直線に描く\n" -"Shift+Ctrl+左マウスボタン: 長方形ペイント" +"Shift+左クリック: 直線に描く\n" +"Shift+Ctrl+左クリック: 長方形ペイント" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" @@ -9386,7 +9363,7 @@ msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "" -"選択したテクスチャを除去しますか? これを使用しているすべてのタイルは除去され" +"選択したテクスチャを除去しますか? これを使用しているすべてのタイルは除去され" "ます。" #: editor/plugins/tile_set_editor_plugin.cpp @@ -9578,7 +9555,7 @@ msgstr "ステージに追加されているファイルがありません" #: editor/plugins/version_control_editor_plugin.cpp msgid "Commit" -msgstr "委託" +msgstr "コミット" #: editor/plugins/version_control_editor_plugin.cpp msgid "VCS Addon is not initialized" @@ -9718,7 +9695,7 @@ msgstr "入力デフォルトポートの設定" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add Node to Visual Shader" -msgstr "ビジュアルシェーダにノードを追加" +msgstr "ビジュアルシェーダーにノードを追加" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Node(s) Moved" @@ -9739,7 +9716,7 @@ msgstr "ノードを削除" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Visual Shader Input Type Changed" -msgstr "ビジュアルシェーダの入力タイプが変更されました" +msgstr "ビジュアルシェーダーの入力タイプが変更されました" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "UniformRef Name Changed" @@ -9879,7 +9856,7 @@ msgstr "それ以下(<=)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Not Equal (!=)" -msgstr "等しくない(!=)" +msgstr "等しくない (!=)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9926,7 +9903,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for fragment and light shader modes." -msgstr "フラグメントモードとライトシェーダモードの '%s' 入力パラメーター。" +msgstr "フラグメントモードとライトシェーダーモードの '%s' 入力パラメーター。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for fragment shader mode." @@ -9938,7 +9915,7 @@ msgstr "ライトシェーダーモードの '%s' 入力パラメータ。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for vertex shader mode." -msgstr "頂点シェーダモードの '%s' 入力パラメータ。" +msgstr "頂点シェーダーモードの '%s' 入力パラメータ。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for vertex and fragment shader mode." @@ -10511,13 +10488,12 @@ msgid "VisualShader" msgstr "VisualShader" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Edit Visual Property:" -msgstr "ビジュアルプロパティを編集" +msgstr "ビジュアルプロパティを編集:" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Visual Shader Mode Changed" -msgstr "ビジュアルシェーダモードが変更されました" +msgstr "ビジュアルシェーダーモードが変更されました" #: editor/project_export.cpp msgid "Runnable" @@ -10525,7 +10501,7 @@ msgstr "実行可能" #: editor/project_export.cpp msgid "Delete preset '%s'?" -msgstr "プリセット '%s' を削除しますか?" +msgstr "プリセット '%s' を削除しますか?" #: editor/project_export.cpp msgid "" @@ -10615,7 +10591,7 @@ msgid "" "(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "リソース以外のファイル/フォルダをエクスポートするためのフィルタ\n" -"(コンマで区切る、 例: *.json,*.txt,docs/*)" +"(コンマ区切り、 例: *.json, *.txt, docs/*)" #: editor/project_export.cpp msgid "" @@ -10623,7 +10599,7 @@ msgid "" "(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "プロジェクトからファイル/フォルダを除外するフィルタ\n" -"(コンマで区切る、 例: *.json,*.txt,docs/*)" +"(コンマ区切り、 例: *.json, *.txt, docs/*)" #: editor/project_export.cpp msgid "Features" @@ -10642,9 +10618,8 @@ msgid "Script" msgstr "スクリプト" #: editor/project_export.cpp -#, fuzzy msgid "GDScript Export Mode:" -msgstr "スクリプトのエクスポートモード:" +msgstr "GDScript のエクスポートモード:" #: editor/project_export.cpp msgid "Text" @@ -10652,21 +10627,19 @@ msgstr "テキスト" #: editor/project_export.cpp msgid "Compiled Bytecode (Faster Loading)" -msgstr "" +msgstr "コンパイルされたバイトコード (より高速なローディング)" #: editor/project_export.cpp msgid "Encrypted (Provide Key Below)" msgstr "暗号化(下にキーを入力)" #: editor/project_export.cpp -#, fuzzy msgid "Invalid Encryption Key (must be 64 hexadecimal characters long)" -msgstr "無効な暗号化キー(64文字である必要があります)" +msgstr "無効な暗号化キー (16進数で64文字である必要があります)" #: editor/project_export.cpp -#, fuzzy msgid "GDScript Encryption Key (256-bits as hexadecimal):" -msgstr "スクリプト暗号化キー(16進数で256ビット):" +msgstr "GDScript 暗号化キー (16進数で256ビット):" #: editor/project_export.cpp msgid "Export PCK/Zip" @@ -10741,7 +10714,6 @@ msgid "Imported Project" msgstr "インポートされたプロジェクト" #: editor/project_manager.cpp -#, fuzzy msgid "Invalid project name." msgstr "無効なプロジェクト名です。" @@ -10787,7 +10759,7 @@ msgstr "次のファイルをパッケージから抽出できませんでした #: editor/project_manager.cpp msgid "Package installed successfully!" -msgstr "パッケージのインストールに成功しました!" +msgstr "パッケージのインストールに成功しました!" #: editor/project_manager.cpp msgid "Rename Project" @@ -10892,7 +10864,7 @@ msgstr "次の場所のプロジェクトを開けません '%s'。" #: editor/project_manager.cpp msgid "Are you sure to open more than one project?" -msgstr "複数のプロジェクトを開いてもよろしいですか?" +msgstr "複数のプロジェクトを開いてもよろしいですか?" #: editor/project_manager.cpp msgid "" @@ -10930,7 +10902,7 @@ msgstr "" "\n" "%s\n" "\n" -"変換しますか?\n" +"変換しますか?\n" "警告: プロジェクトは旧バージョンのエンジンで開くことができなくなります。" #: editor/project_manager.cpp @@ -10961,24 +10933,22 @@ msgstr "" #: editor/project_manager.cpp msgid "Are you sure to run %d projects at once?" -msgstr "%d個のプロジェクトを同時に実行してもよろしいですか?" +msgstr "%d個のプロジェクトを同時に実行してもよろしいですか?" #: editor/project_manager.cpp -#, fuzzy msgid "Remove %d projects from the list?" -msgstr "一覧からデバイスを選択" +msgstr "リストから %d 個のプロジェクトを除去しますか?" #: editor/project_manager.cpp -#, fuzzy msgid "Remove this project from the list?" -msgstr "一覧からデバイスを選択" +msgstr "このプロジェクトをリストから除去しますか?" #: editor/project_manager.cpp msgid "" "Remove all missing projects from the list?\n" "The project folders' contents won't be modified." msgstr "" -"見つからないすべてのプロジェクトを一覧から削除しますか?\n" +"見つからないすべてのプロジェクトを一覧から削除しますか?\n" "プロジェクトフォルダの内容は変更されません。" #: editor/project_manager.cpp @@ -10995,7 +10965,7 @@ msgid "" "Are you sure to scan %s folders for existing Godot projects?\n" "This could take a while." msgstr "" -"既存のGodotプロジェクトの%sフォルダをスキャンしますか?\n" +"既存のGodotプロジェクトの%sフォルダをスキャンしますか?\n" "これにはしばらく時間がかかります。" #. TRANSLATORS: This refers to the application where users manage their Godot projects. @@ -11004,9 +10974,8 @@ msgid "Project Manager" msgstr "プロジェクトマネージャー" #: editor/project_manager.cpp -#, fuzzy msgid "Local Projects" -msgstr "プロジェクト" +msgstr "ローカル プロジェクト" #: editor/project_manager.cpp msgid "Loading, please wait..." @@ -11017,23 +10986,20 @@ msgid "Last Modified" msgstr "最終更新" #: editor/project_manager.cpp -#, fuzzy msgid "Edit Project" -msgstr "プロジェクトのエクスポート" +msgstr "プロジェクトを編集" #: editor/project_manager.cpp -#, fuzzy msgid "Run Project" -msgstr "プロジェクト名の変更" +msgstr "プロジェクトを実行" #: editor/project_manager.cpp msgid "Scan" msgstr "スキャン" #: editor/project_manager.cpp -#, fuzzy msgid "Scan Projects" -msgstr "プロジェクト" +msgstr "プロジェクトをスキャン" #: editor/project_manager.cpp msgid "Select a Folder to Scan" @@ -11044,14 +11010,12 @@ msgid "New Project" msgstr "新規プロジェクト" #: editor/project_manager.cpp -#, fuzzy msgid "Import Project" -msgstr "インポートされたプロジェクト" +msgstr "プロジェクトをインポート" #: editor/project_manager.cpp -#, fuzzy msgid "Remove Project" -msgstr "プロジェクト名の変更" +msgstr "プロジェクトを除去" #: editor/project_manager.cpp msgid "Remove Missing" @@ -11062,9 +11026,8 @@ msgid "About" msgstr "概要" #: editor/project_manager.cpp -#, fuzzy msgid "Asset Library Projects" -msgstr "アセットライブラリ" +msgstr "アセットライブラリのプロジェクト" #: editor/project_manager.cpp msgid "Restart Now" @@ -11076,7 +11039,7 @@ msgstr "すべて除去" #: editor/project_manager.cpp msgid "Also delete project contents (no undo!)" -msgstr "" +msgstr "プロジェクトの内容も削除されます (もとに戻せません!)" #: editor/project_manager.cpp msgid "Can't run project" @@ -11091,19 +11054,17 @@ msgstr "" "アセットライブラリで公式のサンプルプロジェクトをチェックしますか?" #: editor/project_manager.cpp -#, fuzzy msgid "Filter projects" -msgstr "フィルタプロパティ" +msgstr "プロジェクトのフィルタ" #: editor/project_manager.cpp -#, fuzzy msgid "" "This field filters projects by name and last path component.\n" "To filter projects by name and full path, the query must contain at least " "one `/` character." msgstr "" -"検索ボックスでは、プロジェクトは名前およびパスの最後の部分でフィルターされま" -"す。\n" +"このフィールドは、プロジェクト名とパスの最後の部分でプロジェクトをフィルタリ" +"ングします。\n" "プロジェクト名および完全パスでフィルターするには、クエリには `/` 文字が少なく" "とも1つ必要です。" @@ -11261,7 +11222,7 @@ msgstr "グローバルプロパティを追加" #: editor/project_settings_editor.cpp msgid "Select a setting item first!" -msgstr "設定項目を選択してください!" +msgstr "設定項目を選択してください!" #: editor/project_settings_editor.cpp msgid "No property '%s' exists." @@ -11304,9 +11265,8 @@ msgid "Override for Feature" msgstr "機能のオーバーライド" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Add %d Translations" -msgstr "翻訳を追加" +msgstr "%d 個の翻訳を追加" #: editor/project_settings_editor.cpp msgid "Remove Translation" @@ -11439,9 +11399,8 @@ msgid "Plugins" msgstr "プラグイン" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Import Defaults" -msgstr "デフォルトを読込む" +msgstr "インポートの既定値" #: editor/property_editor.cpp msgid "Preset..." @@ -11477,7 +11436,7 @@ msgstr "ノードを選択" #: editor/property_editor.cpp msgid "Error loading file: Not a resource!" -msgstr "ファイル読み込みエラー: リソースではありません!" +msgstr "ファイル読み込みエラー: リソースではありません!" #: editor/property_editor.cpp msgid "Pick a Node" @@ -11750,7 +11709,7 @@ msgstr "%d ノードを削除しますか?" #: editor/scene_tree_dock.cpp msgid "Delete the root node \"%s\"?" -msgstr "ルートノード \"%s\" を削除しますか?" +msgstr "ルートノード \"%s\" を削除しますか?" #: editor/scene_tree_dock.cpp msgid "Delete node \"%s\" and its children?" @@ -11764,12 +11723,16 @@ msgstr "\"%s\" ノードを削除しますか?" msgid "" "Saving the branch as a scene requires having a scene open in the editor." msgstr "" +"ブランチをシーンとして保存するには、エディタでシーンを開いている必要がありま" +"す。" #: editor/scene_tree_dock.cpp msgid "" "Saving the branch as a scene requires selecting only one node, but you have " "selected %d nodes." msgstr "" +"ブランチをシーンとして保存するには、1つだけノードを選択する必要がありま" +"す。%d 個のノードが選択されています。" #: editor/scene_tree_dock.cpp msgid "" @@ -11836,11 +11799,11 @@ msgstr "その他のノード" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes from a foreign scene!" -msgstr "別のシーンからノードを操作することはできません!" +msgstr "別のシーンからノードを操作することはできません!" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes the current scene inherits from!" -msgstr "現在のシーンが継承しているノードを操作することはできません!" +msgstr "現在のシーンが継承しているノードを操作することはできません!" #: editor/scene_tree_dock.cpp msgid "This operation can't be done on instanced scenes." @@ -11977,7 +11940,7 @@ msgstr "ローカル" #: editor/scene_tree_dock.cpp msgid "Clear Inheritance? (No Undo!)" -msgstr "継承をクリアしますか? (元に戻せません!)" +msgstr "継承をクリアしますか? (元に戻せません!)" #: editor/scene_tree_editor.cpp msgid "Toggle Visible" @@ -12041,7 +12004,7 @@ msgid "" "Click to make selectable." msgstr "" "子を選択できません。\n" -"クリックして選択可能にしてください。" +"クリックで選択可能にする。" #: editor/scene_tree_editor.cpp msgid "Toggle Visibility" @@ -12069,7 +12032,7 @@ msgstr "シーンツリー(ノード):" #: editor/scene_tree_editor.cpp msgid "Node Configuration Warning!" -msgstr "ノードの設定に関する警告!" +msgstr "ノードの設定に関する警告!" #: editor/scene_tree_editor.cpp msgid "Select a Node" @@ -12188,6 +12151,7 @@ msgid "" "Warning: Having the script name be the same as a built-in type is usually " "not desired." msgstr "" +"警告: スクリプト名を組み込み型と同じにすることは、通常は望ましくありません。" #: editor/script_create_dialog.cpp msgid "Class Name:" @@ -12259,7 +12223,7 @@ msgstr "エラーをコピー" #: editor/script_editor_debugger.cpp msgid "Open C++ Source on GitHub" -msgstr "" +msgstr "C++のソースをGitHubで開く" #: editor/script_editor_debugger.cpp msgid "Video RAM" @@ -12438,14 +12402,22 @@ msgid "Change Ray Shape Length" msgstr "レイシェイプの長さを変更" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Set Room Point Position" -msgstr "カーブポイントの位置を設定" +msgstr "Room ポイントの位置を設定" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Set Portal Point Position" -msgstr "カーブポイントの位置を設定" +msgstr "Portal ポイントの位置を設定" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Radius" +msgstr "円柱シェイプの半径を変更" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr "曲線のIn-Controlの位置を指定" #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" @@ -12521,7 +12493,7 @@ msgstr "GDNative" #: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" -msgstr "ステップ引数はゼロです!" +msgstr "ステップ引数はゼロです!" #: modules/gdscript/gdscript_functions.cpp msgid "Not a script with an instance" @@ -12556,14 +12528,12 @@ msgid "Object can't provide a length." msgstr "オブジェクトに長さがありません." #: modules/gltf/editor_scene_exporter_gltf_plugin.cpp -#, fuzzy msgid "Export Mesh GLTF2" -msgstr "メッシュライブラリのエクスポート" +msgstr "メッシュの GLTF2 エクスポート" #: modules/gltf/editor_scene_exporter_gltf_plugin.cpp -#, fuzzy msgid "Export GLTF..." -msgstr "エクスポート..." +msgstr "GLTF をエクスポート..." #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" @@ -12606,9 +12576,8 @@ msgid "GridMap Paint" msgstr "GridMap ペイント" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Selection" -msgstr "GridMap 選択範囲を埋める" +msgstr "GridMap の選択" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Grid Map" @@ -12725,14 +12694,18 @@ msgid "Post processing" msgstr "後処理" #: modules/lightmapper_cpu/lightmapper_cpu.cpp -#, fuzzy msgid "Plotting lightmaps" -msgstr "光源を描画中:" +msgstr "ライトマップを描画中:" #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "クラス名を予約キーワードにすることはできません" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "選択部の塗り潰し" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "内部例外スタックトレースの終了" @@ -12795,7 +12768,7 @@ msgstr "ジオメトリを解析しています..." #: modules/recast/navigation_mesh_generator.cpp msgid "Done!" -msgstr "完了!" +msgstr "完了!" #: modules/visual_script/visual_script.cpp msgid "" @@ -12803,7 +12776,7 @@ msgid "" "properly!" msgstr "" "作業メモリなしでノードが生成されました。正しく生成する方法については、ドキュ" -"メントを参照してください!" +"メントを参照してください!" #: modules/visual_script/visual_script.cpp msgid "" @@ -12828,7 +12801,7 @@ msgstr "ノードは無効なシークエンス出力を返しました: " msgid "Found sequence bit but not the node in the stack, report bug!" msgstr "" "スタックにシークエンスビットを見つけましたが、ノードではありません。バグ報告" -"を!" +"を!" #: modules/visual_script/visual_script.cpp msgid "Stack overflow with stack depth: " @@ -12863,14 +12836,12 @@ msgid "Add Output Port" msgstr "出力ポートを追加" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Port Type" -msgstr "型を変更" +msgstr "ポートの型を変更" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Port Name" -msgstr "入力ポート名の変更" +msgstr "ポート名を変更" #: modules/visual_script/visual_script_editor.cpp msgid "Override an existing built-in function." @@ -12988,7 +12959,6 @@ msgid "Add Preload Node" msgstr "プリロードノードを追加" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Add Node(s)" msgstr "ノードを追加" @@ -13175,7 +13145,7 @@ msgstr "インデックスプロパティ名が無効です。" #: modules/visual_script/visual_script_func_nodes.cpp msgid "Base object is not a Node!" -msgstr "ベースオブジェクトはノードではありません!" +msgstr "ベースオブジェクトはノードではありません!" #: modules/visual_script/visual_script_func_nodes.cpp msgid "Path does not lead Node!" @@ -13221,73 +13191,67 @@ msgstr "VisualScriptを検索" msgid "Get %s" msgstr "%s を取得" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "パッケージ名がありません。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "パッケージセグメントの長さは0以外でなければなりません。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "文字 '%s' はAndroidアプリケーション パッケージ名に使用できません。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "数字をパッケージセグメントの先頭に使用できません。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "文字 '%s' はパッケージ セグメントの先頭に使用できません。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "パッケージには一つ以上の区切り文字 '.' が必要です。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "一覧からデバイスを選択" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" -msgstr "" +msgstr "%s で実行中" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Exporting APK..." -msgstr "すべてエクスポート" +msgstr "APKをエクスポート中..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Uninstalling..." -msgstr "アンインストール" +msgstr "アンインストール中..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Installing to device, please wait..." -msgstr "読み込み中、しばらくお待ちください..." +msgstr "デバイスにインストール中、しばらくお待ちください..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" -msgstr "サブプロセスを開始できませんでした!" +msgstr "デバイスにインストールできませんでした: %s" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Running on device..." -msgstr "カスタムスクリプトの実行中..." +msgstr "デバイスで実行中..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Could not execute on device." -msgstr "フォルダを作成できませんでした。" +msgstr "デバイスで実行できませんでした。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "'apksigner' ツールが見つかりません。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -13295,63 +13259,63 @@ msgstr "" "Android ビルド テンプレートがプロジェクトにインストールされていません。[プロ" "ジェクト] メニューからインストールします。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "デバッグキーストアがエディタ設定にもプリセットにも設定されていません。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "エクスポート設定にてリリース キーストアが誤って設定されています。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "エディタ設定でAndroid SDKパスの指定が必要です。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "エディタ設定のAndroid SDKパスが無効です。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "'platform-tools' ディレクトリがありません!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "Android SDK platform-toolsのadbコマンドが見つかりません。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "エディタ設定で指定されたAndroid SDKのディレクトリを確認してください。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "'build-tools' ディレクトリがありません!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "Android SDK build-toolsのapksignerコマンドが見つかりません。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "APK expansion の公開鍵が無効です。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "無効なパッケージ名:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" @@ -13359,99 +13323,82 @@ msgstr "" "「android/modules」に含まれる「GodotPaymentV3」モジュールのプロジェクト設定が" "無効です (Godot 3.2.2 にて変更)。\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" "プラグインを利用するには「Use Custom Build (カスタムビルドを使用する)」が有効" "になっている必要があります。" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" -"\"Degrees Of Freedom\" は \"Xr Mode\" が \"Oculus Mobile VR\" の場合にのみ有" -"効になります。" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" "\"Hand Tracking\" は \"Xr Mode\" が \"Oculus Mobile VR\" の場合にのみ有効にな" "ります。" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" -"\"Focus Awareness\" は \"Xr Mode\" が \"Oculus Mobile VR\" の場合にのみ有効に" -"なります。" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" "\"Export AAB\" は \"Use Custom Build\" が有効である場合にのみ有効になります。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " "directory.\n" "The resulting %s is unsigned." msgstr "" +"'apksigner' が見つかりませんでした。\n" +"このコマンドが Android SDK build-tools ディレクトリにあるか確認してくださ" +"い。\n" +"%s は署名されませんでした。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." -msgstr "" +msgstr "デバッグ %s に署名中..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." -msgstr "" -"ファイルのスキャン中\n" -"しばらくお待ち下さい..." +msgstr "リリース %s に署名中..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." -msgstr "エクスポート用のテンプレートを開けませんでした:" +msgstr "キーストアが見つからないため、エクスポートできません。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" -msgstr "" +msgstr "'apksigner' がエラー #%d で終了しました" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." -msgstr "%s を追加中..." +msgstr "%s を検証中..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." -msgstr "" +msgstr "'apksigner' による %s の検証に失敗しました。" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" -msgstr "すべてエクスポート" +msgstr "Android用にエクスポート中" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" "無効なファイル名です! Android App Bundle には拡張子 *.aab が必要です。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "APK Expansion は Android App Bundle とは互換性がありません。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "無効なファイル名です! Android APKには拡張子 *.apk が必要です。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" -msgstr "" +msgstr "サポートされていないエクスポートフォーマットです!\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." @@ -13459,7 +13406,7 @@ msgstr "" "カスタムビルドされたテンプレートからビルドしようとしましたが、そのバージョン" "情報が存在しません。 「プロジェクト」メニューから再インストールしてください。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13472,26 +13419,25 @@ msgstr "" "「プロジェクト 」メニューからAndroidビルドテンプレートを再インストールしてく" "ださい。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" -msgstr "project.godotをプロジェクトパスに生成できませんでした" +msgstr "" +"プロジェクトファイルをgladleプロジェクトにエクスポートできませんでした\n" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" -msgstr "ファイルを書き込めませんでした:" +msgstr "拡張パッケージファイルを書き込めませんでした!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "Androidプロジェクトの構築(gradle)" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." @@ -13500,11 +13446,11 @@ msgstr "" "また、Androidビルドについてのドキュメントは docs.godotengine.org をご覧くださ" "い。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "出力結果の移動中" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." @@ -13512,24 +13458,23 @@ msgstr "" "エクスポートファイルのコピーと名前の変更ができません。出力結果をみるには" "gradleのプロジェクトディレクトリを確認してください。" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Package not found: %s" -msgstr "見つからないアニメーション: '%s'" +msgstr "見つからないパッケージ: %s" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." -msgstr "輪郭を作成しています..." +msgstr "APK を作成しています..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" -msgstr "エクスポート用のテンプレートを開けませんでした:" +msgstr "" +"エクスポートするテンプレートAPKが見つかりませんでした:\n" +"%s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13537,21 +13482,19 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Adding files..." -msgstr "%s を追加中..." +msgstr "ファイルを追加中..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Could not export project files" -msgstr "ファイルを書き込めませんでした:" +msgstr "プロジェクトファイルをエクスポートできませんでした" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "APKを最適化..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13600,45 +13543,40 @@ msgid "Could not write file:" msgstr "ファイルを書き込めませんでした:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not read file:" -msgstr "ファイルを書き込めませんでした:" +msgstr "ファイルを読み込めませんでした:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not read HTML shell:" -msgstr "カスタムHTMLシェルを読み込めませんでした:" +msgstr "HTMLシェルを読み込めませんでした:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not create HTTP server directory:" -msgstr "フォルダを作成できませんでした。" +msgstr "HTTPサーバーのディレクトリの作成に失敗:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Error starting HTTP server:" -msgstr "シーンを保存する際にエラーが発生しました." +msgstr "HTTPサーバーの開始に失敗:" #: platform/osx/export/export.cpp -#, fuzzy msgid "Invalid bundle identifier:" -msgstr "無効な識別子:" +msgstr "無効なバンドルID:" #: platform/osx/export/export.cpp msgid "Notarization: code signing required." -msgstr "" +msgstr "Notarization: コード署名が必要です。" #: platform/osx/export/export.cpp msgid "Notarization: hardened runtime required." -msgstr "" +msgstr "Notarization: hardened runtime が必要です。" #: platform/osx/export/export.cpp msgid "Notarization: Apple ID name not specified." -msgstr "" +msgstr "Notarization: Apple ID 名が指定されていません。" #: platform/osx/export/export.cpp msgid "Notarization: Apple ID password not specified." -msgstr "" +msgstr "Notarization: Apple ID パスワードが指定されていません。" #: platform/uwp/export/export.cpp msgid "Invalid package short name." @@ -13956,16 +13894,15 @@ msgstr "ARVROriginは子ノードにARVRCameraが必要です。" #: scene/3d/baked_lightmap.cpp msgid "Finding meshes and lights" -msgstr "" +msgstr "メッシュとライトを検索中" #: scene/3d/baked_lightmap.cpp msgid "Preparing geometry (%d/%d)" msgstr "ジオメトリを解析しています (%d/%d)" #: scene/3d/baked_lightmap.cpp -#, fuzzy msgid "Preparing environment" -msgstr "環境を表示" +msgstr "環境を準備中" #: scene/3d/baked_lightmap.cpp #, fuzzy @@ -13973,9 +13910,8 @@ msgid "Generating capture" msgstr "ライトマップの生成" #: scene/3d/baked_lightmap.cpp -#, fuzzy msgid "Saving lightmaps" -msgstr "ライトマップの生成" +msgstr "ライトマップを保存中" #: scene/3d/baked_lightmap.cpp msgid "Done" @@ -14053,7 +13989,7 @@ msgstr "" #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" -msgstr "メッシュのプロット" +msgstr "メッシュを描画中" #: scene/3d/gi_probe.cpp msgid "Finishing Plot" @@ -14073,6 +14009,9 @@ msgid "" "longer has any effect.\n" "To remove this warning, disable the GIProbe's Compress property." msgstr "" +"GIProbeのCompressプロパティは既知のバグのため非推奨になり、もはや何の効果もあ" +"りません。\n" +"この警告を消すには、GIProbeのCompressプロパティを無効化してください。" #: scene/3d/light.cpp msgid "A SpotLight with an angle wider than 90 degrees cannot cast shadows." @@ -14092,6 +14031,14 @@ msgstr "" "NavigationMeshInstance は、ナビゲーションノードの子や孫である必要があります。" "これはナビゲーションデータのみ提供します。" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14159,15 +14106,15 @@ msgstr "Node A と Node B は異なる PhysicsBody でなければなりませ #: scene/3d/portal.cpp msgid "The RoomManager should not be a child or grandchild of a Portal." -msgstr "" +msgstr "RoomManager は Portal の子や孫にできません。" #: scene/3d/portal.cpp msgid "A Room should not be a child or grandchild of a Portal." -msgstr "" +msgstr "Room は Portal の子や孫にできません。" #: scene/3d/portal.cpp msgid "A RoomGroup should not be a child or grandchild of a Portal." -msgstr "" +msgstr "RoomGroup は Portal の子や孫にできません。" #: scene/3d/remote_transform.cpp msgid "" @@ -14179,15 +14126,15 @@ msgstr "" #: scene/3d/room.cpp msgid "A Room cannot have another Room as a child or grandchild." -msgstr "" +msgstr "Room は 他の Room を子や孫に持つことはできません。" #: scene/3d/room.cpp msgid "The RoomManager should not be placed inside a Room." -msgstr "" +msgstr "RoomManager は Room の中に設置できません。" #: scene/3d/room.cpp msgid "A RoomGroup should not be placed inside a Room." -msgstr "" +msgstr "RoomGroup は Room の中に設置できません。" #: scene/3d/room.cpp msgid "" @@ -14197,39 +14144,46 @@ msgstr "" #: scene/3d/room_group.cpp msgid "The RoomManager should not be placed inside a RoomGroup." -msgstr "" +msgstr "RoomManager は RoomGroup の中に設置できません。" #: scene/3d/room_manager.cpp msgid "The RoomList has not been assigned." -msgstr "" +msgstr "RoomList が割り当てられていません。" #: scene/3d/room_manager.cpp msgid "The RoomList node should be a Spatial (or derived from Spatial)." msgstr "" +"RoomList ノードは Spatial (または Spatial の派生) でなければなりません。" #: scene/3d/room_manager.cpp msgid "" "Portal Depth Limit is set to Zero.\n" "Only the Room that the Camera is in will render." msgstr "" +"Portal Depth Limit が ゼロ に設定されています。\n" +"カメラが内部にある Room のみ描画されます。" #: scene/3d/room_manager.cpp msgid "There should only be one RoomManager in the SceneTree." -msgstr "" +msgstr "SceneTree には RoomManager が1つだけ存在できます。" #: scene/3d/room_manager.cpp msgid "" "RoomList path is invalid.\n" "Please check the RoomList branch has been assigned in the RoomManager." msgstr "" +"RoomList パスが無効です。\n" +"RoomList ブランチが RoomManager に割り当てられているか確認してください。" #: scene/3d/room_manager.cpp msgid "RoomList contains no Rooms, aborting." -msgstr "" +msgstr "RoomList に Room が含まれていないため、中断します。" #: scene/3d/room_manager.cpp msgid "Misnamed nodes detected, check output log for details. Aborting." msgstr "" +"誤ったノード名が検出されました。詳細は出力ログを確認してください。中止しま" +"す。" #: scene/3d/room_manager.cpp msgid "Portal link room not found, check output log for details." @@ -14246,6 +14200,9 @@ msgid "" "Room overlap detected, cameras may work incorrectly in overlapping area.\n" "Check output log for details." msgstr "" +"Roomの重なりが検出されました。重なったエリアでカメラが正しく動作しない可能性" +"があります。\n" +"詳細は出力ログを確認してください。" #: scene/3d/room_manager.cpp msgid "" @@ -14316,7 +14273,7 @@ msgstr "見つからないアニメーション: '%s'" #: scene/animation/animation_player.cpp msgid "Anim Apply Reset" -msgstr "" +msgstr "アニメーションをリセット" #: scene/animation/animation_tree.cpp msgid "In node '%s', invalid animation: '%s'." @@ -14359,8 +14316,8 @@ msgid "" "RMB: Remove preset" msgstr "" "色: #%s\n" -"左マウスボタン: 色をセット\n" -"右マウスボタン: プリセットの除去" +"左クリック: 色をセット\n" +"右クリック: プリセットの除去" #: scene/gui/color_picker.cpp msgid "Pick a color from the editor window." @@ -14404,7 +14361,7 @@ msgstr "" #: scene/gui/dialogs.cpp msgid "Alert!" -msgstr "警告!" +msgstr "警告!" #: scene/gui/dialogs.cpp msgid "Please Confirm..." @@ -14418,6 +14375,14 @@ msgstr "有効な拡張子を使用する必要があります。" msgid "Enable grid minimap." msgstr "グリッドミニマップを有効にする。" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14470,6 +14435,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "レンダーするにはビューポートのサイズが 0 より大きい必要があります。" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " @@ -14489,21 +14458,24 @@ msgid "Invalid comparison function for that type." msgstr "そのタイプの比較関数は無効です。" #: servers/visual/shader_language.cpp -#, fuzzy msgid "Varying may not be assigned in the '%s' function." -msgstr "Varying変数は頂点関数にのみ割り当てることができます。" +msgstr "Varying は '%s' 関数で割り当てられない可能性があります。" #: servers/visual/shader_language.cpp msgid "" "Varyings which assigned in 'vertex' function may not be reassigned in " "'fragment' or 'light'." msgstr "" +"'vertex' 関数で割り当てた Varying を 'fragment' と 'light' で再び割り当てるこ" +"とはできません。" #: servers/visual/shader_language.cpp msgid "" "Varyings which assigned in 'fragment' function may not be reassigned in " "'vertex' or 'light'." msgstr "" +"'fragment' 関数で割り当てた Varying を 'vertex' と 'light' で再び割り当てるこ" +"とはできません。" #: servers/visual/shader_language.cpp msgid "Fragment-stage varying could not been accessed in custom function!" @@ -14521,6 +14493,41 @@ msgstr "uniform への割り当て。" msgid "Constants cannot be modified." msgstr "定数は変更できません。" +#~ msgid "Make Rest Pose (From Bones)" +#~ msgstr "レスト・ポーズの作成(ボーンから)" + +#~ msgid "Bottom" +#~ msgstr "下面" + +#~ msgid "Left" +#~ msgstr "左側面" + +#~ msgid "Right" +#~ msgstr "右側面" + +#~ msgid "Front" +#~ msgstr "前面" + +#~ msgid "Rear" +#~ msgstr "後面" + +#~ msgid "Nameless gizmo" +#~ msgstr "無名のギズモ" + +#~ msgid "" +#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile " +#~ "VR\"." +#~ msgstr "" +#~ "\"Degrees Of Freedom\" は \"Xr Mode\" が \"Oculus Mobile VR\" の場合にのみ" +#~ "有効になります。" + +#~ msgid "" +#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" +#~ "\"." +#~ msgstr "" +#~ "\"Focus Awareness\" は \"Xr Mode\" が \"Oculus Mobile VR\" の場合にのみ有" +#~ "効になります。" + #~ msgid "Package Contents:" #~ msgstr "パッケージの内容:" diff --git a/editor/translations/ka.po b/editor/translations/ka.po index 7abc89b216..5e4f5d0094 100644 --- a/editor/translations/ka.po +++ b/editor/translations/ka.po @@ -1070,7 +1070,7 @@ msgstr "" msgid "Dependencies" msgstr "დამოკიდებულებები" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "რესურსი" @@ -1719,13 +1719,13 @@ msgid "" "Enabled'." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2110,7 +2110,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "" @@ -2600,6 +2600,30 @@ msgid "Current scene not saved. Open anyway?" msgstr "" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Undo: %s" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Redo: %s" +msgstr "" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "" @@ -3233,6 +3257,11 @@ msgid "Merge With Existing" msgstr "" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "ანიმაციის გარდაქმნის ცვლილება" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "" @@ -3479,6 +3508,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "" @@ -5592,6 +5625,17 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Locked" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "მონიშვნის მოშორება" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6527,7 +6571,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7119,6 +7167,16 @@ msgstr "შექმნა" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "ანიმაციის გარდაქმნის ცვლილება" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "წაშლა" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7635,11 +7693,12 @@ msgid "Skeleton2D" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "ახალი %s შექმნა" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" +msgid "Overwrite Rest Pose" msgstr "" #: editor/plugins/skeleton_editor_plugin.cpp @@ -7667,6 +7726,60 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7777,42 +7890,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -8076,6 +8169,11 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "შექმნა" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "" @@ -8141,7 +8239,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -12195,6 +12293,14 @@ msgstr "" msgid "Set Portal Point Position" msgstr "" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Position" +msgstr "" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12480,6 +12586,11 @@ msgstr "" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "ყველა მონიშნვა" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -12966,162 +13077,151 @@ msgstr "" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Uninstalling..." msgstr "დაყენება" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Installing to device, please wait..." msgstr "ძებნა:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not execute on device." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Invalid package name:" msgstr "არასწორი ფონტის ზომა." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13129,57 +13229,57 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13187,55 +13287,55 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "ანიმაციის ხანგრძლივობა (წამებში)." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13243,20 +13343,20 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Adding files..." msgstr "საყვარლები:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13713,6 +13813,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14006,6 +14114,14 @@ msgstr "" msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14046,6 +14162,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/km.po b/editor/translations/km.po index 187307bc17..a5b6139d08 100644 --- a/editor/translations/km.po +++ b/editor/translations/km.po @@ -993,7 +993,7 @@ msgstr "" msgid "Dependencies" msgstr "" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "" @@ -1622,13 +1622,13 @@ msgid "" "Enabled'." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -1998,7 +1998,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "" @@ -2476,6 +2476,30 @@ msgid "Current scene not saved. Open anyway?" msgstr "" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Undo: %s" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Redo: %s" +msgstr "" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "" @@ -3099,6 +3123,11 @@ msgid "Merge With Existing" msgstr "" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Anim ផ្លាស់ប្តូរ Transform" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "" @@ -3339,6 +3368,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "" @@ -5379,6 +5412,16 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Locked" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Grouped" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6278,7 +6321,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -6864,6 +6911,14 @@ msgstr "ផ្លាស់ទី Bezier Points" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Occluder Set Transform" +msgstr "" + +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Center Node" +msgstr "" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7358,11 +7413,11 @@ msgid "Skeleton2D" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" +msgid "Reset to Rest Pose" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" +msgid "Overwrite Rest Pose" msgstr "" #: editor/plugins/skeleton_editor_plugin.cpp @@ -7390,6 +7445,60 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7497,42 +7606,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -7794,6 +7883,10 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Occlusion Culling" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "" @@ -7859,7 +7952,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -11759,6 +11852,14 @@ msgstr "" msgid "Set Portal Point Position" msgstr "" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Position" +msgstr "" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12039,6 +12140,10 @@ msgstr "" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Build Solution" +msgstr "" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -12505,159 +12610,148 @@ msgstr "" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Uninstalling..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Installing to device, please wait..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not execute on device." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -12665,57 +12759,57 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -12723,54 +12817,54 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package not found: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -12778,19 +12872,19 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Adding files..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13240,6 +13334,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -13529,6 +13631,14 @@ msgstr "" msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13569,6 +13679,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/ko.po b/editor/translations/ko.po index 1f24eb1b1d..c288a2b7e7 100644 --- a/editor/translations/ko.po +++ b/editor/translations/ko.po @@ -23,11 +23,12 @@ # Yungjoong Song <yungjoong.song@gmail.com>, 2020. # Henry LeRoux <henry.leroux@ocsbstudent.ca>, 2021. # Postive_ Cloud <postive12@gmail.com>, 2021. +# dewcked <dewcked@protonmail.ch>, 2021. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2021-08-12 14:48+0000\n" +"PO-Revision-Date: 2021-09-21 15:22+0000\n" "Last-Translator: Myeongjin Lee <aranet100@gmail.com>\n" "Language-Team: Korean <https://hosted.weblate.org/projects/godot-engine/" "godot/ko/>\n" @@ -36,7 +37,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.8-dev\n" +"X-Generator: Weblate 4.9-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -205,7 +206,7 @@ msgstr "애니메이션 길이 바꾸기" #: editor/animation_track_editor.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Change Animation Loop" -msgstr "애니메이션 루프 변경" +msgstr "애니메이션 루프 바꾸기" #: editor/animation_track_editor.cpp msgid "Property Track" @@ -266,7 +267,7 @@ msgstr "트랙 경로 바꾸기" #: editor/animation_track_editor.cpp msgid "Toggle this track on/off." -msgstr "이 트랙을 켬/꺼짐 여부를 전환합니다." +msgstr "이 트랙을 켜기/끄기를 토글합니다." #: editor/animation_track_editor.cpp msgid "Update Mode (How this property is set)" @@ -282,7 +283,7 @@ msgstr "루프 래핑 모드 (시작 루프와 끝을 보간)" #: editor/animation_track_editor.cpp msgid "Remove this track." -msgstr "이 트랙을 삭제합니다." +msgstr "이 트랙을 제거합니다." #: editor/animation_track_editor.cpp msgid "Time (s): " @@ -356,7 +357,7 @@ msgstr "애니메이션 루프 모드 바꾸기" #: editor/animation_track_editor.cpp msgid "Remove Anim Track" -msgstr "애니메이션 트랙 삭제" +msgstr "애니메이션 트랙 제거" #. TRANSLATORS: %s will be replaced by a phrase describing the target of track. #: editor/animation_track_editor.cpp @@ -385,13 +386,11 @@ msgstr "애니메이션 삽입" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "node '%s'" -msgstr "'%s' 열수 없음." +msgstr "노드 '%s'" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "animation" msgstr "애니메이션" @@ -403,9 +402,8 @@ msgstr "" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "property '%s'" -msgstr "'%s' 속성이 없습니다." +msgstr "속성 '%s'" #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -485,7 +483,7 @@ msgstr "메서드 트랙 키 추가" #: editor/animation_track_editor.cpp msgid "Method not found in object: " -msgstr "객체에 메서드가 없음: " +msgstr "오브젝트에 메서드가 없음: " #: editor/animation_track_editor.cpp msgid "Anim Move Keys" @@ -502,7 +500,7 @@ msgstr "트랙 붙여 넣기" #: editor/animation_track_editor.cpp msgid "Anim Scale Keys" -msgstr "애니메이션 키 크기 조절" +msgstr "애니메이션 키 스케일" #: editor/animation_track_editor.cpp msgid "" @@ -525,9 +523,9 @@ msgstr "" "이 애니메이션은 가져온 씬에 속해 있습니다. 가져온 트랙의 변경 사항은 저장되" "지 않습니다.\n" "\n" -"저장 기능을 켜려면 맞춤 트랙을 추가하고, 씬의 가져오기 설정으로 가서\n" +"저장 기능을 활성화하려면 맞춤 트랙을 추가하고, 씬의 가져오기 설정으로 가서\n" "\"Animation > Storage\" 설정을 \"Files\"로, \"Animation > Keep Custom Tracks" -"\" 설정을 켠 뒤, 다시 가져오십시오.\n" +"\" 설정을 활성화한 뒤, 다시 가져오십시오.\n" "아니면 가져오기 프리셋으로 애니메이션을 별도의 파일로 가져올 수도 있습니다." #: editor/animation_track_editor.cpp @@ -584,11 +582,11 @@ msgstr "트랙 복사" #: editor/animation_track_editor.cpp msgid "Scale Selection" -msgstr "선택 항목 배율 조절" +msgstr "선택 항목 스케일 조절" #: editor/animation_track_editor.cpp msgid "Scale From Cursor" -msgstr "커서 위치에서 배율 조절" +msgstr "커서 위치에서 스케일 조절" #: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp #: modules/gridmap/grid_map_editor_plugin.cpp @@ -612,9 +610,8 @@ msgid "Go to Previous Step" msgstr "이전 단계로 이동" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Apply Reset" -msgstr "되돌리기" +msgstr "재설정 적용" #: editor/animation_track_editor.cpp msgid "Optimize Animation" @@ -633,9 +630,8 @@ msgid "Use Bezier Curves" msgstr "베지어 곡선 사용" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Create RESET Track(s)" -msgstr "트랙 붙여 넣기" +msgstr "재설정 트랙 만들기" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" @@ -659,11 +655,11 @@ msgstr "최적화" #: editor/animation_track_editor.cpp msgid "Remove invalid keys" -msgstr "잘못된 키 삭제" +msgstr "잘못된 키 제거" #: editor/animation_track_editor.cpp msgid "Remove unresolved and empty tracks" -msgstr "해결되지 않고 빈 트랙 삭제" +msgstr "해결되지 않고 빈 트랙 제거" #: editor/animation_track_editor.cpp msgid "Clean-up all animations" @@ -679,7 +675,7 @@ msgstr "정리" #: editor/animation_track_editor.cpp msgid "Scale Ratio:" -msgstr "배율값:" +msgstr "스케일 비율:" #: editor/animation_track_editor.cpp msgid "Select Tracks to Copy" @@ -842,7 +838,7 @@ msgstr "추가" #: editor/plugins/visual_shader_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" -msgstr "삭제" +msgstr "제거" #: editor/connections_dialog.cpp msgid "Add Extra Call Argument:" @@ -937,7 +933,7 @@ msgstr "연결 변경:" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from the \"%s\" signal?" -msgstr "\"%s\" 시그널의 모든 연결을 삭제할까요?" +msgstr "\"%s\" 시그널의 모든 연결을 제거하시겠습니까?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" @@ -949,7 +945,7 @@ msgstr "시그널 필터" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" -msgstr "이 시그널의 모든 연결을 삭제할까요?" +msgstr "이 시그널의 모든 연결을 제거하시겠습니까?" #: editor/connections_dialog.cpp msgid "Disconnect All" @@ -960,7 +956,6 @@ msgid "Edit..." msgstr "편집..." #: editor/connections_dialog.cpp -#, fuzzy msgid "Go to Method" msgstr "메서드로 이동" @@ -1026,7 +1021,7 @@ msgid "" "Scene '%s' is currently being edited.\n" "Changes will only take effect when reloaded." msgstr "" -"씬 '%s'이(가) 현재 편집중입니다.\n" +"씬 '%s'이(가) 현재 편집되고 있습니다.\n" "변경 사항은 다시 불러온 뒤에 반영됩니다." #: editor/dependency_editor.cpp @@ -1034,7 +1029,7 @@ msgid "" "Resource '%s' is in use.\n" "Changes will only take effect when reloaded." msgstr "" -"리소스 '%s'이(가) 현재 사용중입니다.\n" +"리소스 '%s'이(가) 현재 사용 중입니다.\n" "변경 사항은 다시 불러온 뒤에 반영됩니다." #: editor/dependency_editor.cpp @@ -1042,7 +1037,7 @@ msgstr "" msgid "Dependencies" msgstr "종속 관계" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "리소스" @@ -1061,7 +1056,7 @@ msgstr "망가진 부분 고치기" #: editor/dependency_editor.cpp msgid "Dependency Editor" -msgstr "종속 관계 편집기" +msgstr "종속 관계 에디터" #: editor/dependency_editor.cpp msgid "Search Replacement Resource:" @@ -1082,17 +1077,16 @@ msgid "Owners Of:" msgstr "소유자:" #: editor/dependency_editor.cpp -#, fuzzy msgid "" "Remove the selected files from the project? (Cannot be undone.)\n" "Depending on your filesystem configuration, the files will either be moved " "to the system trash or deleted permanently." msgstr "" -"프로젝트에서 선택된 파일을 제거하시겠습니다? (되돌릴 수 없음)\n" -"시스템 휴지통에서 제거된 파일을 찾고 복원할 수 있습니다." +"프로젝트에서 선택된 파일을 제거하시겠습니까? (되돌릴 수 없습니다.)\n" +"파일시스템 구성에 따라, 파일은 시스템 휴지동으로 이동되거나 완전히 삭제됩니" +"다." #: editor/dependency_editor.cpp -#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -1101,12 +1095,12 @@ msgid "" "to the system trash or deleted permanently." msgstr "" "제거하려는 파일은 다른 리소스가 동작하기 위해 필요합니다.\n" -"무시하고 제거하시겠습니까? (되돌릴 수 없음)\n" -"시스템 휴지통에서 제거된 파일을 찾고 복원할 수 있습니다." +"무시하고 제거하시겠습니까? (되돌릴 수 없습니다.)\n" +"파일시스템 구성에 따라 파일은 시스템 휴지통으로 이동되거나 완전히 삭제됩니다." #: editor/dependency_editor.cpp msgid "Cannot remove:" -msgstr "삭제할 수 없음:" +msgstr "제거할 수 없음:" #: editor/dependency_editor.cpp msgid "Error loading:" @@ -1162,11 +1156,11 @@ msgstr "명확한 소유 관계가 없는 리소스:" #: editor/dictionary_property_edit.cpp msgid "Change Dictionary Key" -msgstr "딕셔너리 키 변경" +msgstr "딕셔너리 키 바꾸기" #: editor/dictionary_property_edit.cpp msgid "Change Dictionary Value" -msgstr "딕셔너리 값 변경" +msgstr "딕셔너리 값 바꾸기" #: editor/editor_about.cpp msgid "Thanks from the Godot community!" @@ -1271,40 +1265,36 @@ msgid "Licenses" msgstr "라이선스" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Error opening asset file for \"%s\" (not in ZIP format)." -msgstr "패키지 파일을 여는 중 오류 (ZIP 형식이 아닙니다)." +msgstr "\"%s\"에 대한 애셋 파일을 여는 중 오류 (ZIP 형식이 아닙니다)." #: editor/editor_asset_installer.cpp -#, fuzzy msgid "%s (already exists)" -msgstr "%s (이미 존재함)" +msgstr "%s (이미 있습니다)" #: editor/editor_asset_installer.cpp msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:" -msgstr "애셋 \"%s\"의 내용 - 파일 %d개가 프로젝트와 충돌합니다:" +msgstr "애셋 \"%s\"의 콘텐츠 - 파일 %d개가 프로젝트와 충돌합니다:" #: editor/editor_asset_installer.cpp msgid "Contents of asset \"%s\" - No files conflict with your project:" -msgstr "애셋 \"%s\"의 내용 - 프로젝트와 충돌하는 파일이 없습니다:" +msgstr "애셋 \"%s\"의 콘텐츠 - 프로젝트와 충돌하는 파일이 없습니다:" #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" msgstr "애셋 압축 풀기" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "The following files failed extraction from asset \"%s\":" -msgstr "다음 파일을 패키지에서 추출하는데 실패함:" +msgstr "다음 파일을 애셋에서 압축 푸는 데 실패함:" #: editor/editor_asset_installer.cpp msgid "(and %s more files)" msgstr "(및 더 많은 파일 %s개)" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Asset \"%s\" installed successfully!" -msgstr "패키지를 성공적으로 설치했습니다!" +msgstr "애셋 \"%s\"를 성공적으로 설치했습니다!" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -1316,9 +1306,8 @@ msgid "Install" msgstr "설치" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Asset Installer" -msgstr "패키지 설치 마법사" +msgstr "애셋 인스톨러" #: editor/editor_audio_buses.cpp msgid "Speakers" @@ -1326,7 +1315,7 @@ msgstr "스피커" #: editor/editor_audio_buses.cpp msgid "Add Effect" -msgstr "효과 추가" +msgstr "이펙트 추가" #: editor/editor_audio_buses.cpp msgid "Rename Audio Bus" @@ -1346,7 +1335,7 @@ msgstr "오디오 버스 음소거 토글" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Bypass Effects" -msgstr "오디오 버스 바이패스 효과 토글" +msgstr "오디오 버스 바이패스 이펙트 토글" #: editor/editor_audio_buses.cpp msgid "Select Audio Bus Send" @@ -1354,15 +1343,15 @@ msgstr "오디오 버스 전송 선택" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus Effect" -msgstr "오디오 버스 효과 추가" +msgstr "오디오 버스 이펙트 추가" #: editor/editor_audio_buses.cpp msgid "Move Bus Effect" -msgstr "버스 효과 이동" +msgstr "버스 이펙트 이동" #: editor/editor_audio_buses.cpp msgid "Delete Bus Effect" -msgstr "버스 효과 삭제" +msgstr "버스 이펙트 삭제" #: editor/editor_audio_buses.cpp msgid "Drag & drop to rearrange." @@ -1381,9 +1370,8 @@ msgid "Bypass" msgstr "바이패스" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Bus Options" -msgstr "버스 설정" +msgstr "버스 옵션" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp #: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp @@ -1392,11 +1380,11 @@ msgstr "복제" #: editor/editor_audio_buses.cpp msgid "Reset Volume" -msgstr "볼륨 초기화" +msgstr "볼륨 재설정" #: editor/editor_audio_buses.cpp msgid "Delete Effect" -msgstr "효과 삭제" +msgstr "이펙트 삭제" #: editor/editor_audio_buses.cpp msgid "Audio" @@ -1420,7 +1408,7 @@ msgstr "오디오 버스 복제" #: editor/editor_audio_buses.cpp msgid "Reset Bus Volume" -msgstr "버스 볼륨 초기화" +msgstr "버스 볼륨 재설정" #: editor/editor_audio_buses.cpp msgid "Move Audio Bus" @@ -1482,11 +1470,11 @@ msgstr "이 버스 레이아웃을 파일로 저장합니다." #: editor/editor_audio_buses.cpp editor/import_dock.cpp msgid "Load Default" -msgstr "기본값 불러오기" +msgstr "디폴트 불러오기" #: editor/editor_audio_buses.cpp msgid "Load the default Bus Layout." -msgstr "기본 버스 레이아웃을 불러옵니다." +msgstr "디폴트 버스 레이아웃을 불러옵니다." #: editor/editor_audio_buses.cpp msgid "Create a new Bus Layout." @@ -1506,7 +1494,7 @@ msgstr "엔진에 이미 있는 클래스 이름과 겹치지 않아야 합니 #: editor/editor_autoload_settings.cpp msgid "Must not collide with an existing built-in type name." -msgstr "기본 자료형과 이름과 겹치지 않아야 합니다." +msgstr "기존 내장 자료형과 이름과 겹치지 않아야 합니다." #: editor/editor_autoload_settings.cpp msgid "Must not collide with an existing global constant name." @@ -1534,11 +1522,11 @@ msgstr "오토로드 이동" #: editor/editor_autoload_settings.cpp msgid "Remove Autoload" -msgstr "오토로드 삭제" +msgstr "오토로드 제거" #: editor/editor_autoload_settings.cpp editor/editor_plugin_settings.cpp msgid "Enable" -msgstr "켜기" +msgstr "활성화" #: editor/editor_autoload_settings.cpp msgid "Rearrange Autoloads" @@ -1578,9 +1566,8 @@ msgid "Name" msgstr "이름" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Global Variable" -msgstr "변수" +msgstr "전역 변수" #: editor/editor_data.cpp msgid "Paste Params" @@ -1654,7 +1641,7 @@ msgid "" "Etc' in Project Settings." msgstr "" "대상 플랫폼에서 GLES2 용 'ETC' 텍스처 압축이 필요합니다. 프로젝트 설정에서 " -"'Import Etc' 설정을 켜세요." +"'Import Etc' 설정을 활성화하세요." #: editor/editor_export.cpp msgid "" @@ -1662,7 +1649,7 @@ msgid "" "'Import Etc 2' in Project Settings." msgstr "" "대상 플랫폼에서 GLES3 용 'ETC2' 텍스처 압축이 필요합니다. 프로젝트 설정에서 " -"'Import Etc 2' 설정을 켜세요." +"'Import Etc 2' 설정을 활성화하세요." #: editor/editor_export.cpp msgid "" @@ -1673,8 +1660,8 @@ msgid "" msgstr "" "대상 플랫폼에서 드라이버가 GLES2로 폴백하기 위해 'ETC' 텍스처 압축이 필요합니" "다.\n" -"프로젝트 설정에서 'Import Etc' 설정을 활성화 하거나, 'Driver Fallback " -"Enabled' 설정을 비활성화 하세요." +"프로젝트 설정에서 'Import Etc' 설정을 활성화하거나, 'Driver Fallback " +"Enabled' 설정을 비활성화하세요." #: editor/editor_export.cpp msgid "" @@ -1682,15 +1669,15 @@ msgid "" "'Import Pvrtc' in Project Settings." msgstr "" "대상 플랫폼에서 GLES2 용 'PVRTC' 텍스처 압축이 필요합니다. 프로젝트 설정에서 " -"'Import Pvrt' 를 활성화 하세요." +"'Import Pvrt' 설정을 활성화하세요." #: editor/editor_export.cpp msgid "" "Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. " "Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings." msgstr "" -"대상 플랫폼은 GLES3 용 'ETC2' 나 'PVRTC' 텍스처 압축이 필요합니다. 프로젝트 " -"설정에서 'Import Etc 2' 나 'Import Pvrtc' 를 활성화 하세요." +"대상 플랫폼은 GLES3 용 'ETC2'나 'PVRTC' 텍스처 압축이 필요합니다. 프로젝트 설" +"정에서 'Import Etc 2'나 'Import Pvrtc' 설정을 활성화하세요." #: editor/editor_export.cpp msgid "" @@ -1701,16 +1688,16 @@ msgid "" msgstr "" "대상 플랫폼에서 드라이버가 GLES2로 폴백하기 위해 'PVRTC' 텍스처 압축이 필요합" "니다.\n" -"프로젝트 설정에서 'Import Pvrtc' 설정을 활성화 하거나, 'Driver Fallback " -"Enabled' 설정을 비활성화 하세요." +"프로젝트 설정에서 'Import Pvrtc' 설정을 활성화하거나, 'Driver Fallback " +"Enabled' 설정을 비활성화하세요." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "사용자 지정 디버그 템플릿을 찾을 수 없습니다." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -1726,11 +1713,11 @@ msgstr "32비트 환경에서는 4 GiB보다 큰 내장 PCK를 내보낼 수 없 #: editor/editor_feature_profile.cpp msgid "3D Editor" -msgstr "3D 편집기" +msgstr "3D 에디터" #: editor/editor_feature_profile.cpp msgid "Script Editor" -msgstr "스크립트 편집기" +msgstr "스크립트 에디터" #: editor/editor_feature_profile.cpp msgid "Asset Library" @@ -1746,7 +1733,7 @@ msgstr "노드 도킹" #: editor/editor_feature_profile.cpp msgid "FileSystem Dock" -msgstr "파일 시스템 독" +msgstr "파일시스템 독" #: editor/editor_feature_profile.cpp msgid "Import Dock" @@ -1754,48 +1741,49 @@ msgstr "독 가져오기" #: editor/editor_feature_profile.cpp msgid "Allows to view and edit 3D scenes." -msgstr "" +msgstr "3D 씬을 보고 편집할 수 있게 합니다." #: editor/editor_feature_profile.cpp msgid "Allows to edit scripts using the integrated script editor." -msgstr "" +msgstr "통합 스크립트 에디터를 사용해 스크립트를 편집할 수 있게 합니다." #: editor/editor_feature_profile.cpp msgid "Provides built-in access to the Asset Library." -msgstr "" +msgstr "애셋 라이브러리에 내장 접근을 제공합니다." #: editor/editor_feature_profile.cpp msgid "Allows editing the node hierarchy in the Scene dock." -msgstr "" +msgstr "씬 독에서 노드 계층 구조를 편집할 수 있게 합니다." #: editor/editor_feature_profile.cpp msgid "" "Allows to work with signals and groups of the node selected in the Scene " "dock." -msgstr "" +msgstr "씬 독에서 선택된 노드의 신호와 그룹으로 동작할 수 있게 합니다." #: editor/editor_feature_profile.cpp msgid "Allows to browse the local file system via a dedicated dock." -msgstr "" +msgstr "전용 독을 통해 로컬 파일 시스템을 탐색할 수 있게 합니다." #: editor/editor_feature_profile.cpp msgid "" "Allows to configure import settings for individual assets. Requires the " "FileSystem dock to function." msgstr "" +"개별 애셋에 대한 가져오기 설정을 구성할 수 있게 합니다. 작동하려면 파일시스" +"템 독이 필요합니다." #: editor/editor_feature_profile.cpp -#, fuzzy msgid "(current)" msgstr "(현재)" #: editor/editor_feature_profile.cpp msgid "(none)" -msgstr "" +msgstr "(없음)" #: editor/editor_feature_profile.cpp msgid "Remove currently selected profile, '%s'? Cannot be undone." -msgstr "" +msgstr "현재 선택된 프로필인 '%s'을 제거하시겠습니까? 되돌릴 수 없습니다." #: editor/editor_feature_profile.cpp msgid "Profile must be a valid filename and must not contain '.'" @@ -1807,37 +1795,35 @@ msgstr "이 이름으로 된 프로필이 이미 있습니다." #: editor/editor_feature_profile.cpp msgid "(Editor Disabled, Properties Disabled)" -msgstr "(편집기 꺼짐, 속성 꺼짐)" +msgstr "(에디터 비활성화됨, 속성 비활성화됨)" #: editor/editor_feature_profile.cpp msgid "(Properties Disabled)" -msgstr "(속성 꺼짐)" +msgstr "(속성 비활성회됨)" #: editor/editor_feature_profile.cpp msgid "(Editor Disabled)" -msgstr "(편집기 꺼짐)" +msgstr "(에디터 비활성화됨)" #: editor/editor_feature_profile.cpp msgid "Class Options:" -msgstr "클래스 설정:" +msgstr "클래스 옵션:" #: editor/editor_feature_profile.cpp msgid "Enable Contextual Editor" -msgstr "상황별 편집기 켜기" +msgstr "상황별 에디터 활성화" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Class Properties:" -msgstr "속성:" +msgstr "클래스 속성:" #: editor/editor_feature_profile.cpp msgid "Main Features:" msgstr "주요 기능:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Nodes and Classes:" -msgstr "켜진 클래스:" +msgstr "노드와 클래스:" #: editor/editor_feature_profile.cpp msgid "File '%s' format is invalid, import aborted." @@ -1848,7 +1834,7 @@ msgid "" "Profile '%s' already exists. Remove it first before importing, import " "aborted." msgstr "" -"프로필 '%s'이(가) 이미 있습니다. 가져오기 전에 이미 있는 프로필을 먼저 삭제하" +"프로필 '%s'이(가) 이미 있습니다. 가져오기 전에 이미 있는 프로필을 먼저 제거하" "세요. 가져오기를 중단합니다." #: editor/editor_feature_profile.cpp @@ -1856,23 +1842,20 @@ msgid "Error saving profile to path: '%s'." msgstr "프로필을 경로에 저장하는 중 오류: '%s'." #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Reset to Default" -msgstr "기본값으로 재설정" +msgstr "디폴트로 재설정" #: editor/editor_feature_profile.cpp msgid "Current Profile:" msgstr "현재 프로필:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Create Profile" -msgstr "프로필 지우기" +msgstr "프로필 만들기" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Remove Profile" -msgstr "타일 삭제" +msgstr "프로필 제거" #: editor/editor_feature_profile.cpp msgid "Available Profiles:" @@ -1901,7 +1884,7 @@ msgstr "별도의 옵션:" #: editor/editor_feature_profile.cpp msgid "Create or import a profile to edit available classes and properties." -msgstr "" +msgstr "사용 가능한 클래스와 속성을 편집하려면 프로필을 만들거나 가져오세요." #: editor/editor_feature_profile.cpp msgid "New profile name:" @@ -1921,16 +1904,15 @@ msgstr "프로필 내보내기" #: editor/editor_feature_profile.cpp msgid "Manage Editor Feature Profiles" -msgstr "편집기 기능 프로필 관리" +msgstr "에디터 기능 프로필 관리" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Select Current Folder" msgstr "현재 폴더 선택" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "File exists, overwrite?" -msgstr "파일이 이미 있습니다. 덮어쓸까요?" +msgstr "파일이 존재합니다. 덮어쓰시겠습니까?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Select This Folder" @@ -2089,7 +2071,7 @@ msgstr "파일 % 에 해당하는 가져오기 포맷이 여러 종류입니다. msgid "(Re)Importing Assets" msgstr "애셋 (다시) 가져오기" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "맨 위" @@ -2120,11 +2102,11 @@ msgstr "속성" #: editor/editor_help.cpp msgid "override:" -msgstr "오버라이드:" +msgstr "재정의:" #: editor/editor_help.cpp msgid "default:" -msgstr "기본:" +msgstr "디폴트:" #: editor/editor_help.cpp msgid "Methods" @@ -2189,7 +2171,7 @@ msgstr "모두 표시" #: editor/editor_help_search.cpp msgid "Classes Only" -msgstr "클래스만 표시" +msgstr "클래스만" #: editor/editor_help_search.cpp msgid "Methods Only" @@ -2326,10 +2308,13 @@ msgid "" "Update Continuously is enabled, which can increase power usage. Click to " "disable it." msgstr "" +"에디터 창을 다시 그릴 때 회전합니다.\n" +"업데이트가 지속적으로 활성화되므로, 전력 사용량이 커질 수 있습니다. 이를 비활" +"성화하려면 클릭하세요." #: editor/editor_node.cpp msgid "Spins when the editor window redraws." -msgstr "편집기 창에 변화가 있을 때마다 회전합니다." +msgstr "에디터 창에 변화가 있을 때마다 회전합니다." #: editor/editor_node.cpp msgid "Imported resources can't be saved." @@ -2383,7 +2368,7 @@ msgstr "예기치 못한 '%s' 파일의 끝." #: editor/editor_node.cpp msgid "Missing '%s' or its dependencies." -msgstr "'%s' 또는 이것의 종속 항목이 없습니다." +msgstr "'%s' 또는 이것의 종속 항목이 누락되어 있습니다." #: editor/editor_node.cpp msgid "Error while loading '%s'." @@ -2446,8 +2431,8 @@ msgid "" "An error occurred while trying to save the editor layout.\n" "Make sure the editor's user data path is writable." msgstr "" -"편집기 레이아웃의 저장을 하려는 동안 오류가 발생했습니다.\n" -"편집기의 사용자 데이터 경로가 쓰기 가능한지 확인해주세요." +"에디터 레이아웃의 저장을 하려는 동안 오류가 발생했습니다.\n" +"에디터의 사용자 데이터 경로가 쓰기 가능한지 확인해주세요." #: editor/editor_node.cpp msgid "" @@ -2455,9 +2440,9 @@ msgid "" "To restore the Default layout to its base settings, use the Delete Layout " "option and delete the Default layout." msgstr "" -"기본 편집기 레이아웃이 덮어 쓰여져 있습니디.\n" -"기본 레이아웃을 원래 설정으로 복구하려면, 레이아웃 삭제 옵션을 사용하여 기본 " -"레이아웃을 삭제하세요." +"디폴트 에디터 레이아웃이 덮어 쓰여져 있습니다.\n" +"디폴트 레이아웃을 원래 설정으로 복원하려면, 레이아웃 삭제 옵션을 사용하여 디" +"폴트 레이아웃을 삭제하세요." #: editor/editor_node.cpp msgid "Layout name not found!" @@ -2465,7 +2450,7 @@ msgstr "레이아웃 이름을 찾을 수 없습니다!" #: editor/editor_node.cpp msgid "Restored the Default layout to its base settings." -msgstr "기본 레이아웃을 원래 설정으로 복구하였습니다." +msgstr "디폴트 레이아웃을 기본 설정으로 복원하였습니다." #: editor/editor_node.cpp msgid "" @@ -2473,9 +2458,9 @@ msgid "" "Please read the documentation relevant to importing scenes to better " "understand this workflow." msgstr "" -"`이 리소스는 가져온 씬에 속한 리소스이므로 편집할 수 없습니다.\n" -"이 워크플로를 이해하려면 씬 가져오기(Importing Scenes)와 관련된 설명문서를 읽" -"어주세요." +"이 리소스는 가져온 씬에 속한 리소스이므로 편집할 수 없습니다.\n" +"이 워크플로를 이해하려면 씬 가져오기(Importing Scenes)와 관련된 문서를 읽어주" +"세요." #: editor/editor_node.cpp msgid "" @@ -2502,8 +2487,8 @@ msgid "" msgstr "" "이 씬은 가져온 것이므로 변경 사항이 유지되지 않습니다.\n" "이 씬을 인스턴스화하거나 상속하면 편집할 수 있습니다.\n" -"이 워크플로를 이해하려면 씬 가져오기(Importing Scenes)와 관련된 설명문서를 읽" -"어주세요." +"이 워크플로를 이해하려면 씬 가져오기(Importing Scenes)와 관련된 문서를 읽어주" +"세요." #: editor/editor_node.cpp msgid "" @@ -2511,12 +2496,12 @@ msgid "" "Please read the documentation relevant to debugging to better understand " "this workflow." msgstr "" -"원격 객체는 변경사항이 적용되지 않습니다.\n" -"이 워크플로를 이해하려면 디버깅(Debugging)과 관련된 설명문서를 읽어주세요." +"원격 오브젝트는 변경사항이 적용되지 않습니다.\n" +"이 워크플로를 이해하려면 디버깅(Debugging)과 관련된 문서를 읽어주세요." #: editor/editor_node.cpp msgid "There is no defined scene to run." -msgstr "실행할 씬이 설정되지 않았습니다." +msgstr "실행할 씬이 정의되지 않았습니다." #: editor/editor_node.cpp msgid "Save scene before running..." @@ -2559,13 +2544,16 @@ msgid "" "The current scene has no root node, but %d modified external resource(s) " "were saved anyway." msgstr "" +"현재 씬에는 루트 노드가 없지만, 그래도 수정된 외부 리소스 %d개가 저장되었습니" +"다." #: editor/editor_node.cpp -#, fuzzy msgid "" "A root node is required to save the scene. You can add a root node using the " "Scene tree dock." -msgstr "씬을 저장하려면 루트 노드가 필요합니다." +msgstr "" +"씬을 저장하려면 루트 노드가 필요합니다. 씬 트리 독을 사용하여 루트 노드를 추" +"가할 수 있습니다." #: editor/editor_node.cpp msgid "Save Scene As..." @@ -2596,6 +2584,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "현재 씬이 저장되어 있지 않습니다. 무시하고 여시겠습니까?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "되돌리기" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "다시 실행" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "저장하지 않은 씬은 새로고침할 수 없습니다." @@ -2609,7 +2623,7 @@ msgid "" "Reload the saved scene anyway? This action cannot be undone." msgstr "" "현재 씬에는 저장하지 않은 변경사항이 있습니다.\n" -"그래도 저장된 씬을 새로고침하시겠습니까? 이 동작은 되돌릴 수 없습니다." +"무시하고 저장된 씬을 새로고침하시겠습니까? 이 동작은 되돌릴 수 없습니다." #: editor/editor_node.cpp msgid "Quick Run Scene..." @@ -2625,7 +2639,7 @@ msgstr "예" #: editor/editor_node.cpp msgid "Exit the editor?" -msgstr "편집기를 나가시겠습니까?" +msgstr "에디터를 나가시겠습니까?" #: editor/editor_node.cpp msgid "Open Project Manager?" @@ -2666,7 +2680,7 @@ msgstr "닫은 씬 다시 열기" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '%s' parsing of config failed." msgstr "" -"다음 경로에 있는 애드온 플러그인을 활성화할 수 없음: '%s' 설정의 구문 분석을 " +"다음 경로에 있는 애드온 플러그인을 활성화할 수 없음: '%s' 구성의 구문 분석을 " "실패했습니다." #: editor/editor_node.cpp @@ -2714,7 +2728,7 @@ msgid "" "Error loading scene, it must be inside the project path. Use 'Import' to " "open the scene, then save it inside the project path." msgstr "" -"씬을 불러오는 중 오류가 발생했습니다. 씬은 프로젝트 경로 내에 있어야 합니다. " +"씬을 불러오는 중 오류가 발생했습니다. 씬은 프로젝트 경로 안에 있어야 합니다. " "'가져오기'를 사용해서 씬을 열고, 그 씬을 프로젝트 경로 안에 저장하세요." #: editor/editor_node.cpp @@ -2731,7 +2745,7 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" -"메인 씬을 지정하지 않았습니다. 선택하시겠습니까?\n" +"메인 씬을 정의하지 않았습니다. 선택하시겠습니까?\n" "나중에 \"프로젝트 설정\"의 'application' 카테고리에서 변경할 수 있습니다." #: editor/editor_node.cpp @@ -2763,12 +2777,12 @@ msgstr "레이아웃 삭제" #: editor/editor_node.cpp editor/import_dock.cpp #: editor/script_create_dialog.cpp msgid "Default" -msgstr "기본" +msgstr "디폴트" #: editor/editor_node.cpp editor/editor_resource_picker.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp msgid "Show in FileSystem" -msgstr "파일 시스템에서 보기" +msgstr "파일시스템에서 보기" #: editor/editor_node.cpp msgid "Play This Scene" @@ -2820,7 +2834,7 @@ msgstr "집중 모드" #: editor/editor_node.cpp msgid "Toggle distraction-free mode." -msgstr "집중 모드 토글." +msgstr "집중 모드를 토글합니다." #: editor/editor_node.cpp msgid "Add a new scene." @@ -2946,9 +2960,8 @@ msgid "Orphan Resource Explorer..." msgstr "미사용 리소스 탐색기..." #: editor/editor_node.cpp -#, fuzzy msgid "Reload Current Project" -msgstr "프로젝트 이름 바꾸기" +msgstr "현재 프로젝트 새로고침" #: editor/editor_node.cpp msgid "Quit to Project List" @@ -2972,15 +2985,15 @@ msgid "" "mobile device).\n" "You don't need to enable it to use the GDScript debugger locally." msgstr "" -"이 옵션이 활성화 된 경우 원 클릭 배포를 사용하면 실행중인 프로젝트를 디버깅 " +"이 옵션이 활성화된 경우 원 클릭 배포를 사용하면 실행중인 프로젝트를 디버깅 " "할 수 있도록이 컴퓨터의 IP에 연결을 시도합니다.\n" "이 옵션은 원격 디버깅 (일반적으로 모바일 기기 사용)에 사용하기 위한 것입니" "다.\n" -"GDScript 디버거를 로컬에서 사용하기 위해 활성화 할 필요는 없습니다." +"GDScript 디버거를 로컬에서 사용하기 위해 활성화할 필요는 없습니다." #: editor/editor_node.cpp msgid "Small Deploy with Network Filesystem" -msgstr "네트워크 파일 시스템을 사용하여 작게 배포" +msgstr "네트워크 파일시스템을 사용하여 작게 배포" #: editor/editor_node.cpp msgid "" @@ -2993,21 +3006,21 @@ msgid "" msgstr "" "이 옵션을 활성화하고 Android 용 원 클릭 배포를 사용하면 프로젝트 데이터없이 " "실행 파일만 내 보냅니다.\n" -"파일 시스템은 네트워크를 통해 편집기에 의해 프로젝트에서 제공됩니다.\n" -"Android의 경우, 배포시 더 빠른 속도를 위해 USB 케이블을 사용합니다. 이 설정" -"은 용량이 큰 게임의 테스트 속도를 향상시킵니다." +"파일시스템은 네트워크를 통해 에디터에 의해 프로젝트에서 제공됩니다.\n" +"Android의 경우, 배포시 더 빠른 속도를 위해 USB 케이블을 사용합니다. 이 옵션" +"은 애셋의 용량이 큰 프로젝트의 테스트 속도를 높입니다." #: editor/editor_node.cpp msgid "Visible Collision Shapes" -msgstr "충돌 모양 보이기" +msgstr "콜리전 모양 보이기" #: editor/editor_node.cpp msgid "" "When this option is enabled, collision shapes and raycast nodes (for 2D and " "3D) will be visible in the running project." msgstr "" -"이 설정을 켜면 프로젝트를 실행하는 동안 (2D와 3D용) Collision 모양과 Raycast " -"노드가 보이게 됩니다." +"이 설정을 활성화하면 프로젝트를 실행하는 동안 (2D와 3D용) 콜리전 모양과 " +"Raycast 노드가 보이게 됩니다." #: editor/editor_node.cpp msgid "Visible Navigation" @@ -3018,8 +3031,8 @@ msgid "" "When this option is enabled, navigation meshes and polygons will be visible " "in the running project." msgstr "" -"이 설정을 켜면,프로젝트를 실행하는 동안 Navigation 메시와 폴리곤이 보이게 됩" -"니다." +"이 설정이 활성화되면, 프로젝트를 실행하는 동안 네비게이션 메시와 폴리곤이 보" +"이게 됩니다." #: editor/editor_node.cpp msgid "Synchronize Scene Changes" @@ -3032,9 +3045,9 @@ msgid "" "When used remotely on a device, this is more efficient when the network " "filesystem option is enabled." msgstr "" -"이 설정이 활성화된 경우, 편집기에서 씬을 수정하면 실행중인 프로젝트에 반영됩" -"니다.\n" -"기기에서 원격으로 사용중인 경우 네트워크 파일 시스템 기능을 활성화하면 더욱 " +"이 설정이 활성화되면, 에디터에서 씬을 수정하면 실행 중인 프로젝트에 반영됩니" +"다.\n" +"기기에서 원격으로 사용 중인 경우 네트워크 파일시스템 기능을 활성화하면 더욱 " "효율적입니다." #: editor/editor_node.cpp @@ -3048,22 +3061,22 @@ msgid "" "When used remotely on a device, this is more efficient when the network " "filesystem option is enabled." msgstr "" -"이 옵션이 활성화된 경우, 어떤 스크립트든지 저장되면 실행 중인 프로젝트를 다" -"시 불러오게 됩니다.\n" -"기기에서 원격으로 사용 중인 경우, 네트워크 파일 시스템 옵션이 활성화되어 있다" -"면 더욱 효율적입니다." +"이 옵션이 활성화되면, 어떤 스크립트든지 저장되면 실행 중인 프로젝트를 다시 불" +"러오게 됩니다.\n" +"기기에서 원격으로 사용 중이면, 네트워크 파일시스템 옵션이 활성화되어 있다면 " +"더욱 효율적입니다." #: editor/editor_node.cpp editor/script_create_dialog.cpp msgid "Editor" -msgstr "편집기" +msgstr "에디터" #: editor/editor_node.cpp msgid "Editor Settings..." -msgstr "편집기 설정..." +msgstr "에디터 설정..." #: editor/editor_node.cpp msgid "Editor Layout" -msgstr "편집기 레이아웃" +msgstr "에디터 레이아웃" #: editor/editor_node.cpp msgid "Take Screenshot" @@ -3083,19 +3096,19 @@ msgstr "시스템 콘솔 토글" #: editor/editor_node.cpp msgid "Open Editor Data/Settings Folder" -msgstr "편집기 데이터/설정 폴더 열기" +msgstr "에디터 데이터/설정 폴더 열기" #: editor/editor_node.cpp msgid "Open Editor Data Folder" -msgstr "편집기 데이터 폴더 열기" +msgstr "에디터 데이터 폴더 열기" #: editor/editor_node.cpp msgid "Open Editor Settings Folder" -msgstr "편집기 설정 폴더 열기" +msgstr "에디터 설정 폴더 열기" #: editor/editor_node.cpp msgid "Manage Editor Features..." -msgstr "편집기 기능 관리..." +msgstr "에디터 기능 관리..." #: editor/editor_node.cpp msgid "Manage Export Templates..." @@ -3107,20 +3120,19 @@ msgstr "도움말" #: editor/editor_node.cpp msgid "Online Documentation" -msgstr "온라인 설명문서" +msgstr "온라인 문서" #: editor/editor_node.cpp msgid "Questions & Answers" -msgstr "" +msgstr "질문과 답변" #: editor/editor_node.cpp msgid "Report a Bug" msgstr "버그 보고" #: editor/editor_node.cpp -#, fuzzy msgid "Suggest a Feature" -msgstr "값 설정" +msgstr "기능 제안" #: editor/editor_node.cpp msgid "Send Docs Feedback" @@ -3131,9 +3143,8 @@ msgid "Community" msgstr "커뮤니티" #: editor/editor_node.cpp -#, fuzzy msgid "About Godot" -msgstr "정보" +msgstr "Godot 정보" #: editor/editor_node.cpp msgid "Support Godot Development" @@ -3177,7 +3188,7 @@ msgstr "커스텀 씬 실행" #: editor/editor_node.cpp msgid "Changing the video driver requires restarting the editor." -msgstr "비디오 드라이버를 변경하려면 편집기를 다시 껐다 켜야 합니다." +msgstr "비디오 드라이버를 변경하려면 에디터를 다시 시작해야 합니다." #: editor/editor_node.cpp editor/project_settings_editor.cpp #: editor/settings_config_dialog.cpp @@ -3198,7 +3209,7 @@ msgstr "업데이트 스피너 숨기기" #: editor/editor_node.cpp msgid "FileSystem" -msgstr "파일 시스템" +msgstr "파일시스템" #: editor/editor_node.cpp msgid "Inspector" @@ -3218,14 +3229,13 @@ msgstr "저장하지 않음" #: editor/editor_node.cpp msgid "Android build template is missing, please install relevant templates." -msgstr "Android 빌드 템플릿이 없습니다, 관련 템플릿을 설치해주세요." +msgstr "Android 빌드 템플릿이 누락되어 있습니다, 관련 템플릿을 설치해주세요." #: editor/editor_node.cpp msgid "Manage Templates" msgstr "템플릿 관리" #: editor/editor_node.cpp -#, fuzzy msgid "Install from file" msgstr "파일에서 설치" @@ -3248,7 +3258,7 @@ msgstr "" "그런 다음 수정 사항을 적용하고 맞춤 APK를 만들어 내보낼 수 있습니다 (모듈 추" "가, AndroidManifest.xml 바꾸기 등).\n" "미리 빌드된 APK를 사용하는 대신 맞춤 빌드를 만들려면, Android 내보내기 프리셋" -"에서 \"맞춤 빌드 사용\" 설정을 켜 놓아야 합니다." +"에서 \"맞춤 빌드 사용\" 설정을 활성화해야 합니다." #: editor/editor_node.cpp msgid "" @@ -3258,7 +3268,8 @@ msgid "" "operation again." msgstr "" "Android 빌드 템플릿이 이미 이 프로젝트에 설치했고, 덮어 쓸 수 없습니다.\n" -"이 명령을 다시 실행 전에 \"res://android/build\" 디렉토리를 삭제하세요." +"이 명령을 다시 실행하기 전에 \"res://android/build\" 디렉토리를 직접 제거하세" +"요." #: editor/editor_node.cpp msgid "Import Templates From ZIP File" @@ -3277,6 +3288,11 @@ msgid "Merge With Existing" msgstr "기존의 것과 병합" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "애니메이션 변형 바꾸기" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "스크립트 열기 & 실행" @@ -3311,21 +3327,20 @@ msgid "Select" msgstr "선택" #: editor/editor_node.cpp -#, fuzzy msgid "Select Current" -msgstr "현재 폴더 선택" +msgstr "현재 선택" #: editor/editor_node.cpp msgid "Open 2D Editor" -msgstr "2D 편집기 열기" +msgstr "2D 에디터 열기" #: editor/editor_node.cpp msgid "Open 3D Editor" -msgstr "3D 편집기 열기" +msgstr "3D 에디터 열기" #: editor/editor_node.cpp msgid "Open Script Editor" -msgstr "스크립트 편집기 열기" +msgstr "스크립트 에디터 열기" #: editor/editor_node.cpp editor/project_manager.cpp msgid "Open Asset Library" @@ -3333,11 +3348,11 @@ msgstr "애셋 라이브러리 열기" #: editor/editor_node.cpp msgid "Open the next Editor" -msgstr "다음 편집기 열기" +msgstr "다음 에디터 열기" #: editor/editor_node.cpp msgid "Open the previous Editor" -msgstr "이전 편집기 열기" +msgstr "이전 에디터 열기" #: editor/editor_node.h msgid "Warning!" @@ -3348,9 +3363,8 @@ msgid "No sub-resources found." msgstr "하위 리소스를 찾을 수 없습니다." #: editor/editor_path.cpp -#, fuzzy msgid "Open a list of sub-resources." -msgstr "하위 리소스를 찾을 수 없습니다." +msgstr "하위 리소스의 목록을 엽니다." #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" @@ -3362,7 +3376,7 @@ msgstr "썸네일..." #: editor/editor_plugin_settings.cpp msgid "Main Script:" -msgstr "기본 스크립트:" +msgstr "주 스크립트:" #: editor/editor_plugin_settings.cpp msgid "Edit Plugin" @@ -3381,7 +3395,6 @@ msgid "Version" msgstr "버전" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Author" msgstr "저자" @@ -3396,14 +3409,12 @@ msgid "Measure:" msgstr "측정:" #: editor/editor_profiler.cpp -#, fuzzy msgid "Frame Time (ms)" -msgstr "프레임 시간 (초)" +msgstr "프레임 시간 (ms)" #: editor/editor_profiler.cpp -#, fuzzy msgid "Average Time (ms)" -msgstr "평균 시간 (초)" +msgstr "평균 시간 (ms)" #: editor/editor_profiler.cpp msgid "Frame %" @@ -3415,11 +3426,11 @@ msgstr "물리 프레임 %" #: editor/editor_profiler.cpp msgid "Inclusive" -msgstr "포함" +msgstr "포괄적" #: editor/editor_profiler.cpp msgid "Self" -msgstr "셀프" +msgstr "자체" #: editor/editor_profiler.cpp msgid "" @@ -3430,6 +3441,12 @@ msgid "" "functions called by that function.\n" "Use this to find individual functions to optimize." msgstr "" +"포괄적: 이 함수에 의해 호출된 다른 함수로부터 시간을 포함합니다.\n" +"이를 사용하여 병목 현상을 찾아냅니다.\n" +"\n" +"자체: 해당 함수에 의해 호출된 다른 함수에서가 아닌, 함수 자체에서 보낸 시간" +"만 계산합니다.\n" +"이를 사용하여 최적화할 개별 함수를 찾습니다." #: editor/editor_profiler.cpp msgid "Frame #:" @@ -3510,7 +3527,7 @@ msgstr "페이지: " #: editor/editor_properties_array_dict.cpp #: editor/plugins/theme_editor_plugin.cpp msgid "Remove Item" -msgstr "항목 삭제" +msgstr "항목 제거" #: editor/editor_properties_array_dict.cpp msgid "New Key:" @@ -3528,7 +3545,11 @@ msgstr "키/값 쌍 추가" msgid "" "The selected resource (%s) does not match any type expected for this " "property (%s)." -msgstr "선택한 리소스 (%s)가 이 속성 (%s)에 적합한 모든 유형에 맞지 않습니다." +msgstr "선택한 리소스(%s)가 이 속성(%s)에 적합한 모든 유형에 맞지 않습니다." + +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" @@ -3549,7 +3570,6 @@ msgid "Paste" msgstr "붙여넣기" #: editor/editor_resource_picker.cpp editor/property_editor.cpp -#, fuzzy msgid "Convert to %s" msgstr "%s(으)로 변환" @@ -3573,7 +3593,7 @@ msgid "" msgstr "" "이 플랫폼을 위한 실행할 수 있는 내보내기 프리셋이 없습니다.\n" "내보내기 메뉴에서 실행할 수 있는 프리셋을 추가하거나 기존 프리셋을 실행할 수 " -"있도록 지정해주세요." +"있도록 정의해주세요." #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." @@ -3600,10 +3620,8 @@ msgid "Did you forget the '_run' method?" msgstr "'_run' 메서드를 잊었나요?" #: editor/editor_spin_slider.cpp -#, fuzzy msgid "Hold %s to round to integers. Hold Shift for more precise changes." -msgstr "" -"Ctrl을 눌러 정수로 반올림합니다. Shift를 눌러 좀 더 정밀하게 조작합니다." +msgstr "%s를 눌러 정수로 반올림합니다. Shift를 눌러 좀 더 정밀하게 조작합니다." #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" @@ -3623,32 +3641,29 @@ msgstr "노드에서 가져오기:" #: editor/export_template_manager.cpp msgid "Open the folder containing these templates." -msgstr "" +msgstr "이 템플릿을 포함하는 폴더를 엽니다." #: editor/export_template_manager.cpp msgid "Uninstall these templates." msgstr "이 템플릿을 제거합니다." #: editor/export_template_manager.cpp -#, fuzzy msgid "There are no mirrors available." -msgstr "'%s' 파일이 없습니다." +msgstr "사용 가능한 미러가 없습니다." #: editor/export_template_manager.cpp -#, fuzzy msgid "Retrieving the mirror list..." -msgstr "미러를 검색 중입니다. 기다려주세요..." +msgstr "미러 목록을 검색하는 중..." #: editor/export_template_manager.cpp msgid "Starting the download..." -msgstr "" +msgstr "다운로드를 시작하는 중..." #: editor/export_template_manager.cpp msgid "Error requesting URL:" msgstr "URL 요청 중 오류:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Connecting to the mirror..." msgstr "미러에 연결 중..." @@ -3683,7 +3698,7 @@ msgstr "다운로드를 완료하여 템플릿을 압축 해제 중..." #: editor/export_template_manager.cpp msgid "Cannot remove temporary file:" -msgstr "임시 파일을 삭제할 수 없음:" +msgstr "임시 파일을 제거할 수 없음:" #: editor/export_template_manager.cpp msgid "" @@ -3698,7 +3713,6 @@ msgid "Error getting the list of mirrors." msgstr "미러 목록을 가져오는 중 오류." #: editor/export_template_manager.cpp -#, fuzzy msgid "Error parsing JSON with the list of mirrors. Please report this issue!" msgstr "미러 목록의 JSON 구문 분석 중 오류. 이 문제를 신고해주세요!" @@ -3757,24 +3771,20 @@ msgid "SSL Handshake Error" msgstr "SSL 핸드셰이크 오류" #: editor/export_template_manager.cpp -#, fuzzy msgid "Can't open the export templates file." -msgstr "내보내기 템플릿 zip 파일을 열 수 없습니다." +msgstr "내보내기 템플릿 파일을 열 수 없습니다." #: editor/export_template_manager.cpp -#, fuzzy msgid "Invalid version.txt format inside the export templates file: %s." -msgstr "템플릿 속의 version.txt가 잘못된 형식임: %s." +msgstr "내보내기 템플릿 파일 안의 version.txt가 잘못된 형식임: %s." #: editor/export_template_manager.cpp -#, fuzzy msgid "No version.txt found inside the export templates file." -msgstr "템플릿에 version.txt를 찾을 수 없습니다." +msgstr "내보내기 템플릿 파일 안에 version.txt를 찾을 수 없습니다." #: editor/export_template_manager.cpp -#, fuzzy msgid "Error creating path for extracting templates:" -msgstr "템플릿의 경로를 만드는 중 오류:" +msgstr "템플릿을 압축 풀기 위한 경로를 만드는 중 오류:" #: editor/export_template_manager.cpp msgid "Extracting Export Templates" @@ -3785,9 +3795,8 @@ msgid "Importing:" msgstr "가져오는 중:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Remove templates for the version '%s'?" -msgstr "템플릿 버전 '%s'을(를) 삭제할까요?" +msgstr "버전 '%s'의 템플릿을 제거하시겠습니까?" #: editor/export_template_manager.cpp msgid "Uncompressing Android Build Sources" @@ -3804,19 +3813,19 @@ msgstr "현재 버전:" #: editor/export_template_manager.cpp msgid "Export templates are missing. Download them or install from a file." msgstr "" +"내보내기 템플릿이 누락되어 있습니다. 다운로드하거나 파일에서 설치하세요." #: editor/export_template_manager.cpp msgid "Export templates are installed and ready to be used." -msgstr "" +msgstr "내보내기 템플릿이 설치되어 사용될 준비가 되었습니다." #: editor/export_template_manager.cpp -#, fuzzy msgid "Open Folder" -msgstr "파일 열기" +msgstr "폴더 열기" #: editor/export_template_manager.cpp msgid "Open the folder containing installed templates for the current version." -msgstr "" +msgstr "현재 버전을 위한 설치된 템플릿을 포함하는 폴더를 엽니다." #: editor/export_template_manager.cpp msgid "Uninstall" @@ -3827,36 +3836,33 @@ msgid "Uninstall templates for the current version." msgstr "현재 버전을 위한 템플릿을 제거합니다." #: editor/export_template_manager.cpp -#, fuzzy msgid "Download from:" -msgstr "다음 위치에서 다운로드:" +msgstr "다음으로부터 다운로드:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Open in Web Browser" -msgstr "브라우저에서 실행" +msgstr "웹 브라우저에서 열기" #: editor/export_template_manager.cpp -#, fuzzy msgid "Copy Mirror URL" -msgstr "복사 오류" +msgstr "미러 URL 복사" #: editor/export_template_manager.cpp msgid "Download and Install" -msgstr "" +msgstr "다운로드 및 설치" #: editor/export_template_manager.cpp msgid "" "Download and install templates for the current version from the best " "possible mirror." msgstr "" +"최상의 가능한 미러에서 현재 버전을 위한 템플릿을 다운로드하고 설치합니다." #: editor/export_template_manager.cpp msgid "Official export templates aren't available for development builds." msgstr "공식 내보내기 템플릿은 개발 빌드에서는 이용할 수 없습니다." #: editor/export_template_manager.cpp -#, fuzzy msgid "Install from File" msgstr "파일에서 설치" @@ -3870,14 +3876,12 @@ msgid "Cancel" msgstr "취소" #: editor/export_template_manager.cpp -#, fuzzy msgid "Cancel the download of the templates." -msgstr "내보내기 템플릿 zip 파일을 열 수 없습니다." +msgstr "템플릿의 다운로드를 취소합니다." #: editor/export_template_manager.cpp -#, fuzzy msgid "Other Installed Versions:" -msgstr "설치된 버전:" +msgstr "다른 설치된 버전:" #: editor/export_template_manager.cpp msgid "Uninstall Template" @@ -3896,6 +3900,8 @@ msgid "" "The templates will continue to download.\n" "You may experience a short editor freeze when they finish." msgstr "" +"템플릿이 다운로드를 계속할 것입니다.\n" +"완료되면 에디터가 짧게 멈추는 현상을 겪을 수 있습니다." #: editor/filesystem_dock.cpp msgid "Favorites" @@ -3911,7 +3917,7 @@ msgstr "" msgid "" "Importing has been disabled for this file, so it can't be opened for editing." msgstr "" -"이 파일에 대해 가져 오기가 비활성화되었으며 편집을 위해 열 수 없습니다." +"이 파일에 대해 가져오기가 비활성화되었으며, 편집을 위해 열 수 없습니다." #: editor/filesystem_dock.cpp msgid "Cannot move/rename resources root." @@ -3998,11 +4004,11 @@ msgstr "인스턴스하기" #: editor/filesystem_dock.cpp msgid "Add to Favorites" -msgstr "즐겨찾기로 추가" +msgstr "즐겨찾기에 추가" #: editor/filesystem_dock.cpp msgid "Remove from Favorites" -msgstr "즐겨찾기에서 삭제" +msgstr "즐겨찾기에서 제거" #: editor/filesystem_dock.cpp msgid "Edit Dependencies..." @@ -4041,35 +4047,32 @@ msgid "Collapse All" msgstr "모두 접기" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Sort files" -msgstr "파일 검색" +msgstr "파일 정렬" #: editor/filesystem_dock.cpp msgid "Sort by Name (Ascending)" -msgstr "" +msgstr "이름순 정렬 (오름차순)" #: editor/filesystem_dock.cpp msgid "Sort by Name (Descending)" -msgstr "" +msgstr "이름순 정렬 (내림차순)" #: editor/filesystem_dock.cpp msgid "Sort by Type (Ascending)" -msgstr "" +msgstr "유형별 정렬 (오름차순)" #: editor/filesystem_dock.cpp msgid "Sort by Type (Descending)" -msgstr "" +msgstr "유형별 정렬 (내림차순)" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Sort by Last Modified" -msgstr "마지막으로 수정됨" +msgstr "마지막으로 수정된 순서로 정렬" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Sort by First Modified" -msgstr "마지막으로 수정됨" +msgstr "처음으로 수정된 순서로 정렬" #: editor/filesystem_dock.cpp msgid "Duplicate..." @@ -4081,7 +4084,7 @@ msgstr "이름 바꾸기..." #: editor/filesystem_dock.cpp msgid "Focus the search box" -msgstr "" +msgstr "검색창에 초점 맞추기" #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -4093,7 +4096,7 @@ msgstr "다음 폴더/파일" #: editor/filesystem_dock.cpp msgid "Re-Scan Filesystem" -msgstr "파일 시스템 다시 스캔" +msgstr "파일시스템 다시 스캔" #: editor/filesystem_dock.cpp msgid "Toggle Split Mode" @@ -4155,8 +4158,8 @@ msgid "" "Include the files with the following extensions. Add or remove them in " "ProjectSettings." msgstr "" -"해당 확장자 이름을 갖는 파일이 있습니다. 프로젝트 설정에 파일을 추가하거나 삭" -"제하세요." +"해당 확장자 이름을 갖는 파일이 포함되어 있습니다. 프로젝트 설정에 파일을 추가" +"하거나 제거하세요." #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -4201,7 +4204,7 @@ msgstr "그룹에 추가" #: editor/groups_editor.cpp msgid "Remove from Group" -msgstr "그룹에서 삭제" +msgstr "그룹에서 제거" #: editor/groups_editor.cpp msgid "Group name already exists." @@ -4238,11 +4241,11 @@ msgstr "그룹에 속한 노드" #: editor/groups_editor.cpp msgid "Empty groups will be automatically removed." -msgstr "빈 그룹은 자동으로 삭제됩니다." +msgstr "빈 그룹은 자동으로 제거됩니다." #: editor/groups_editor.cpp msgid "Group Editor" -msgstr "그룹 편집기" +msgstr "그룹 에디터" #: editor/groups_editor.cpp msgid "Manage Groups" @@ -4262,15 +4265,15 @@ msgstr "머티리얼을 분리해서 가져오기" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects" -msgstr "객체를 분리해서 가져오기" +msgstr "오브젝트를 분리해서 가져오기" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials" -msgstr "객체와 머티리얼을 분리해서 가져오기" +msgstr "오브젝트와 머티리얼을 분리해서 가져오기" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Animations" -msgstr "객체와 애니메이션을 분리해서 가져오기" +msgstr "오브젝트와 애니메이션을 분리해서 가져오기" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials+Animations" @@ -4278,7 +4281,7 @@ msgstr "머티리얼과 애니메이션을 분리해서 가져오기" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials+Animations" -msgstr "객체, 머티리얼, 애니메이션을 분리해서 가져오기" +msgstr "오브젝트, 머티리얼, 애니메이션을 분리해서 가져오기" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" @@ -4323,7 +4326,7 @@ msgstr "후 가져오기 스크립트 실행 중 오류:" #: editor/import/resource_importer_scene.cpp msgid "Did you return a Node-derived object in the `post_import()` method?" -msgstr "`post_import()` 메소드에서 Node에서 상속받은 객체를 반환했습니까?" +msgstr "`post_import()` 메소드에서 Node에서 상속받은 오브젝트를 반환했습니까?" #: editor/import/resource_importer_scene.cpp msgid "Saving..." @@ -4339,7 +4342,7 @@ msgstr "임포터:" #: editor/import_defaults_editor.cpp msgid "Reset to Defaults" -msgstr "기본값으로 재설정" +msgstr "디폴트로 재설정" #: editor/import_dock.cpp msgid "Keep File (No Import)" @@ -4351,11 +4354,11 @@ msgstr "파일 %d개" #: editor/import_dock.cpp msgid "Set as Default for '%s'" -msgstr "'%s'을(를) 기본으로 설정" +msgstr "'%s'을(를) 디폴트으로 설정" #: editor/import_dock.cpp msgid "Clear Default for '%s'" -msgstr "'%s'을(를) 기본에서 지우기" +msgstr "'%s'을(를) 디폴트에서 지우기" #: editor/import_dock.cpp msgid "Import As:" @@ -4375,7 +4378,7 @@ msgstr "씬 저장, 다시 가져오기 및 다시 시작" #: editor/import_dock.cpp msgid "Changing the type of an imported file requires editor restart." -msgstr "가져온 파일의 유형을 바꾸려면 편집기를 다시 켜아 합니다." +msgstr "가져온 파일의 유형을 바꾸려면 에디터를 다시 시작해야 합니다." #: editor/import_dock.cpp msgid "" @@ -4389,14 +4392,12 @@ msgid "Failed to load resource." msgstr "리소스 불러오기에 실패했습니다." #: editor/inspector_dock.cpp -#, fuzzy msgid "Copy Properties" -msgstr "속성" +msgstr "속성 복사" #: editor/inspector_dock.cpp -#, fuzzy msgid "Paste Properties" -msgstr "속성" +msgstr "속성 붙여넣기" #: editor/inspector_dock.cpp msgid "Make Sub-Resources Unique" @@ -4425,47 +4426,44 @@ msgid "Extra resource options." msgstr "별도의 리소스 옵션." #: editor/inspector_dock.cpp -#, fuzzy msgid "Edit Resource from Clipboard" -msgstr "리소스 클립보드 편집" +msgstr "클립보드에서 리소스 편집" #: editor/inspector_dock.cpp msgid "Copy Resource" msgstr "리소스 복사" #: editor/inspector_dock.cpp -#, fuzzy msgid "Make Resource Built-In" -msgstr "내장으로 만들기" +msgstr "리소스를 내장으로 만들기" #: editor/inspector_dock.cpp msgid "Go to the previous edited object in history." -msgstr "기록상 이전에 편집했던 객체로 이동합니다." +msgstr "기록상 이전에 편집했던 오브젝트로 이동합니다." #: editor/inspector_dock.cpp msgid "Go to the next edited object in history." -msgstr "기록상 다음에 편집했던 객체로 이동합니다." +msgstr "기록상 다음에 편집했던 오브젝트로 이동합니다." #: editor/inspector_dock.cpp msgid "History of recently edited objects." -msgstr "최근에 편집한 객체 기록입니다." +msgstr "최근에 편집한 오브젝트 기록입니다." #: editor/inspector_dock.cpp msgid "Open documentation for this object." -msgstr "이 객체를 위한 설명문서를 엽니다." +msgstr "이 오브젝트를 위한 문서를 엽니다." #: editor/inspector_dock.cpp editor/scene_tree_dock.cpp msgid "Open Documentation" -msgstr "설명문서 열기" +msgstr "문서 열기" #: editor/inspector_dock.cpp msgid "Filter properties" msgstr "필터 속성" #: editor/inspector_dock.cpp -#, fuzzy msgid "Manage object properties." -msgstr "객체 속성." +msgstr "오브젝트 속성을 관리합니다." #: editor/inspector_dock.cpp msgid "Changes may be lost!" @@ -4477,7 +4475,7 @@ msgstr "다중 노드 설정" #: editor/node_dock.cpp msgid "Select a single node to edit its signals and groups." -msgstr "시그널과 그룹을 편집할 노드 하나를 선택하세요." +msgstr "시그널과 그룹을 편집할 단일 노드를 선택하세요." #: editor/plugin_config_dialog.cpp msgid "Edit a Plugin" @@ -4552,11 +4550,11 @@ msgstr "점 삽입" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Edit Polygon (Remove Point)" -msgstr "폴리곤 편집 (점 삭제)" +msgstr "폴리곤 편집 (점 제거)" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Remove Polygon And Point" -msgstr "폴리곤과 점 삭제" +msgstr "폴리곤과 점 제거" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -4604,7 +4602,7 @@ msgstr "애니메이션 점 추가" #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Remove BlendSpace1D Point" -msgstr "BlendSpace1D 점 삭제" +msgstr "BlendSpace1D 점 제거" #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Move BlendSpace1D Node Point" @@ -4618,8 +4616,9 @@ msgid "" "AnimationTree is inactive.\n" "Activate to enable playback, check node warnings if activation fails." msgstr "" -"AnimationTree가 꺼져 있습니다.\n" -"재생하려면 AnimationTree를 켜고, 실행에 실패하면 노드 경고를 확인하세요." +"AnimationTree가 비활성 상태입니다.\n" +"재생을 활성화하려면 AnimationTree를 활성화하고, 활성화에 실패하면 노드 경고" +"를 확인하세요." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -4634,7 +4633,7 @@ msgstr "점을 선택하고 이동합니다. 우클릭으로 점을 만드세요 #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp scene/gui/graph_edit.cpp msgid "Enable snap and show grid." -msgstr "스냅을 켜고 격자를 보이게 합니다." +msgstr "스냅을 활성화하고 격자를 보이게 합니다." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -4645,7 +4644,7 @@ msgstr "점" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Open Editor" -msgstr "편집기 열기" +msgstr "에디터 열기" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -4672,11 +4671,11 @@ msgstr "BlendSpace2D 라벨 바꾸기" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Remove BlendSpace2D Point" -msgstr "BlendSpace2D 점 삭제" +msgstr "BlendSpace2D 점 제거" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Remove BlendSpace2D Triangle" -msgstr "BlendSpace2D 삼각형 삭제" +msgstr "BlendSpace2D 삼각형 제거" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "BlendSpace2D does not belong to an AnimationTree node." @@ -4813,7 +4812,7 @@ msgstr "필터 트랙 편집:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Enable Filtering" -msgstr "필터 켜기" +msgstr "필터 활성화" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" @@ -4839,7 +4838,7 @@ msgstr "애니메이션을 삭제할까요?" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Remove Animation" -msgstr "애니메이션 삭제" +msgstr "애니메이션 제거" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Invalid animation name!" @@ -4916,7 +4915,7 @@ msgstr "애니메이션 위치 (초)." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Scale animation playback globally for the node." -msgstr "노드의 애니메이션 재생 길이를 전체적으로 조절합니다." +msgstr "노드의 애니메이션 재생 스케일를 전체적으로 조절합니다." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation Tools" @@ -4949,7 +4948,7 @@ msgstr "불러올 시 자동으로 재생" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Enable Onion Skinning" -msgstr "어니언 스키닝 켜기" +msgstr "어니언 스키닝 활성화" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Onion Skinning Options" @@ -5073,11 +5072,11 @@ msgstr "이 경로에 설정한 재생 리소스가 없음: %s." #: editor/plugins/animation_state_machine_editor.cpp msgid "Node Removed" -msgstr "노드 삭제됨" +msgstr "노드 제거됨" #: editor/plugins/animation_state_machine_editor.cpp msgid "Transition Removed" -msgstr "전환 삭제됨" +msgstr "전환 제거됨" #: editor/plugins/animation_state_machine_editor.cpp msgid "Set Start Node (Autoplay)" @@ -5103,7 +5102,7 @@ msgstr "노드를 연결합니다." #: editor/plugins/animation_state_machine_editor.cpp msgid "Remove selected node or transition." -msgstr "선택한 노드나 전환을 삭제합니다." +msgstr "선택한 노드나 전환을 제거합니다." #: editor/plugins/animation_state_machine_editor.cpp msgid "Toggle autoplay this animation on start, restart or seek to zero." @@ -5134,7 +5133,7 @@ msgstr "새 이름:" #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/plugins/multimesh_editor_plugin.cpp msgid "Scale:" -msgstr "크기:" +msgstr "스케일:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Fade In (s):" @@ -5241,7 +5240,7 @@ msgstr "혼합4 노드" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "TimeScale Node" -msgstr "시간 크기 조절 노드" +msgstr "시간 스케일 노드" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "TimeSeek Node" @@ -5265,7 +5264,7 @@ msgstr "필터..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Contents:" -msgstr "내용:" +msgstr "콘텐츠:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "View Files" @@ -5437,11 +5436,11 @@ msgstr "모두" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Search templates, projects, and demos" -msgstr "" +msgstr "검색 템플릿, 프로젝트, 및 데모" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Search assets (excluding templates, projects, and demos)" -msgstr "" +msgstr "애셋 검색 (템플릿, 프로젝트, 및 데모 제외)" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." @@ -5473,7 +5472,7 @@ msgstr "공식" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Testing" -msgstr "시험" +msgstr "테스트" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Loading..." @@ -5485,7 +5484,7 @@ msgstr "애셋 ZIP 파일" #: editor/plugins/audio_stream_editor_plugin.cpp msgid "Audio Preview Play/Pause" -msgstr "" +msgstr "오디오 미리 보기 재생/일시 정지" #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "" @@ -5496,13 +5495,12 @@ msgstr "" "당신의 씬을 저장하고 다시 시도하세요." #: editor/plugins/baked_lightmap_editor_plugin.cpp -#, fuzzy msgid "" "No meshes to bake. Make sure they contain an UV2 channel and that the 'Use " "In Baked Light' and 'Generate Lightmap' flags are on." msgstr "" -"라이트맵을 구울 메시가 없습니다. 메시가 UV2 채널을 갖고 있고 'Bake Light' 플" -"래그가 켜져 있는지 확인해주세요." +"구울 메시가 없습니다. UV2 채널을 포함하고 있고 'Use In Baked Light' 및 " +"'Generate Lightmap' 플래그가 켜져 있는지 확인해주세요." #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Failed creating lightmap images, make sure path is writable." @@ -5525,7 +5523,7 @@ msgstr "" msgid "" "Godot editor was built without ray tracing support, lightmaps can't be baked." msgstr "" -"Godot 편집기는 레이 트레이싱 지원 없이 빌드되었으며 라이트맵은 구울 수 없습니" +"Godot 에디터는 레이 트레이싱 지원 없이 빌드되었으며 라이트맵은 구울 수 없습니" "다." #: editor/plugins/baked_lightmap_editor_plugin.cpp @@ -5571,7 +5569,7 @@ msgstr "회전 단계:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Step:" -msgstr "크기 조절 단계:" +msgstr "스케일 단계:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Vertical Guide" @@ -5583,7 +5581,7 @@ msgstr "수직 가이드 만들기" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Remove Vertical Guide" -msgstr "수직 가이드 삭제" +msgstr "수직 가이드 제거" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Horizontal Guide" @@ -5595,7 +5593,7 @@ msgstr "수평 가이드 만들기" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Remove Horizontal Guide" -msgstr "수평 가이드 삭제" +msgstr "수평 가이드 제거" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create Horizontal and Vertical Guides" @@ -5619,7 +5617,7 @@ msgstr "CanvasItem \"%s\" 앵커 이동" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Node2D \"%s\" to (%s, %s)" -msgstr "Node2D \"%s\"를 (%s, %s)로 크기 조절" +msgstr "Node2D \"%s\"를 (%s, %s)로 스케일 조절" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize Control \"%s\" to (%d, %d)" @@ -5627,11 +5625,11 @@ msgstr "컨트롤 \"%s\"를 (%d, %d)로 크기 조절" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale %d CanvasItems" -msgstr "CanvasItem %d개 크기 조절" +msgstr "CanvasItem %d개 스케일 조절" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale CanvasItem \"%s\" to (%s, %s)" -msgstr "CanvasItem \"%s\"를 (%s, %s)로 크기 조절" +msgstr "CanvasItem \"%s\"를 (%s, %s)로 스케일 조절" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move %d CanvasItems" @@ -5642,10 +5640,22 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "CanvasItem \"%s\"를 (%d, %d)로 이동" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "선택 항목 잠그기" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "그룹" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." -msgstr "컨테이너의 자식은 부모로 인해 재정의된 앵커와 여백 값을 가집니다." +msgstr "컨테이너의 자손은 부모로 인해 재정의된 앵커와 여백 값을 가집니다." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Presets for the anchors and margins values of a Control node." @@ -5739,13 +5749,12 @@ msgstr "앵커 바꾸기" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "" "Project Camera Override\n" "Overrides the running project's camera with the editor viewport camera." msgstr "" -"게임 카메라 다시 정의\n" -"편집기 뷰포트 카메라로 게임 카메라를 다시 정의합니다." +"프로젝트 카메라 재정의\n" +"실행 중인 프로젝트의 카메라를 에디터 뷰포트 카메라로 재정의합니다." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5754,6 +5763,9 @@ msgid "" "No project instance running. Run the project from the editor to use this " "feature." msgstr "" +"프로젝트 카메라 재정의\n" +"실행 중인 프로젝트 인스턴스가 없습니다. 이 기능을 사용하려면 에디터에서 프로" +"젝트를 실행하세요." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5803,14 +5815,14 @@ msgstr "IK 체인 지우기" msgid "" "Warning: Children of a container get their position and size determined only " "by their parent." -msgstr "경고: 컨테이너의 자식 규모와 위치는 부모에 의해 결정됩니다." +msgstr "경고: 컨테이너의 자손 위치와 크기는 부모에 의해 결정됩니다." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp #: editor/plugins/texture_region_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp msgid "Zoom Reset" -msgstr "줌 초기화" +msgstr "줌 재설정" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5838,7 +5850,7 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "RMB: Add node at position clicked." -msgstr "" +msgstr "우클릭: 클릭한 위치에 노드를 추가합니다." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5853,7 +5865,7 @@ msgstr "회전 모드" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Scale Mode" -msgstr "크기 조절 모드" +msgstr "스케일 모드" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5861,12 +5873,12 @@ msgid "" "Show a list of all objects at the position clicked\n" "(same as Alt+RMB in select mode)." msgstr "" -"클릭한 위치에 있는 모든 객체 목록을 보여줘요\n" +"클릭한 위치에 있는 모든 오브젝트 목록을 보여줍니다\n" "(선택 모드에서 Alt+우클릭과 같음)." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Click to change object's rotation pivot." -msgstr "클릭으로 객체의 회전 피벗을 바꿉니다." +msgstr "클릭으로 오브젝트의 회전 피벗을 바꿉니다." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Pan Mode" @@ -5902,7 +5914,7 @@ msgstr "회전 스냅 사용" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Scale Snap" -msgstr "크기 조절 스냅 사용" +msgstr "스케일 스냅 사용" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap Relative" @@ -5948,22 +5960,22 @@ msgstr "가이드에 스냅" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Lock the selected object in place (can't be moved)." -msgstr "선택한 객체를 그 자리에 잠가요 (움직일 수 없습니다)." +msgstr "선택된 오브젝트를 그 자리에 잠급니다 (움직일 수 없습니다)." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Unlock the selected object (can be moved)." -msgstr "선택한 객체를 잠금에서 풀 (움직일 수 있습니다)." +msgstr "선택된 오브젝트를 잠금에서 풉니다 (움직일 수 있습니다)." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Makes sure the object's children are not selectable." -msgstr "객체의 자식을 선택하지 않도록 합니다." +msgstr "오브젝트의 자손을 선택하지 않도록 합니다." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Restores the object's children's ability to be selected." -msgstr "객체의 자식을 선택할 수 있도록 합니다." +msgstr "오브젝트의 자손을 선택할 수 있도록 복원합니다." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Skeleton Options" @@ -6024,7 +6036,7 @@ msgstr "프레임 선택" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Preview Canvas Scale" -msgstr "캔버스 크기 조절 미리 보기" +msgstr "캔버스 스케일 미리 보기" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Translation mask for inserting keys." @@ -6036,7 +6048,7 @@ msgstr "키를 삽입하기 위한 회전 마스크." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale mask for inserting keys." -msgstr "키를 삽입하기 위한 크기 조절 마스크." +msgstr "키를 삽입하기 위한 스케일 마스크." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert keys (based on mask)." @@ -6049,8 +6061,8 @@ msgid "" "Keys are only added to existing tracks, no new tracks will be created.\n" "Keys must be inserted manually for the first time." msgstr "" -"객체를 전환, 회전 또는 크기 조절할 때마다 자동으로 키를 삽입합니다 (마스크 기" -"준).\n" +"오브젝트를 전환, 회전 또는 스케일을 조절할 때마다 자동으로 키를 삽입합니다 " +"(마스크 기준).\n" "키는 기존 트랙에만 추가되고, 새 트랙을 추가하진 않습니다.\n" "처음에는 수동으로 키를 삽입해야 합니다." @@ -6075,14 +6087,12 @@ msgid "Clear Pose" msgstr "포즈 지우기" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Add Node Here" -msgstr "노드 추가" +msgstr "여기에 노드 추가" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Instance Scene Here" -msgstr "씬 인스턴스화" +msgstr "여기에 씬 인스턴스화" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Multiply grid step by 2" @@ -6098,49 +6108,43 @@ msgstr "팬 보기" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 3.125%" -msgstr "" +msgstr "3.125%로 줌" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 6.25%" -msgstr "" +msgstr "6.25%로 줌" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 12.5%" -msgstr "" +msgstr "12.5%로 줌" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 25%" -msgstr "줌 아웃" +msgstr "25%로 줌" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 50%" -msgstr "줌 아웃" +msgstr "50%로 줌" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 100%" -msgstr "줌 아웃" +msgstr "100%로 줌" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 200%" -msgstr "줌 아웃" +msgstr "200%로 줌" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 400%" -msgstr "줌 아웃" +msgstr "400%로 줌" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 800%" -msgstr "줌 아웃" +msgstr "800%로 줌" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 1600%" -msgstr "" +msgstr "1600%로 줌" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" @@ -6166,14 +6170,14 @@ msgstr "'%s'에서 씬 인스턴스 중 오류" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Change Default Type" -msgstr "기본 유형 바꾸기" +msgstr "디폴트 유형 바꾸기" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Drag & drop + Shift : Add node as sibling\n" "Drag & drop + Alt : Change node type" msgstr "" -"드래그 & 드롭 + Shift : 형제 노드로 추가\n" +"드래그 & 드롭 + Shift : 동기 노드로 추가\n" "드래그 & 드롭 + Alt : 노드 유형 바꾸기" #: editor/plugins/collision_polygon_editor_plugin.cpp @@ -6186,7 +6190,7 @@ msgstr "폴리곤 편집" #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Edit Poly (Remove Point)" -msgstr "폴리곤 편집 (점 삭제)" +msgstr "폴리곤 편집 (점 제거)" #: editor/plugins/collision_shape_2d_editor_plugin.cpp msgid "Set Handle" @@ -6252,7 +6256,7 @@ msgstr "방출 색상" #: editor/plugins/cpu_particles_editor_plugin.cpp msgid "CPUParticles" -msgstr "CPU파티클" +msgstr "CPUParticles" #: editor/plugins/cpu_particles_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp @@ -6302,7 +6306,7 @@ msgstr "점 추가" #: editor/plugins/curve_editor_plugin.cpp msgid "Remove Point" -msgstr "점 삭제" +msgstr "점 제거" #: editor/plugins/curve_editor_plugin.cpp msgid "Left Linear" @@ -6318,7 +6322,7 @@ msgstr "프리셋 불러오기" #: editor/plugins/curve_editor_plugin.cpp msgid "Remove Curve Point" -msgstr "곡선 점 삭제" +msgstr "곡선 점 제거" #: editor/plugins/curve_editor_plugin.cpp msgid "Toggle Curve Linear Tangent" @@ -6350,7 +6354,7 @@ msgstr "항목" #: editor/plugins/item_list_editor_plugin.cpp msgid "Item List Editor" -msgstr "항목 목록 편집기" +msgstr "항목 목록 에디터" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Create Occluder Polygon" @@ -6362,7 +6366,7 @@ msgstr "메시가 없습니다!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Couldn't create a Trimesh collision shape." -msgstr "Trimesh 충돌 모양을 만들 수 없습니다." +msgstr "Trimesh 콜리전 모양을 만들 수 없습니다." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Static Trimesh Body" @@ -6378,32 +6382,31 @@ msgstr "Trimesh Static Shape 만들기" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Can't create a single convex collision shape for the scene root." -msgstr "씬 루트에서 단일 convex 충돌 Shape를 만들 수 없습니다." +msgstr "씬 루트에서 단일 컨벡스 콜리전 모양을 만들 수 없습니다." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Couldn't create a single convex collision shape." -msgstr "단일 convex 충돌 모양을 만들 수 없습니다." +msgstr "단일 컨벡스 콜리전 모양을 만들 수 없습니다." #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Simplified Convex Shape" -msgstr "개별 Convex 모양 만들기" +msgstr "단순 컨벡스 모양 만들기" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Single Convex Shape" -msgstr "개별 Convex 모양 만들기" +msgstr "단일 컨벡스 모양 만들기" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Can't create multiple convex collision shapes for the scene root." -msgstr "씬 루트에 다중 convex 충돌 모양을 만들 수 없습니다." +msgstr "씬 루트에 다중 컨벡스 콜리전 모양을 만들 수 없습니다." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Couldn't create any collision shapes." -msgstr "충돌 모양을 만들 수 없습니다." +msgstr "콜리전 모양을 만들 수 없습니다." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Multiple Convex Shapes" -msgstr "다중 Convex Shape 만들기" +msgstr "다중 컨벡스 모양 만들기" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Navigation Mesh" @@ -6431,7 +6434,7 @@ msgstr "MeshInstance에 메시가 없습니다!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh has not surface to create outlines from!" -msgstr "메시에 윤곽을 만들 표면이 없습니다!" +msgstr "메시에 윤곽선을 만들 표면이 없습니다!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" @@ -6439,11 +6442,11 @@ msgstr "메시 기본 유형이 PRIMITIVE_TRIANGLES이 아닙니다!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" -msgstr "윤곽을 만들 수 없습니다!" +msgstr "윤곽선을 만들 수 없습니다!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline" -msgstr "윤곽 만들기" +msgstr "윤곽선 만들기" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh" @@ -6459,38 +6462,37 @@ msgid "" "automatically.\n" "This is the most accurate (but slowest) option for collision detection." msgstr "" -"StaticBody를 하나 만들고 거기에 폴리곤 기반 충돌 모양을 하나 자동으로 만들어 " -"붙입니다.\n" -"이 방법은 가장 정확한 (하지만 가장 느린) 충돌 탐지 방법입니다." +"StaticBody를 만들고 거기에 폴리곤 기반 콜리전 모양을 자동으로 만들어 붙입니" +"다.\n" +"이 방법은 가장 정확한 (하지만 가장 느린) 콜리전 탐지 방법입니다." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" -msgstr "Trimesh 충돌 형제 만들기" +msgstr "Trimesh 콜리전 동기 만들기" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "" "Creates a polygon-based collision shape.\n" "This is the most accurate (but slowest) option for collision detection." msgstr "" -"폴리곤 기반 충돌 모양을 하나 만듭니다.\n" -"이 방법은 가장 정확한 (하지만 가장 느린) 충돌 탐지 방법입니다." +"폴리곤 기반 콜리전 모양을 만듭니다.\n" +"이 방법은 가장 정확한 (하지만 가장 느린) 콜리전 탐지 방법입니다." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Single Convex Collision Sibling" -msgstr "단일 Convex 충돌 형제 만들기" +msgstr "단일 컨벡스 콜리전 동기 만들기" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "" "Creates a single convex collision shape.\n" "This is the fastest (but least accurate) option for collision detection." msgstr "" -"convex 충돌 모양을 하나 만듭니다.\n" -"이 방법은 가장 빠른 (하지만 덜 정확한) 충돌 탐지 방법입니다." +"단일 컨벡스 콜리전 모양을 만듭니다.\n" +"이 방법은 가장 빠른 (하지만 덜 정확한) 콜리전 감지 옵션입니다." #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Simplified Convex Collision Sibling" -msgstr "단일 Convex 충돌 형제 만들기" +msgstr "단순 컨벡스 콜리전 동기 만들기" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "" @@ -6498,24 +6500,27 @@ msgid "" "This is similar to single collision shape, but can result in a simpler " "geometry in some cases, at the cost of accuracy." msgstr "" +"단순 컨벡스 콜리전 모양을 만듭니다.\n" +"단일 콜리전 모양과 비슷하지만, 경우에 따라 정확도를 희생시켜 지오메트리가 더 " +"단순해지는 결과를 초래할 수 있습니다." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Multiple Convex Collision Siblings" -msgstr "다중 Convex 충돌 형제 만들기" +msgstr "다중 컨벡스 콜리전 동기 만들기" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "" "Creates a polygon-based collision shape.\n" "This is a performance middle-ground between a single convex collision and a " "polygon-based collision." msgstr "" -"폴리곤 기반 충돌 모양을 하나 만듭니다.\n" -"이 방법은 위 두 가지 옵션의 중간 정도 성능입니다." +"폴리곤 기반 콜리전 모양을 만듭니다.\n" +"이 방법은 단일 컨벡스 콜리전과 폴리곤 기반 콜리전 사이의 중간 정도 성능입니" +"다." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." -msgstr "윤곽 메시 만들기..." +msgstr "윤곽선 메시 만들기..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "" @@ -6524,7 +6529,8 @@ msgid "" "This can be used instead of the SpatialMaterial Grow property when using " "that property isn't possible." msgstr "" -"정적 외곽선 메시를 만듭니다. 외곽선 메시의 법선 벡터는 자동으로 반전됩니다.\n" +"스태틱 윤곽선 메시를 만듭니다. 윤곽선 메시의 법선 벡터는 자동으로 반전됩니" +"다.\n" "SpatialMaterial의 Grow 속성을 사용할 수 없을 때 대신 사용할 수 있습니다." #: editor/plugins/mesh_instance_editor_plugin.cpp @@ -6541,11 +6547,11 @@ msgstr "라이트맵/AO를 위한 UV2 펼치기" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh" -msgstr "윤곽 메시 만들기" +msgstr "윤곽선 메시 만들기" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Outline Size:" -msgstr "윤곽 크기:" +msgstr "윤곽선 크기:" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "UV Channel Debug" @@ -6553,7 +6559,7 @@ msgstr "UV 채널 디버그" #: editor/plugins/mesh_library_editor_plugin.cpp msgid "Remove item %d?" -msgstr "%d개의 항목을 삭제할까요?" +msgstr "항목 %d개를 제거하시겠습니까?" #: editor/plugins/mesh_library_editor_plugin.cpp msgid "" @@ -6573,10 +6579,16 @@ msgstr "항목 추가" #: editor/plugins/mesh_library_editor_plugin.cpp msgid "Remove Selected Item" -msgstr "선택한 항목 삭제" +msgstr "선택한 항목 제거" + +#: editor/plugins/mesh_library_editor_plugin.cpp +#, fuzzy +msgid "Import from Scene (Ignore Transforms)" +msgstr "씬에서 가져오기" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +#, fuzzy +msgid "Import from Scene (Apply Transforms)" msgstr "씬에서 가져오기" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -6615,7 +6627,7 @@ msgstr "표면 소스가 잘못되었습니다 (잘못된 경로)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (no geometry)." -msgstr "표면 소스가 잘못되었습니다 (형태 없음)." +msgstr "표면 소스가 잘못되었습니다 (지오메트리 없음)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (no faces)." @@ -6631,7 +6643,7 @@ msgstr "대상 표면을 선택하세요:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate Surface" -msgstr "표면 만들기" +msgstr "표면 채우기" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate MultiMesh" @@ -6671,7 +6683,7 @@ msgstr "무작위 기울기:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Random Scale:" -msgstr "무작위 크기:" +msgstr "무작위 스케일:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate" @@ -6685,7 +6697,7 @@ msgstr "내비게이션 폴리곤 만들기" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp msgid "Convert to CPUParticles" -msgstr "CPU파티클로 변환" +msgstr "CPUParticles로 변환" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generating Visibility Rect" @@ -6710,11 +6722,11 @@ msgstr "생성 시간 (초):" #: editor/plugins/particles_editor_plugin.cpp msgid "The geometry's faces don't contain any area." -msgstr "형태의 표면에 영역이 없습니다." +msgstr "지오메트리의 면에 영역이 포함되지 않습니다." #: editor/plugins/particles_editor_plugin.cpp msgid "The geometry doesn't contain any faces." -msgstr "형태에 면이 없습니다." +msgstr "지오메트리에 면이 포함되지 않습니다." #: editor/plugins/particles_editor_plugin.cpp msgid "\"%s\" doesn't inherit from Spatial." @@ -6722,11 +6734,11 @@ msgstr "\"%s\"은(는) Spatial을 상속받지 않습니다." #: editor/plugins/particles_editor_plugin.cpp msgid "\"%s\" doesn't contain geometry." -msgstr "\"%s\"에 형태가 없습니다." +msgstr "\"%s\"에 지오메트리가 포함되지 않습니다." #: editor/plugins/particles_editor_plugin.cpp msgid "\"%s\" doesn't contain face geometry." -msgstr "\"%s\"에 면 형태가 없습니다." +msgstr "\"%s\"에 면 지오메트리가 포함되지 않습니다." #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emitter" @@ -6746,7 +6758,7 @@ msgstr "표면 점+노멀 (직접)" #: editor/plugins/particles_editor_plugin.cpp msgid "Volume" -msgstr "부피" +msgstr "볼륨" #: editor/plugins/particles_editor_plugin.cpp msgid "Emission Source: " @@ -6766,15 +6778,15 @@ msgstr "가시성 AABB 만들기" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove Point from Curve" -msgstr "곡선에서 점 삭제" +msgstr "곡선에서 점 제거" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove Out-Control from Curve" -msgstr "곡선의 아웃-컨트롤 삭제" +msgstr "곡선의 아웃-컨트롤 제거" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove In-Control from Curve" -msgstr "곡선의 인-컨트롤 삭제" +msgstr "곡선의 인-컨트롤 제거" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -6879,15 +6891,15 @@ msgstr "경로 가르기" #: editor/plugins/path_editor_plugin.cpp msgid "Remove Path Point" -msgstr "경로 점 삭제" +msgstr "경로 점 제거" #: editor/plugins/path_editor_plugin.cpp msgid "Remove Out-Control Point" -msgstr "아웃-컨트롤 점 삭제" +msgstr "아웃-컨트롤 점 제거" #: editor/plugins/path_editor_plugin.cpp msgid "Remove In-Control Point" -msgstr "인-컨트롤 점 삭제" +msgstr "인-컨트롤 점 제거" #: editor/plugins/path_editor_plugin.cpp msgid "Split Segment (in curve)" @@ -6935,7 +6947,7 @@ msgstr "내부 꼭짓점 만들기" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Remove Internal Vertex" -msgstr "내부 꼭짓점 삭제" +msgstr "내부 꼭짓점 제거" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Invalid Polygon (need 3 different vertices)" @@ -6947,7 +6959,7 @@ msgstr "맞춤 폴리곤 추가" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Remove Custom Polygon" -msgstr "맞춤 폴리곤 삭제" +msgstr "맞춤 폴리곤 제거" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Transform UV Map" @@ -6963,11 +6975,11 @@ msgstr "본 가중치 칠하기" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Open Polygon 2D UV editor." -msgstr "폴리곤 2D UV 편집기 열기." +msgstr "폴리곤 2D UV 에디터를 엽니다." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon 2D UV Editor" -msgstr "폴리곤 2D UV 편집기" +msgstr "폴리곤 2D UV 에디터" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UV" @@ -6999,7 +7011,7 @@ msgstr "Shift: 모두 이동" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift+Command: Scale" -msgstr "Shift+Command: 크기 조절" +msgstr "Shift+Command: 스케일 조절" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" @@ -7007,7 +7019,7 @@ msgstr "Ctrl: 회전" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift+Ctrl: Scale" -msgstr "Shift+Ctrl: 크기 조절" +msgstr "Shift+Ctrl: 스케일 조절" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Move Polygon" @@ -7019,19 +7031,19 @@ msgstr "폴리곤 회전" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Scale Polygon" -msgstr "폴리곤 크기 조절" +msgstr "폴리곤 스케일 조절" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create a custom polygon. Enables custom polygon rendering." -msgstr "맞춤 폴리곤을 만듭니다. 맞춤 폴리곤 렌더링을 켜세요." +msgstr "맞춤 폴리곤을 만듭니다. 맞춤 폴리곤 렌더링을 활성화합니다." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "" "Remove a custom polygon. If none remain, custom polygon rendering is " "disabled." msgstr "" -"맞춤 폴리곤을 삭제합니다. 남아있는 맞춤 폴리곤이 없으면, 맞춤 폴리곤 렌더링" -"은 꺼집니다." +"맞춤 폴리곤을 제거합니다. 남아있는 맞춤 폴리곤이 없으면, 맞춤 폴리곤 렌더링" +"은 비활성화됩니다." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint weights with specified intensity." @@ -7141,7 +7153,7 @@ msgstr "유형:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp msgid "Open in Editor" -msgstr "편집기에서 열기" +msgstr "에디터에서 열기" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Load Resource" @@ -7152,22 +7164,30 @@ msgid "ResourcePreloader" msgstr "리소스 프리로더" #: editor/plugins/room_manager_editor_plugin.cpp -#, fuzzy msgid "Flip Portals" -msgstr "수평으로 뒤집기" +msgstr "포털 뒤집기" #: editor/plugins/room_manager_editor_plugin.cpp msgid "Room Generate Points" -msgstr "방 생성한 점 개수" +msgstr "룸 생성한 점 개수" #: editor/plugins/room_manager_editor_plugin.cpp msgid "Generate Points" msgstr "생성한 점 개수" #: editor/plugins/room_manager_editor_plugin.cpp -#, fuzzy msgid "Flip Portal" -msgstr "수평으로 뒤집기" +msgstr "포털 뒤집기" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "변형 지우기" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "노드 만들기" #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" @@ -7402,7 +7422,7 @@ msgstr "디버거 항상 열어놓기" #: editor/plugins/script_editor_plugin.cpp msgid "Debug with External Editor" -msgstr "외부 편집기로 디버깅" +msgstr "외부 에디터로 디버깅" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/shader_editor_plugin.cpp @@ -7411,11 +7431,11 @@ msgstr "온라인 문서" #: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation." -msgstr "Godot 온라인 설명문서를 엽니다." +msgstr "Godot 온라인 문서를 엽니다." #: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." -msgstr "참조 설명문서를 검색합니다." +msgstr "참조 문서를 검색합니다." #: editor/plugins/script_editor_plugin.cpp msgid "Go to previous edited document." @@ -7465,7 +7485,7 @@ msgstr "Target(대상)" msgid "" "Missing connected method '%s' for signal '%s' from node '%s' to node '%s'." msgstr "" -"메서드 '%s'이(가) 시그널 '%s'을 노드 '%s'에서 노드 '%s'으로 연결하지 않았습니" +"메서드 '%s'이(가) 시그널 '%s'을 노드 '%s'에서 노드 '%s'으로 연결되지 않았습니" "다." #: editor/plugins/script_text_editor.cpp @@ -7482,7 +7502,7 @@ msgstr "함수로 이동" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." -msgstr "파일 시스템의 리소스만 드롭할 수 있습니다." +msgstr "파일시스템의 리소스만 드롭할 수 있습니다." #: editor/plugins/script_text_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -7616,7 +7636,7 @@ msgstr "이전 북마크로 이동" #: editor/plugins/script_text_editor.cpp msgid "Remove All Bookmarks" -msgstr "모든 북마크 삭제" +msgstr "모든 북마크 제거" #: editor/plugins/script_text_editor.cpp msgid "Go to Function..." @@ -7633,7 +7653,7 @@ msgstr "중단점 토글" #: editor/plugins/script_text_editor.cpp msgid "Remove All Breakpoints" -msgstr "모든 중단점 삭제" +msgstr "모든 중단점 제거" #: editor/plugins/script_text_editor.cpp msgid "Go to Next Breakpoint" @@ -7657,7 +7677,7 @@ msgstr "셰이더" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "This skeleton has no bones, create some children Bone2D nodes." -msgstr "이 스켈레톤에는 본이 없습니다. Bone2D노드를 자식으로 만드세요." +msgstr "이 스켈레톤에는 본이 없습니다. Bone2D노드를 자손으로 만드세요." #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Create Rest Pose from Bones" @@ -7672,12 +7692,14 @@ msgid "Skeleton2D" msgstr "스켈레톤2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "(본의) 대기 자세 만들기" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "본을 대기 자세로 설정" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "본을 대기 자세로 설정" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "덮어 쓰기" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7697,11 +7719,76 @@ msgstr "IK 실행" #: editor/plugins/spatial_editor_plugin.cpp msgid "Orthogonal" -msgstr "직교보기" +msgstr "직교" #: editor/plugins/spatial_editor_plugin.cpp msgid "Perspective" -msgstr "원근보기" +msgstr "원근" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Orthogonal" +msgstr "직교" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Perspective" +msgstr "원근" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Orthogonal" +msgstr "직교" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "원근" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Left Orthogonal" +msgstr "직교" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Perspective" +msgstr "원근" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Orthogonal" +msgstr "직교" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Orthogonal" +msgstr "직교" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Perspective" +msgstr "원근" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Orthogonal" +msgstr "직교" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Perspective" +msgstr "원근" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." @@ -7740,7 +7827,7 @@ msgstr "이동" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scale" -msgstr "크기" +msgstr "스케일" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scaling: " @@ -7756,7 +7843,7 @@ msgstr "%s도로 회전." #: editor/plugins/spatial_editor_plugin.cpp msgid "Keying is disabled (no key inserted)." -msgstr "키가 꺼져 있습니다 (키가 삽입되지 않습니다)." +msgstr "키가 비활성화되어 있습니다 (키가 삽입되지 않습니다)." #: editor/plugins/spatial_editor_plugin.cpp msgid "Animation Key Inserted." @@ -7764,11 +7851,11 @@ msgstr "애니메이션 키를 삽입했습니다." #: editor/plugins/spatial_editor_plugin.cpp msgid "Pitch:" -msgstr "피치:" +msgstr "Pitch:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Yaw:" -msgstr "" +msgstr "Yaw:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Size:" @@ -7776,7 +7863,7 @@ msgstr "크기:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn:" -msgstr "그려진 객체:" +msgstr "그려진 오브젝트:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Material Changes:" @@ -7800,7 +7887,7 @@ msgstr "정점:" #: editor/plugins/spatial_editor_plugin.cpp msgid "FPS: %d (%s ms)" -msgstr "" +msgstr "FPS: %d (%s ms)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Top View." @@ -7811,42 +7898,22 @@ msgid "Bottom View." msgstr "아랫면 보기." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "아랫면" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "왼쪽면 보기." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "왼쪽면" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "오른쪽면 보기." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "오른쪽면" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "정면 보기." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "정면" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "뒷면 보기." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "뒷면" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "변형을 뷰에 정렬" @@ -7856,11 +7923,11 @@ msgstr "회전을 뷰에 정렬" #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." -msgstr "자식을 인스턴스할 부모가 없습니다." +msgstr "자손을 인스턴스할 부모가 없습니다." #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." -msgstr "이 작업은 하나의 노드를 선택해야 합니다." +msgstr "이 작업은 단일 노드가 선택되어야 합니다." #: editor/plugins/spatial_editor_plugin.cpp msgid "Auto Orthogonal Enabled" @@ -7912,7 +7979,7 @@ msgstr "오디오 리스너" #: editor/plugins/spatial_editor_plugin.cpp msgid "Enable Doppler" -msgstr "파동 왜곡 켜기" +msgstr "파동 왜곡 활성화" #: editor/plugins/spatial_editor_plugin.cpp msgid "Cinematic Preview" @@ -7955,9 +8022,8 @@ msgid "Freelook Slow Modifier" msgstr "자유 시점 느린 수정자" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Toggle Camera Preview" -msgstr "카메라 크기 바꾸기" +msgstr "카메라 미리 보기 토글" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Rotation Locked" @@ -7966,20 +8032,19 @@ msgstr "뷰 회전 잠김" #: editor/plugins/spatial_editor_plugin.cpp msgid "" "To zoom further, change the camera's clipping planes (View -> Settings...)" -msgstr "더욱 확대하려면, 카메라의 클립핑 평면을 변경하세요 (보기 -> 설정...)" +msgstr "더욱 확대하려면, 카메라의 클리핑 평면을 바꾸세요 (보기 -> 설정...)" #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." msgstr "" -"참고: FPS 값은 편집기의 프레임으로 표시됩니다.\n" +"참고: FPS 값은 에디터의 프레임으로 표시됩니다.\n" "이것이 게임 내 성능을 보장할 수 없습니다." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Convert Rooms" -msgstr "%s(으)로 변환" +msgstr "룸 변환" #: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" @@ -8000,7 +8065,6 @@ msgstr "" "반 열린 눈: 불투명한 표면에도 기즈모가 보입니다 (\"엑스레이\")." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Snap Nodes to Floor" msgstr "노드를 바닥에 스냅" @@ -8018,7 +8082,7 @@ msgstr "스냅 사용" #: editor/plugins/spatial_editor_plugin.cpp msgid "Converts rooms for portal culling." -msgstr "" +msgstr "포털 컬링을 위한 룸을 변환합니다." #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" @@ -8071,7 +8135,7 @@ msgstr "변형" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Object to Floor" -msgstr "개체를 바닥에 스냅" +msgstr "오브젝트를 바닥에 스냅" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Dialog..." @@ -8114,9 +8178,13 @@ msgid "View Grid" msgstr "격자 보기" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View Portal Culling" -msgstr "뷰포트 설정" +msgstr "포털 컬링 보기" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "포털 컬링 보기" #: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp @@ -8137,7 +8205,7 @@ msgstr "회전 스냅 (도):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scale Snap (%):" -msgstr "크기 스냅 (%):" +msgstr "스케일 스냅 (%):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Viewport Settings" @@ -8169,7 +8237,7 @@ msgstr "회전 (도):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scale (ratio):" -msgstr "크기 (비율):" +msgstr "스케일 (비율):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Type" @@ -8184,8 +8252,9 @@ msgid "Post" msgstr "후" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" -msgstr "이름 없는 기즈모" +#, fuzzy +msgid "Unnamed Gizmo" +msgstr "이름 없는 프로젝트" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Mesh2D" @@ -8229,7 +8298,7 @@ msgstr "애니메이션 프레임을 사용하는 스프라이트를 메시로 #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't replace by mesh." -msgstr "잘못된 형태. 메시로 대체할 수 없습니다." +msgstr "잘못된 지오메트리. 메시로 대체할 수 없습니다." #: editor/plugins/sprite_editor_plugin.cpp msgid "Convert to Mesh2D" @@ -8237,7 +8306,7 @@ msgstr "Mesh2D로 변환" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create polygon." -msgstr "잘못된 형태. 폴리곤을 만들 수 없습니다." +msgstr "잘못된 지오메트리. 폴리곤을 만들 수 없습니다." #: editor/plugins/sprite_editor_plugin.cpp msgid "Convert to Polygon2D" @@ -8245,19 +8314,19 @@ msgstr "Polygon2D로 변환" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create collision polygon." -msgstr "잘못된 형태. 충돌 폴리곤을 만들 수 없습니다." +msgstr "잘못된 지오메트리. 콜리전 폴리곤을 만들 수 없습니다." #: editor/plugins/sprite_editor_plugin.cpp msgid "Create CollisionPolygon2D Sibling" -msgstr "CollisionPolygon2D 노드 만들기" +msgstr "CollisionPolygon2D 동기 만들기" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create light occluder." -msgstr "잘못된 형태, 조명 어클루더를 만들 수 없습니다." +msgstr "잘못된 지오메트리. 조명 어클루더를 만들 수 없습니다." #: editor/plugins/sprite_editor_plugin.cpp msgid "Create LightOccluder2D Sibling" -msgstr "LightOccluder2D 노드 만들기" +msgstr "LightOccluder2D 동기 만들기" #: editor/plugins/sprite_editor_plugin.cpp msgid "Sprite" @@ -8436,24 +8505,20 @@ msgid "TextureRegion" msgstr "텍스처 영역" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Colors" -msgstr "색깔" +msgstr "색상" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Fonts" msgstr "글꼴" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Icons" msgstr "아이콘" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Styleboxes" -msgstr "스타일 박스" +msgstr "스타일박스" #: editor/plugins/theme_editor_plugin.cpp msgid "{num} color(s)" @@ -8513,12 +8578,11 @@ msgstr "항목 {n}/{n} 가져오는 중" #: editor/plugins/theme_editor_plugin.cpp msgid "Updating the editor" -msgstr "편집기를 업데이트 중" +msgstr "에디터를 업데이트 중" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Finalizing" -msgstr "분석 중" +msgstr "마무리 중" #: editor/plugins/theme_editor_plugin.cpp msgid "Filter:" @@ -8533,17 +8597,16 @@ msgid "Select by data type:" msgstr "데이터 유형 별 선택:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select all visible color items." -msgstr "지우기 위한 분할 위치를 선택하기." +msgstr "보이는 모든 색상 항목을 선택합니다." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible color items and their data." -msgstr "" +msgstr "보이는 모든 색상 항목과 그 데이터를 선택합니다." #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all visible color items." -msgstr "" +msgstr "보이는 모든 색상 항목을 선택 해제합니다." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible constant items." @@ -8551,11 +8614,11 @@ msgstr "보이는 모든 상수 항목을 선택합니다." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible constant items and their data." -msgstr "" +msgstr "보이는 모든 상수 항목과 그 데이터를 선택합니다." #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all visible constant items." -msgstr "" +msgstr "보이는 모든 상수 항목을 선택 해제합니다." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible font items." @@ -8563,11 +8626,11 @@ msgstr "보이는 모든 글꼴 항목을 선택합니다." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible font items and their data." -msgstr "" +msgstr "보이는 모든 글꼴 항목과 그 데이터를 선택합니다." #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all visible font items." -msgstr "" +msgstr "보이는 모든 글꼴 항목을 선택 해제합니다." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible icon items." @@ -8575,7 +8638,7 @@ msgstr "보이는 모든 아이콘 항목을 선택합니다." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible icon items and their data." -msgstr "보이는 모든 아이콘 항목과 그 항목의 데이터를 선택합니다." +msgstr "보이는 모든 아이콘 항목과 그 데이터를 선택합니다." #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all visible icon items." @@ -8583,21 +8646,22 @@ msgstr "보이는 모든 아이콘 항목을 선택 해제합니다." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible stylebox items." -msgstr "" +msgstr "보이는 모든 스타일박스 항목을 선택합니다." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible stylebox items and their data." -msgstr "" +msgstr "보이는 모든 스타일박스 항목과 그 데이터를 선택합니다." #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all visible stylebox items." -msgstr "" +msgstr "보이는 모든 스타일박스 항목을 선택 해제합니다." #: editor/plugins/theme_editor_plugin.cpp msgid "" "Caution: Adding icon data may considerably increase the size of your Theme " "resource." msgstr "" +"주의: 아이콘 데이터를 추가하면 테마 리소스의 크기가 상당히 커질 수 있습니다." #: editor/plugins/theme_editor_plugin.cpp msgid "Collapse types." @@ -8612,27 +8676,24 @@ msgid "Select all Theme items." msgstr "모든 테마 항목을 선택합니다." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select With Data" -msgstr "점 선택" +msgstr "데이터로 선택" #: editor/plugins/theme_editor_plugin.cpp msgid "Select all Theme items with item data." -msgstr "" +msgstr "항목 데이터가 있는 모든 테마 항목을 선택합니다." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Deselect All" -msgstr "모두 선택" +msgstr "모두 선택 해제" #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all Theme items." -msgstr "" +msgstr "모든 테마 항목을 선택 해제합니다." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Import Selected" -msgstr "씬 가져오기" +msgstr "선택된 항목 가져오기" #: editor/plugins/theme_editor_plugin.cpp msgid "" @@ -8640,278 +8701,249 @@ msgid "" "closing this window.\n" "Close anyway?" msgstr "" +"항목 가져오기 탭에 일부 항목이 선택되어 있습니다. 이 창을 닫으면 선택을 잃게 " +"됩니다.\n" +"무시하고 닫으시겠습니까?" #: editor/plugins/theme_editor_plugin.cpp msgid "" "Select a theme type from the list to edit its items.\n" "You can add a custom type or import a type with its items from another theme." msgstr "" +"테마의 항목을 편집하려면 목록에서 테마 유형을 선택하세요.\n" +"맞춤 유형을 추가하거나 다른 테마에서 테마 항목으로 유형을 가져올 수 있습니다." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Color Items" -msgstr "모든 항목 삭제" +msgstr "모든 색상 항목 제거" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Item" -msgstr "항목 삭제" +msgstr "항목 이름 바꾸기" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Constant Items" -msgstr "모든 항목 삭제" +msgstr "모든 상수 항목 제거" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Font Items" -msgstr "모든 항목 삭제" +msgstr "모든 글꼴 항목 제거" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Icon Items" -msgstr "모든 항목 삭제" +msgstr "모든 아이콘 항목 제거" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All StyleBox Items" -msgstr "모든 항목 삭제" +msgstr "모든 스타일박스 항목 제거" #: editor/plugins/theme_editor_plugin.cpp msgid "" "This theme type is empty.\n" "Add more items to it manually or by importing from another theme." msgstr "" +"이 테마 유형은 비어 있습니다.\n" +"직접 또는 다른 테마에서 가져와서 테마에 더 많은 항목을 추가하세요." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Color Item" -msgstr "클래스 항목 추가" +msgstr "색상 항목 추가" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Constant Item" -msgstr "클래스 항목 추가" +msgstr "상수 항목 추가" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Font Item" -msgstr "항목 추가" +msgstr "글꼴 항목 추가" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Icon Item" -msgstr "항목 추가" +msgstr "아이콘 항목 추가" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Stylebox Item" -msgstr "모든 항목 추가" +msgstr "스타일박스 항목 추가" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Color Item" -msgstr "클래스 항목 삭제" +msgstr "색상 항목 이름 바꾸기" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Constant Item" -msgstr "클래스 항목 삭제" +msgstr "상수 항목 이름 바꾸기" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Font Item" -msgstr "노드 이름 바꾸기" +msgstr "글꼴 항목 이름 바꾸기" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Icon Item" -msgstr "노드 이름 바꾸기" +msgstr "아이콘 항목 이름 바꾸기" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Stylebox Item" -msgstr "선택한 항목 삭제" +msgstr "스타일박스 항목 이름 바꾸기" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Invalid file, not a Theme resource." -msgstr "잘못된 파일. 오디오 버스 레이아웃이 아닙니다." +msgstr "잘못된 파일, 테마 리소스가 아닙니다." #: editor/plugins/theme_editor_plugin.cpp msgid "Invalid file, same as the edited Theme resource." -msgstr "" +msgstr "잘못된 파일, 편집된 테마 리소스와 같습니다." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Manage Theme Items" -msgstr "템플릿 관리" +msgstr "테마 항목 관리" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Edit Items" -msgstr "편집할 수 있는 항목" +msgstr "항목 편집" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Types:" msgstr "유형:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Type:" -msgstr "유형:" +msgstr "유형 추가:" #: editor/plugins/theme_editor_plugin.cpp msgid "Add Item:" msgstr "항목 추가:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add StyleBox Item" -msgstr "모든 항목 추가" +msgstr "스타일박스 항목 추가" #: editor/plugins/theme_editor_plugin.cpp msgid "Remove Items:" -msgstr "항목 삭제:" +msgstr "항목 제거:" #: editor/plugins/theme_editor_plugin.cpp msgid "Remove Class Items" -msgstr "클래스 항목 삭제" +msgstr "클래스 항목 제거" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove Custom Items" -msgstr "클래스 항목 삭제" +msgstr "맞춤 항목 제거" #: editor/plugins/theme_editor_plugin.cpp msgid "Remove All Items" -msgstr "모든 항목 삭제" +msgstr "모든 항목 제거" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Theme Item" -msgstr "GUI 테마 항목" +msgstr "테마 항목 추가" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Old Name:" -msgstr "노드 이름:" +msgstr "이전 이름:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Import Items" -msgstr "테마 가져오기" +msgstr "항목 가져오기" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Default Theme" -msgstr "기본" +msgstr "디폴트 테마" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Editor Theme" -msgstr "테마 편집" +msgstr "테마 에디터" #: editor/plugins/theme_editor_plugin.cpp msgid "Select Another Theme Resource:" msgstr "다른 테마 리소스 선택:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Another Theme" -msgstr "테마 가져오기" +msgstr "다른 테마" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Confirm Item Rename" -msgstr "애니메이션 트랙 이름 변경" +msgstr "항목 이름 바꾸기 확인" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Cancel Item Rename" -msgstr "일괄 이름 바꾸기" +msgstr "항목 이름 바꾸기 취소" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Override Item" -msgstr "재정의" +msgstr "항목 재정의" #: editor/plugins/theme_editor_plugin.cpp msgid "Unpin this StyleBox as a main style." -msgstr "" +msgstr "이 스타일박스를 주 스타일로 고정을 해제합니다." #: editor/plugins/theme_editor_plugin.cpp msgid "" "Pin this StyleBox as a main style. Editing its properties will update the " "same properties in all other StyleBoxes of this type." msgstr "" +"스타일박스를 주 스타일로 고정합니다. 속성을 편집하면 이 유형의 다른 모든 스타" +"일박스에서 같은 속성이 업데이트됩니다." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Type" -msgstr "유형" +msgstr "유형 추가" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Item Type" -msgstr "항목 추가" +msgstr "항목 유형 추가" #: editor/plugins/theme_editor_plugin.cpp msgid "Node Types:" msgstr "노드 유형:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Show Default" -msgstr "기본값 불러오기" +msgstr "디폴트 보이기" #: editor/plugins/theme_editor_plugin.cpp msgid "Show default type items alongside items that have been overridden." -msgstr "" +msgstr "재정의된 항목 옆에 디폴트 유형 항목을 보여줍니다." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Override All" -msgstr "재정의" +msgstr "모두 재정의" #: editor/plugins/theme_editor_plugin.cpp msgid "Override all default type items." -msgstr "" +msgstr "모든 디폴트 유형 항목을 재정의합니다." #: editor/plugins/theme_editor_plugin.cpp msgid "Theme:" msgstr "테마:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Manage Items..." -msgstr "내보내기 템플릿 관리..." +msgstr "항목 관리..." #: editor/plugins/theme_editor_plugin.cpp msgid "Add, remove, organize and import Theme items." -msgstr "" +msgstr "테마 항목을 추가, 제거, 구성 및 가져옵니다." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Preview" -msgstr "미리 보기" +msgstr "미리 보기 추가" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Default Preview" -msgstr "업데이트 미리 보기" +msgstr "디폴트 미리 보기" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select UI Scene:" -msgstr "소스 메시를 선택하세요:" +msgstr "UI 씬을 선택하세요:" #: editor/plugins/theme_editor_preview.cpp msgid "" "Toggle the control picker, allowing to visually select control types for " "edit." msgstr "" +"컨트롤 선택기를 토글하여, 편집할 컨트롤 유형을 시각적으로 선택할 수 있게 합니" +"다." #: editor/plugins/theme_editor_preview.cpp msgid "Toggle Button" @@ -8919,7 +8951,7 @@ msgstr "토글 버튼" #: editor/plugins/theme_editor_preview.cpp msgid "Disabled Button" -msgstr "꺼진 버튼" +msgstr "비활성화된 버튼" #: editor/plugins/theme_editor_preview.cpp msgid "Item" @@ -8927,7 +8959,7 @@ msgstr "항목" #: editor/plugins/theme_editor_preview.cpp msgid "Disabled Item" -msgstr "꺼진 항목" +msgstr "비활성화된 항목" #: editor/plugins/theme_editor_preview.cpp msgid "Check Item" @@ -8971,7 +9003,7 @@ msgstr "많은" #: editor/plugins/theme_editor_preview.cpp msgid "Disabled LineEdit" -msgstr "꺼진 LineEdit" +msgstr "비활성화된 LineEdit" #: editor/plugins/theme_editor_preview.cpp msgid "Tab 1" @@ -8999,20 +9031,19 @@ msgstr "많은,옵션,갖춤" #: editor/plugins/theme_editor_preview.cpp msgid "Invalid path, the PackedScene resource was probably moved or removed." -msgstr "" +msgstr "잘못된 경로, PackedScene 리소스가 이동되었거나 제거되었을 수 있습니다." #: editor/plugins/theme_editor_preview.cpp msgid "Invalid PackedScene resource, must have a Control node at its root." -msgstr "" +msgstr "잘못된 PackedScene 리소스, 루트에 컨트롤 노드가 있어야 합니다." #: editor/plugins/theme_editor_preview.cpp -#, fuzzy msgid "Invalid file, not a PackedScene resource." -msgstr "잘못된 파일. 오디오 버스 레이아웃이 아닙니다." +msgstr "잘못된 파일, PackedScene 리소스가 아닙니다." #: editor/plugins/theme_editor_preview.cpp msgid "Reload the scene to reflect its most actual state." -msgstr "" +msgstr "씬을 새로 고쳐 가장 실제 상태를 반영합니다." #: editor/plugins/tile_map_editor_plugin.cpp msgid "Erase Selection" @@ -9057,11 +9088,11 @@ msgstr "행렬 맞바꾸기" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Disable Autotile" -msgstr "오토타일 끄기" +msgstr "오토타일 비활성화" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Enable Priority" -msgstr "우선 순위 켜기" +msgstr "우선 순위 활성화" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Filter tiles" @@ -9121,7 +9152,7 @@ msgstr "TileSet에 텍스처를 추가합니다." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected Texture from TileSet." -msgstr "선택된 텍스처를 TileSet에서 삭제합니다." +msgstr "선택된 텍스처를 TileSet에서 제거합니다." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -9165,7 +9196,7 @@ msgstr "영역" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Collision" -msgstr "충돌" +msgstr "콜리전" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Occlusion" @@ -9197,7 +9228,7 @@ msgstr "영역 모드" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Collision Mode" -msgstr "충돌 모드" +msgstr "콜리전 모드" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Occlusion Mode" @@ -9257,11 +9288,11 @@ msgstr "선택된 모양 삭제" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Keep polygon inside region Rect." -msgstr "사각형 영역 내에 폴리곤을 유지합니다." +msgstr "사각형 영역 안에 폴리곤을 유지합니다." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Enable snap and show grid (configurable via the Inspector)." -msgstr "스냅을 켜고 격자를 보이기 (인스펙터를 통해 설정함)." +msgstr "스냅을 활성화하고 격자를 보여줍니다 (인스펙터를 통해 구성함)." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Display Tile Names (Hold Alt Key)" @@ -9276,23 +9307,24 @@ msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "" -"선택한 텍스처를 삭제할까요? 이 텍스처를 사용하는 모든 타일도 삭제될 것입니다." +"선택한 텍스처를 제거하시겠습니까? 이 텍스처를 사용하는 모든 타일도 제거됩니" +"다." #: editor/plugins/tile_set_editor_plugin.cpp msgid "You haven't selected a texture to remove." -msgstr "삭제할 텍스처를 선택하지 않았습니다." +msgstr "제거할 텍스처를 선택하지 않았습니다." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from scene? This will overwrite all current tiles." -msgstr "씬에서 만들까요? 모든 현재 파일을 덮어 씌울 것입니다." +msgstr "씬에서 만드시겠습니까? 모든 현재 파일을 덮어 씌울 것입니다." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Merge from scene?" -msgstr "씬에서 병합할까요?" +msgstr "씬에서 병합하시겠습니까?" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove Texture" -msgstr "텍스처 삭제" +msgstr "텍스처 제거" #: editor/plugins/tile_set_editor_plugin.cpp msgid "%s file(s) were not added because was already on the list." @@ -9378,7 +9410,7 @@ msgstr "타일 비트 마스크 편집" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Edit Collision Polygon" -msgstr "충돌 폴리곤 편집" +msgstr "콜리전 폴리곤 편집" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Edit Occlusion Polygon" @@ -9402,23 +9434,23 @@ msgstr "오목한 폴리곤 만들기" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Make Polygon Convex" -msgstr "볼록한 폴리곤 만들기" +msgstr "폴리곤을 볼록하게 만들기" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove Tile" -msgstr "타일 삭제" +msgstr "타일 제거" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove Collision Polygon" -msgstr "충돌 폴리곤 삭제" +msgstr "콜리전 폴리곤 제거" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove Occlusion Polygon" -msgstr "어클루전 폴리곤 삭제" +msgstr "어클루전 폴리곤 제거" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove Navigation Polygon" -msgstr "내비게이션 폴리곤 삭제" +msgstr "내비게이션 폴리곤 제거" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Edit Tile Priority" @@ -9438,7 +9470,7 @@ msgstr "오목하게 만들기" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create Collision Polygon" -msgstr "내비게이션 충돌 폴리곤 만들기" +msgstr "콜리전 폴리곤 만들기" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create Occlusion Polygon" @@ -9558,11 +9590,11 @@ msgstr "샘플러" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" -msgstr "입력 포트 추가하기" +msgstr "입력 포트 추가" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add output port" -msgstr "출력 포트 추가하기" +msgstr "출력 포트 추가" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Change input port type" @@ -9582,11 +9614,11 @@ msgstr "출력 포트 이름 바꾸기" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Remove input port" -msgstr "입력 포트 삭제하기" +msgstr "입력 포트 제거" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Remove output port" -msgstr "출력 포트 삭제하기" +msgstr "출력 포트 제거" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Set expression" @@ -9594,7 +9626,7 @@ msgstr "표현식 설정" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Resize VisualShader node" -msgstr "비주얼 셰이더 노드 크기 조정" +msgstr "비주얼셰이더 노드 크기 조정" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Set Uniform Name" @@ -9602,7 +9634,7 @@ msgstr "Uniform 이름 설정" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Set Input Default Port" -msgstr "입력 기본 포트 설정" +msgstr "입력 디폴트 포트 설정" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add Node to Visual Shader" @@ -9647,7 +9679,7 @@ msgstr "조명" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Show resulted shader code." -msgstr "결과 셰이더 코드 보이기." +msgstr "결과 셰이더 코드를 보여줍니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Create Shader Node" @@ -10308,7 +10340,7 @@ msgid "" "light function, do not use it to write the function declarations inside." msgstr "" "맞춤 입력 및 출력 포트로 이루어진, 맞춤 Godot 셰이더 언어 명령문. 꼭짓점/프래" -"그먼트/조명 함수에 직접 코드를 넣는 것이므로 코드 내에 함수 선언을 작성하는 " +"그먼트/조명 함수에 직접 코드를 넣는 것이므로 코드 안에 함수 선언을 작성하는 " "용도로 쓰지 마세요." #: editor/plugins/visual_shader_editor_plugin.cpp @@ -10326,9 +10358,9 @@ msgid "" "it later in the Expressions. You can also declare varyings, uniforms and " "constants." msgstr "" -"결과 셰이더 위에 배치된, 맞춤 Godot 셰이더 언어 표현식. 다양한 함수 선언을 놓" -"은 뒤 나중에 표현식에서 호출할 수 있습니다. Varying, Uniform, 상수도 정의할 " -"수 있습니다." +"결과 셰이더 위에 배치된, 맞춤 Godot 셰이더 언어 표현식. 다양한 함수 선언을 안" +"에 놓은 뒤 나중에 표현식에서 호출할 수 있습니다. Varying, Uniform, 상수도 선" +"언할 수 있습니다." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "A reference to an existing uniform." @@ -10382,7 +10414,7 @@ msgstr "(프래그먼트/조명 모드만 가능) (스칼라) 'x'와 'y'의 절 #: editor/plugins/visual_shader_editor_plugin.cpp msgid "VisualShader" -msgstr "비주얼 셰이더" +msgstr "비주얼셰이더" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Edit Visual Property:" @@ -10398,7 +10430,7 @@ msgstr "실행가능" #: editor/project_export.cpp msgid "Delete preset '%s'?" -msgstr "'%s' 프리셋을 삭제할까요?" +msgstr "'%s' 프리셋을 삭제하시겠습니까?" #: editor/project_export.cpp msgid "" @@ -10510,9 +10542,8 @@ msgid "Script" msgstr "스크립트" #: editor/project_export.cpp -#, fuzzy msgid "GDScript Export Mode:" -msgstr "스크립트 내보내기 모드:" +msgstr "GDScript 내보내기 모드:" #: editor/project_export.cpp msgid "Text" @@ -10520,21 +10551,19 @@ msgstr "텍스트" #: editor/project_export.cpp msgid "Compiled Bytecode (Faster Loading)" -msgstr "" +msgstr "컴파일된 바이트코드 (더 빠른 불러오기)" #: editor/project_export.cpp msgid "Encrypted (Provide Key Below)" msgstr "암호화 (아래에 키가 필요합니다)" #: editor/project_export.cpp -#, fuzzy msgid "Invalid Encryption Key (must be 64 hexadecimal characters long)" -msgstr "잘못된 암호화 키 (길이가 64자이어야 합니다)" +msgstr "잘못된 암호화 키 (길이가 16진수 형식의 64자이어야 합니다)" #: editor/project_export.cpp -#, fuzzy msgid "GDScript Encryption Key (256-bits as hexadecimal):" -msgstr "스크립트 암호화 키 (256-비트를 hex 형식으로):" +msgstr "GDScript 암호화 키 (256-비트를 16진수 형식으로):" #: editor/project_export.cpp msgid "Export PCK/Zip" @@ -10562,7 +10591,7 @@ msgstr "Godot 게임 팩" #: editor/project_export.cpp msgid "Export templates for this platform are missing:" -msgstr "이 플랫폼에 대한 내보내기 템플릿이 없음:" +msgstr "이 플랫폼에 대한 내보내기 템플릿이 누락됨:" #: editor/project_export.cpp msgid "Manage Export Templates" @@ -10608,9 +10637,8 @@ msgid "Imported Project" msgstr "가져온 프로젝트" #: editor/project_manager.cpp -#, fuzzy msgid "Invalid project name." -msgstr "잘못된 프로젝트 이름." +msgstr "잘못된 프로젝트 이름입니다." #: editor/project_manager.cpp msgid "Couldn't create folder." @@ -10750,7 +10778,7 @@ msgstr "누락된 프로젝트" #: editor/project_manager.cpp msgid "Error: Project is missing on the filesystem." -msgstr "오류: 프로젝트가 파일 시스템에서 누락되었습니다." +msgstr "오류: 프로젝트가 파일시스템에서 누락되었습니다." #: editor/project_manager.cpp msgid "Can't open project at '%s'." @@ -10830,34 +10858,34 @@ msgstr "한 번에 %d개의 프로젝트를 실행할 건가요?" #: editor/project_manager.cpp msgid "Remove %d projects from the list?" -msgstr "목록에서 프로젝트 %d개를 삭제하시겠습니까?" +msgstr "목록에서 프로젝트 %d개를 제거하시겠습니까?" #: editor/project_manager.cpp msgid "Remove this project from the list?" -msgstr "목록에서 이 프로젝트를 삭제하시겠습니까?" +msgstr "목록에서 이 프로젝트를 제거하시겠습니까?" #: editor/project_manager.cpp msgid "" "Remove all missing projects from the list?\n" "The project folders' contents won't be modified." msgstr "" -"모든 누락된 프로젝트를 삭제할까요?\n" -"프로젝트 폴더의 내용은 수정되지 않습니다." +"모든 누락된 프로젝트를 목록에서 제거하시겠습니까?\n" +"프로젝트 폴더의 콘텐츠는 수정되지 않습니다." #: editor/project_manager.cpp msgid "" "Language changed.\n" "The interface will update after restarting the editor or project manager." msgstr "" -"언어가 바뀌었.\n" -"인터페이스는 편집기나 프로젝트 매니저를 다시 켜면 적용됩니다." +"언어가 바뀌었습니다.\n" +"인터페이스는 에디터나 프로젝트 매니저를 다시 시작하고 나서 갱신됩니다." #: editor/project_manager.cpp msgid "" "Are you sure to scan %s folders for existing Godot projects?\n" "This could take a while." msgstr "" -"Godot 프로젝트를 확인하기 위해 %s 폴더를 스캔할까요?\n" +"Godot 프로젝트를 확인하기 위해 %s 폴더를 스캔하시겠습니까?\n" "시간이 걸릴 수 있습니다." #. TRANSLATORS: This refers to the application where users manage their Godot projects. @@ -10866,9 +10894,8 @@ msgid "Project Manager" msgstr "프로젝트 매니저" #: editor/project_manager.cpp -#, fuzzy msgid "Local Projects" -msgstr "프로젝트" +msgstr "로컬 프로젝트" #: editor/project_manager.cpp msgid "Loading, please wait..." @@ -10879,23 +10906,20 @@ msgid "Last Modified" msgstr "마지막으로 수정됨" #: editor/project_manager.cpp -#, fuzzy msgid "Edit Project" -msgstr "프로젝트 내보내기" +msgstr "프로젝트 편집" #: editor/project_manager.cpp -#, fuzzy msgid "Run Project" -msgstr "프로젝트 이름 바꾸기" +msgstr "프로젝트 실행" #: editor/project_manager.cpp msgid "Scan" msgstr "스캔" #: editor/project_manager.cpp -#, fuzzy msgid "Scan Projects" -msgstr "프로젝트" +msgstr "프로젝트 스캔" #: editor/project_manager.cpp msgid "Select a Folder to Scan" @@ -10906,27 +10930,24 @@ msgid "New Project" msgstr "새 프로젝트" #: editor/project_manager.cpp -#, fuzzy msgid "Import Project" -msgstr "가져온 프로젝트" +msgstr "프로젝트 가져오기" #: editor/project_manager.cpp -#, fuzzy msgid "Remove Project" -msgstr "프로젝트 이름 바꾸기" +msgstr "프로젝트 제거" #: editor/project_manager.cpp msgid "Remove Missing" -msgstr "누락된 부분 삭제" +msgstr "누락된 부분 제거" #: editor/project_manager.cpp msgid "About" msgstr "정보" #: editor/project_manager.cpp -#, fuzzy msgid "Asset Library Projects" -msgstr "애셋 라이브러리" +msgstr "애셋 라이브러리 프로젝트" #: editor/project_manager.cpp msgid "Restart Now" @@ -10934,11 +10955,11 @@ msgstr "지금 다시 시작" #: editor/project_manager.cpp msgid "Remove All" -msgstr "모두 삭제" +msgstr "모두 제거" #: editor/project_manager.cpp msgid "Also delete project contents (no undo!)" -msgstr "" +msgstr "프로젝트 콘텐츠도 삭제 (되돌릴 수 없습니다!)" #: editor/project_manager.cpp msgid "Can't run project" @@ -10953,20 +10974,18 @@ msgstr "" "애셋 라이브러리에서 공식 예제 프로젝트를 찾아볼까요?" #: editor/project_manager.cpp -#, fuzzy msgid "Filter projects" -msgstr "필터 속성" +msgstr "프로젝트 필터" #: editor/project_manager.cpp -#, fuzzy msgid "" "This field filters projects by name and last path component.\n" "To filter projects by name and full path, the query must contain at least " "one `/` character." msgstr "" -"이 검색창은 프로젝트를 이름과 경로의 마지막 부분으로 거릅니다.\n" -"프로젝트를 전체 경로를 기준으로 걸러내려면 검색어에 `/` 가 한 글자 이상 포함" -"시키세요." +"이 필드는 프로젝트를 이름과 경로의 마지막 부분으로 거릅니다.\n" +"프로젝트를 이름과 전체 경로를 기준으로 걸러내려면, 검색어에 `/`를 한 글자 이" +"상 포함시켜야 합니다." #: editor/project_settings_editor.cpp msgid "Key " @@ -10974,7 +10993,7 @@ msgstr "키 " #: editor/project_settings_editor.cpp msgid "Physical Key" -msgstr "" +msgstr "물리 키" #: editor/project_settings_editor.cpp msgid "Joy Button" @@ -11022,7 +11041,7 @@ msgstr "기기" #: editor/project_settings_editor.cpp msgid " (Physical)" -msgstr "" +msgstr " (물리)" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "Press a Key..." @@ -11165,23 +11184,20 @@ msgid "Override for Feature" msgstr "기능 재정의" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Add %d Translations" -msgstr "번역 추가" +msgstr "번역 %d개 추가" #: editor/project_settings_editor.cpp msgid "Remove Translation" -msgstr "번역 삭제" +msgstr "번역 제거" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Translation Resource Remap: Add %d Path(s)" -msgstr "리소스 리맵핑 추가" +msgstr "리소스 리맵핑 번역: 경로 %d개 추가" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Translation Resource Remap: Add %d Remap(s)" -msgstr "리소스 리맵핑 추가" +msgstr "리소스 리맵핑 번역: 리매핑 %d개 추가" #: editor/project_settings_editor.cpp msgid "Change Resource Remap Language" @@ -11189,11 +11205,11 @@ msgstr "리소스 리맵핑 언어 바꾸기" #: editor/project_settings_editor.cpp msgid "Remove Resource Remap" -msgstr "리소스 리맵핑 삭제" +msgstr "리소스 리맵핑 제거" #: editor/project_settings_editor.cpp msgid "Remove Resource Remap Option" -msgstr "리소스 리맵핑 설정 삭제" +msgstr "리소스 리맵핑 옵션 제거" #: editor/project_settings_editor.cpp msgid "Changed Locale Filter" @@ -11213,11 +11229,11 @@ msgstr "일반" #: editor/project_settings_editor.cpp msgid "Override For..." -msgstr "재정의..." +msgstr "재정의 대상..." #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "The editor must be restarted for changes to take effect." -msgstr "변경 사항을 적용하려면 편집기를 다시 켜야 합니다." +msgstr "변경 사항을 반영하려면 에디터를 다시 시작해야 합니다." #: editor/project_settings_editor.cpp msgid "Input Map" @@ -11277,11 +11293,11 @@ msgstr "로케일 필터" #: editor/project_settings_editor.cpp msgid "Show All Locales" -msgstr "모든 로케일 보기" +msgstr "모든 로케일 보이기" #: editor/project_settings_editor.cpp msgid "Show Selected Locales Only" -msgstr "선택한 로케일만 보기" +msgstr "선택한 로케일만 보이기" #: editor/project_settings_editor.cpp msgid "Filter mode:" @@ -11301,7 +11317,7 @@ msgstr "플러그인(Plugin)" #: editor/project_settings_editor.cpp msgid "Import Defaults" -msgstr "기본값 가져오기" +msgstr "디폴트 가져오기" #: editor/property_editor.cpp msgid "Preset..." @@ -11413,7 +11429,7 @@ msgid "" "Compare counter options." msgstr "" "순차 정수 카운터.\n" -"카운터 옵션과 비교합니다." +"카운터 옵션을 비교합니다." #: editor/rename_dialog.cpp msgid "Per-level Counter" @@ -11421,7 +11437,7 @@ msgstr "단계별 카운터" #: editor/rename_dialog.cpp msgid "If set, the counter restarts for each group of child nodes." -msgstr "설정하면 각 그룹의 자식 노드의 카운터를 다시 시작합니다." +msgstr "설정하면 각 그룹의 자손 노드의 카운터를 다시 시작합니다." #: editor/rename_dialog.cpp msgid "Initial value for the counter" @@ -11551,7 +11567,7 @@ msgstr "가지 씬으로 교체" #: editor/scene_tree_dock.cpp msgid "Instance Child Scene" -msgstr "자식 씬 인스턴스화" +msgstr "자손 씬 인스턴스화" #: editor/scene_tree_dock.cpp msgid "Can't paste root node into the same scene." @@ -11601,7 +11617,7 @@ msgstr "노드를 루트로 만들기" #: editor/scene_tree_dock.cpp msgid "Delete %d nodes and any children?" -msgstr "%d 개의 노드와 모든 자식 노드를 삭제할까요?" +msgstr "%d 개의 노드와 모든 자손 노드를 삭제할까요?" #: editor/scene_tree_dock.cpp msgid "Delete %d nodes?" @@ -11613,7 +11629,7 @@ msgstr "루트 노드 \"%s\"을(를) 삭제할까요?" #: editor/scene_tree_dock.cpp msgid "Delete node \"%s\" and its children?" -msgstr "노드 \"%s\"와(과) 자식을 삭제할까요?" +msgstr "노드 \"%s\"와(과) 자손을 삭제할까요?" #: editor/scene_tree_dock.cpp msgid "Delete node \"%s\"?" @@ -11622,13 +11638,15 @@ msgstr "노드 \"%s\"을(를) 삭제할까요?" #: editor/scene_tree_dock.cpp msgid "" "Saving the branch as a scene requires having a scene open in the editor." -msgstr "" +msgstr "가지를 씬으로 저장하려면 에디터에서 씬을 열어야 합니다." #: editor/scene_tree_dock.cpp msgid "" "Saving the branch as a scene requires selecting only one node, but you have " "selected %d nodes." msgstr "" +"가지를 씬으로 저장하려면 노드 한 개만 선택해야 하지만, 노드 %d개가 선택되어 " +"있습니다." #: editor/scene_tree_dock.cpp msgid "" @@ -11637,6 +11655,10 @@ msgid "" "FileSystem dock context menu\n" "or create an inherited scene using Scene > New Inherited Scene... instead." msgstr "" +"루트 노드 가지를 인스턴스된 씬으로 저장할 수 없습니다.\n" +"현재 씬의 편집 가능한 복사본을 만드려면, 파일시스템 독 컨텍스트 메뉴를 사용하" +"여 복제하거나\n" +"상속 씬을 씬 > 새 상속 씬...을 대신 사용하여 만드세요." #: editor/scene_tree_dock.cpp msgid "" @@ -11644,6 +11666,9 @@ msgid "" "To create a variation of a scene, you can make an inherited scene based on " "the instanced scene using Scene > New Inherited Scene... instead." msgstr "" +"이미 인스턴스된 씬의 가지를 저장할 수 없습니다.\n" +"씬의 바리에이션을 만드려면, 인스턴스된 씬을 바탕으로 상속 씬을 씬 > 새 상속 " +"씬...을 대신 사용하여 만들 수 있습니다." #: editor/scene_tree_dock.cpp msgid "Save New Scene As..." @@ -11654,15 +11679,15 @@ msgid "" "Disabling \"editable_instance\" will cause all properties of the node to be " "reverted to their default." msgstr "" -"\"editable_instance\"를 끄게 되면 노드의 모든 속성이 기본 값으로 복원됩니다." +"\"editable_instance\"가 비활성화되면 노드의 모든 속성이 디폴트로 복원됩니다." #: editor/scene_tree_dock.cpp msgid "" "Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " "cause all properties of the node to be reverted to their default." msgstr "" -"\"자리 표시자로 불러오기\"를 켜면 \"편집할 수 있는 자식\" 설정이 꺼지고, 그러" -"면 그 노드의 모든 속성이 기본값으로 복원됩니다." +"\"자리 표시자로 불러오기\"를 활성화하면 \"편집할 수 있는 자손\" 설정이 비활성" +"화되고, 그러면 그 노드의 모든 속성이 디폴트로 복원됩니다." #: editor/scene_tree_dock.cpp msgid "Make Local" @@ -11714,7 +11739,7 @@ msgstr "노드 잘라내기" #: editor/scene_tree_dock.cpp msgid "Remove Node(s)" -msgstr "노드 삭제" +msgstr "노드 제거" #: editor/scene_tree_dock.cpp msgid "Change type of node(s)" @@ -11745,7 +11770,7 @@ msgstr "상속 지우기" #: editor/scene_tree_dock.cpp msgid "Editable Children" -msgstr "편집할 수 있는 자식" +msgstr "편집할 수 있는 자손" #: editor/scene_tree_dock.cpp msgid "Load As Placeholder" @@ -11758,11 +11783,11 @@ msgid "" "disabled." msgstr "" "스크립트를 붙일 수 없습니다: 언어가 하나도 등록되지 않았습니다.\n" -"에디터가 모든 언어를 비활성화한 채로 빌드되어서 그럴 가능성이 높습니다." +"에디터가 모든 언어 모듈을 비활성화한 채로 빌드되어서 그럴 가능성이 높습니다." #: editor/scene_tree_dock.cpp msgid "Add Child Node" -msgstr "자식 노드 추가" +msgstr "자손 노드 추가" #: editor/scene_tree_dock.cpp msgid "Expand/Collapse All" @@ -11898,7 +11923,7 @@ msgid "" "Children are not selectable.\n" "Click to make selectable." msgstr "" -"자식을 선택할 수 없습니다.\n" +"자손을 선택할 수 없습니다.\n" "클릭하면 선택할 수 있습니다." #: editor/scene_tree_editor.cpp @@ -11971,7 +11996,7 @@ msgstr "'%s' 템플릿 불러오는 중 오류" #: editor/script_create_dialog.cpp msgid "Error - Could not create script in filesystem." -msgstr "오류 - 파일 시스템에 스크립트를 만들 수 없습니다." +msgstr "오류 - 파일시스템에 스크립트를 만들 수 없습니다." #: editor/script_create_dialog.cpp msgid "Error loading script from %s" @@ -12038,7 +12063,7 @@ msgid "" "Note: Built-in scripts have some limitations and can't be edited using an " "external editor." msgstr "" -"참고: 내장 스크립트에는 일부 제한 사항이 있으며 외부 편집기를 사용하여 편집" +"참고: 내장 스크립트에는 일부 제한 사항이 있으며 외부 에디터를 사용하여 편집" "할 수 없습니다." #: editor/script_create_dialog.cpp @@ -12046,6 +12071,8 @@ msgid "" "Warning: Having the script name be the same as a built-in type is usually " "not desired." msgstr "" +"경고: 스크립트 이름을 내장 유형과 같게 정하는 적은 일반적으로 바람직하지 않습" +"니다." #: editor/script_create_dialog.cpp msgid "Class Name:" @@ -12109,7 +12136,7 @@ msgstr "오류" #: editor/script_editor_debugger.cpp msgid "Child process connected." -msgstr "자식 프로세스 연결됨." +msgstr "자손 프로세스 연결됨." #: editor/script_editor_debugger.cpp msgid "Copy Error" @@ -12117,7 +12144,7 @@ msgstr "복사 오류" #: editor/script_editor_debugger.cpp msgid "Open C++ Source on GitHub" -msgstr "" +msgstr "GitHub에서 C++ 소스 열기" #: editor/script_editor_debugger.cpp msgid "Video RAM" @@ -12229,7 +12256,7 @@ msgstr "단축키 바꾸기" #: editor/settings_config_dialog.cpp msgid "Editor Settings" -msgstr "편집기 설정" +msgstr "에디터 설정" #: editor/settings_config_dialog.cpp msgid "Shortcuts" @@ -12296,14 +12323,22 @@ msgid "Change Ray Shape Length" msgstr "광선 모양 길이 바꾸기" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Set Room Point Position" -msgstr "곡선 점 위치 설정" +msgstr "룸 점 위치 설정" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Set Portal Point Position" -msgstr "곡선 점 위치 설정" +msgstr "포털 점 위치 설정" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Radius" +msgstr "캡슐 모양 반지름 바꾸기" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr "곡선의 인 위치 설정" #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" @@ -12331,7 +12366,7 @@ msgstr "이 항목의 동적 라이브러리의 종속 관계를 선택" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Remove current entry" -msgstr "현재 엔트리 삭제" +msgstr "현재 엔트리 제거" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Double click to create a new entry" @@ -12359,11 +12394,11 @@ msgstr "GDNative 라이브러리" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Enabled GDNative Singleton" -msgstr "켜진 GDNative 싱글톤" +msgstr "활성화된 GDNative 싱글톤" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Disabled GDNative Singleton" -msgstr "꺼진 GDNative 싱글톤" +msgstr "비활성화된 GDNative 싱글톤" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Library" @@ -12395,33 +12430,31 @@ msgstr "리소스 파일에 기반하지 않음" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (missing @path)" -msgstr "잘못된 인스턴스 Dictionary 형식 (@path 없음)" +msgstr "잘못된 인스턴스 딕셔너리 형식 (@path 누락됨)" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (can't load script at @path)" -msgstr "잘못된 인스턴스 Dictionary 형식 (@path 에서 스크립트를 불러올 수 없음)" +msgstr "잘못된 인스턴스 딕셔너리 형식 (@path에서 스크립트를 불러올 수 없음)" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (invalid script at @path)" -msgstr "잘못된 인스턴스 Dictionary 형식 (@path의 스크립트가 올바르지 않음)" +msgstr "잘못된 인스턴스 딕셔너리 형식 (잘못된 @path의 스크립트)" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary (invalid subclasses)" -msgstr "잘못된 인스턴스 Dictionary (하위 클래스가 올바르지 않음)" +msgstr "잘못된 인스턴스 딕셔너리 (잘못된 하위 클래스)" #: modules/gdscript/gdscript_functions.cpp msgid "Object can't provide a length." -msgstr "객체는 길이를 제공할 수 없습니다." +msgstr "오브젝트는 길이를 제공할 수 없습니다." #: modules/gltf/editor_scene_exporter_gltf_plugin.cpp -#, fuzzy msgid "Export Mesh GLTF2" -msgstr "메시 라이브러리 내보내기" +msgstr "메시 GLTF2 내보내기" #: modules/gltf/editor_scene_exporter_gltf_plugin.cpp -#, fuzzy msgid "Export GLTF..." -msgstr "내보내기..." +msgstr "GLTF 내보내기..." #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" @@ -12464,9 +12497,8 @@ msgid "GridMap Paint" msgstr "그리드맵 칠하기" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Selection" -msgstr "그리드맵 선택 항목 채우기" +msgstr "그리드맵 선택" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Grid Map" @@ -12478,7 +12510,7 @@ msgstr "스냅 뷰" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Disabled" -msgstr "클립 꺼짐" +msgstr "클립 비활성화" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Clip Above" @@ -12588,6 +12620,11 @@ msgstr "구분하는 조명" msgid "Class name can't be a reserved keyword" msgstr "클래스 이름은 키워드가 될 수 없습니다" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "선택 항목 채우기" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "내부 예외 스택 추적의 끝" @@ -12646,7 +12683,7 @@ msgstr "내비게이션 메시 생성기 설정:" #: modules/recast/navigation_mesh_generator.cpp msgid "Parsing Geometry..." -msgstr "형태 분석 중..." +msgstr "지오메트리 분석 중..." #: modules/recast/navigation_mesh_generator.cpp msgid "Done!" @@ -12717,14 +12754,12 @@ msgid "Add Output Port" msgstr "출력 포트 추가하기" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Port Type" -msgstr "유형 바꾸기" +msgstr "포트 유형 바꾸기" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Port Name" -msgstr "입력 포트 이름 바꾸기" +msgstr "포트 이름 바꾸기" #: modules/visual_script/visual_script_editor.cpp msgid "Override an existing built-in function." @@ -12788,11 +12823,11 @@ msgstr "시그널 추가" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Input Port" -msgstr "입력 포트 삭제하기" +msgstr "입력 포트 제거" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Output Port" -msgstr "출력 포트 삭제하기" +msgstr "출력 포트 제거" #: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" @@ -12800,11 +12835,11 @@ msgstr "표현식 바꾸기" #: modules/visual_script/visual_script_editor.cpp msgid "Remove VisualScript Nodes" -msgstr "비주얼 스크립트 노드 삭제" +msgstr "비주얼스크립트 노드 제거" #: modules/visual_script/visual_script_editor.cpp msgid "Duplicate VisualScript Nodes" -msgstr "비주얼 스크립트 노드 복제" +msgstr "비주얼스크립트 노드 복제" #: modules/visual_script/visual_script_editor.cpp msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature." @@ -12839,7 +12874,6 @@ msgid "Add Preload Node" msgstr "Preload 노드 추가" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Add Node(s)" msgstr "노드 추가" @@ -12874,7 +12908,7 @@ msgstr "노드 이동" #: modules/visual_script/visual_script_editor.cpp msgid "Remove VisualScript Node" -msgstr "비주얼 스크립트 노드 삭제" +msgstr "비주얼스크립트 노드 제거" #: modules/visual_script/visual_script_editor.cpp msgid "Connect Nodes" @@ -12910,7 +12944,7 @@ msgstr "함수 노드를 복사할 수 없습니다." #: modules/visual_script/visual_script_editor.cpp msgid "Paste VisualScript Nodes" -msgstr "비주얼 스크립트 노드 붙여넣기" +msgstr "비주얼스크립트 노드 붙여넣기" #: modules/visual_script/visual_script_editor.cpp msgid "Can't create function with a function node." @@ -12934,11 +12968,11 @@ msgstr "함수 만들기" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" -msgstr "함수 삭제" +msgstr "함수 제거" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Variable" -msgstr "변수 삭제" +msgstr "변수 제거" #: modules/visual_script/visual_script_editor.cpp msgid "Editing Variable:" @@ -12946,7 +12980,7 @@ msgstr "변수 편집:" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Signal" -msgstr "시그널 삭제" +msgstr "시그널 제거" #: modules/visual_script/visual_script_editor.cpp msgid "Editing Signal:" @@ -13026,7 +13060,7 @@ msgstr "잘못된 인덱스 속성 이름." #: modules/visual_script/visual_script_func_nodes.cpp msgid "Base object is not a Node!" -msgstr "기본 객체는 노드가 아닙니다!" +msgstr "기본 오브젝트는 노드가 아닙니다!" #: modules/visual_script/visual_script_func_nodes.cpp msgid "Path does not lead Node!" @@ -13066,75 +13100,73 @@ msgstr "" #: modules/visual_script/visual_script_property_selector.cpp msgid "Search VisualScript" -msgstr "비주얼 스크립트 검색" +msgstr "비주얼스크립트 검색" #: modules/visual_script/visual_script_property_selector.cpp msgid "Get %s" msgstr "Get %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." -msgstr "패키지 이름이 없습니다." +msgstr "패키지 이름이 누락되어 있습니다." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "패키지 세그먼트는 길이가 0이 아니어야 합니다." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "문자 '%s'은(는) Android 애플리케이션 패키지 이름으로 쓸 수 없습니다." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "숫자는 패키지 세그먼트의 첫 문자로 쓸 수 없습니다." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "문자 '%s'은(는) 패키지 세그먼트의 첫 문자로 쓸 수 없습니다." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "패키지는 적어도 하나의 '.' 분리 기호가 있어야 합니다." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "목록에서 기기 선택" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "%s에서 실행" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting APK..." msgstr "APK로 내보내는 중..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Uninstalling..." msgstr "제거 중..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Installing to device, please wait..." -msgstr "로드 중, 기다려 주세요..." +msgstr "기기에 설치 중, 기다려 주세요..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" msgstr "기기에 설치할 수 없음: %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "기기에서 실행 중..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Could not execute on device." -msgstr "폴더를 만들 수 없습니다." +msgstr "기기에서 실행할 수 없었습니다." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "'apksigner' 도구를 찾을 수 없습니다." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -13142,7 +13174,7 @@ msgstr "" "프로젝트에 Android 빌드 템플릿을 설치하지 않았습니다. 프로젝트 메뉴에서 설치" "하세요." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." @@ -13150,11 +13182,11 @@ msgstr "" "Debug Keystore, Debug User 및 Debug Password 설정을 구성하거나 그 중 어느 것" "도 없어야 합니다." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." -msgstr "Debug keystore를 편집기 설정과 프리셋에 구성하지 않았습니다." +msgstr "Debug keystore를 에디터 설정과 프리셋에 구성하지 않았습니다." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." @@ -13162,47 +13194,47 @@ msgstr "" "Release Keystore, Release User 및 Release Password 설정을 구성하거나 그 중 어" "느 것도 없어야 합니다." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "내보내기 프리셋에 출시 keystorke가 잘못 구성되어 있습니다." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." -msgstr "편집기 설정에서 올바른 Android SDK 경로가 필요합니다." +msgstr "에디터 설정에서 올바른 Android SDK 경로가 필요합니다." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." -msgstr "편집기 설정에서 잘못된 Android SDK 경로입니다." +msgstr "에디터 설정에서 잘못된 Android SDK 경로입니다." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" -msgstr "'platform-tools' 디렉토리가 없습니다!" +msgstr "'platform-tools' 디렉토리가 누락되어 있습니다!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "Android SDK platform-tools의 adb 명령을 찾을 수 없습니다." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." -msgstr "편집기 설정에서 지정된 Android SDK 디렉토리를 확인해주세요." +msgstr "에디터 설정에서 지정된 Android SDK 디렉토리를 확인해주세요." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" -msgstr "'build-tools' 디렉토리가 없습니다!" +msgstr "'build-tools' 디렉토리가 누락되어 있습니다!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "Android SDK build-tools의 apksigner 명령을 찾을 수 없습니다." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "APK 확장에 잘못된 공개 키입니다." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "잘못된 패키지 이름:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" @@ -13210,89 +13242,76 @@ msgstr "" "\"android/modules\" 프로젝트 세팅에 잘못된 \"GodotPaymentV3\" 모듈이 포함되" "어 있습니다. (Godot 3.2.2 에서 변경됨).\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." -msgstr "플러그인을 사용하려면 \"커스텀 빌드 사용\"이 활성화되어야 합니다." +msgstr "플러그인을 사용하려면 \"Use Custom Build\"가 활성화되어야 합니다." -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" -"\"자유도(DoF)\"는 \"Xr 모드\" 가 \"Oculus Mobile VR\" 일 때만 사용 가능합니" -"다." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" "\"손 추적\" 은 \"Xr 모드\" 가 \"Oculus Mobile VR\"일 때만 사용 가능합니다." -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" -"\"포커스 인식\"은 \"Xr 모드\"가 \"Oculus Mobile VR\" 인 경우에만 사용 가능합" -"니다." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." -msgstr "\"Export AAB\"는 \"Use Custom Build\"가 활성화 된 경우에만 유효합니다." +msgstr "\"Export AAB\"는 \"Use Custom Build\"가 활성화된 경우에만 유효합니다." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " "directory.\n" "The resulting %s is unsigned." msgstr "" +"'apksigner'를 찾을 수 없었습니다.\n" +"명령이 Android SDK build-tools 디렉토리에서 사용 가능한지 확인해주세요.\n" +"결과 %s는 서명되지 않습니다." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." -msgstr "" +msgstr "디버그 %s에 서명 중..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." msgstr "출시 %s에 서명 중..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "keystore를 찾을 수 없어, 내보낼 수 없었습니다." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" -msgstr "" +msgstr "'apksigner'가 오류 #%d로 반환되었습니다" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." -msgstr "%s 추가하는 중..." +msgstr "%s 검증 중..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." -msgstr "" +msgstr "%s의 'apksigner' 검증에 실패했습니다." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "Android용으로 내보내는 중" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "잘못된 파일명! Android App Bundle에는 * .aab 확장자가 필요합니다." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "APK 확장은 Android App Bundle과 호환되지 않습니다." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." -msgstr "잘못된 파일명! Android APK는 *.apk 확장자가 필요합니다." +msgstr "잘못된 파일이름입니다! Android APK는 *.apk 확장자가 필요합니다." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" -msgstr "" +msgstr "지원되지 않는 내보내기 형식입니다!\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." @@ -13300,7 +13319,7 @@ msgstr "" "맞춤 빌드 템플릿으로 빌드하려 했으나, 버전 정보가 없습니다. '프로젝트' 메뉴에" "서 다시 설치해주세요." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13312,36 +13331,37 @@ msgstr "" " Godot 버전: %s\n" "'프로젝트' 메뉴에서 Android 빌드 템플릿을 다시 설치해주세요." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" +"res://android/build/res/*.xml 파일을 프로젝트 이름으로 덮어쓸 수 없습니다" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "프로젝트 파일을 gradle 프로젝트로 내보낼 수 없었습니다\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "확장 패키지 파일을 쓸 수 없었습니다!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "Android 프로젝트 빌드 중 (gradle)" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" "Android 프로젝트의 빌드에 실패했습니다, 출력된 오류를 확인하세요.\n" -"또는 docs.godotengine.org에서 Android 빌드 설명문서를 찾아보세요." +"또는 docs.godotengine.org에서 Android 빌드 문서를 찾아보세요." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "출력 이동 중" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." @@ -13349,16 +13369,15 @@ msgstr "" "내보내기 파일을 복사하고 이름을 바꿀 수 없습니다, 출력에 대한 gradle 프로젝" "트 디렉토리를 확인하세요." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Package not found: %s" -msgstr "애니메이션을 찾을 수 없음: '%s'" +msgstr "패키지를 찾을 수 없음: %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." msgstr "APK를 만드는 중..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" @@ -13366,33 +13385,37 @@ msgstr "" "내보낼 템플릿 APK를 찾을 수 없음:\n" "%s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" +"선택된 아키텍처를 위한 내보내기 템플릿에 라이브러리가 누락되어 있습니다: " +"%s.\n" +"모든 필수 라이브러리로 템플릿을 빌드하거나, 내보내기 프리셋에서 누락된 아키텍" +"처를 선택 취소하세요." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Adding files..." msgstr "파일을 추가하는 중..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files" msgstr "프로젝트 파일을 내보낼 수 없었습니다" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." -msgstr "" +msgstr "APK를 정렬 중..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." -msgstr "" +msgstr "임시 정렬되지 않은 APK의 압축을 풀 수 없었습니다." #: platform/iphone/export/export.cpp platform/osx/export/export.cpp msgid "Identifier is missing." -msgstr "식별자가 없습니다." +msgstr "식별자가 누락되어 있습니다." #: platform/iphone/export/export.cpp platform/osx/export/export.cpp msgid "The character '%s' is not allowed in Identifier." @@ -13456,19 +13479,19 @@ msgstr "잘못된 bundle 식별자:" #: platform/osx/export/export.cpp msgid "Notarization: code signing required." -msgstr "" +msgstr "공증: 코드 서명이 필요합니다." #: platform/osx/export/export.cpp msgid "Notarization: hardened runtime required." -msgstr "" +msgstr "공증: 강화된 런타임이 필요합니다." #: platform/osx/export/export.cpp msgid "Notarization: Apple ID name not specified." -msgstr "" +msgstr "공증: Apple ID 이름이 지정되지 않았습니다." #: platform/osx/export/export.cpp msgid "Notarization: Apple ID password not specified." -msgstr "" +msgstr "공증: Apple ID 비밀번호가 지정되지 않았습니다." #: platform/uwp/export/export.cpp msgid "Invalid package short name." @@ -13535,8 +13558,8 @@ msgid "" "Only one visible CanvasModulate is allowed per scene (or set of instanced " "scenes). The first created one will work, while the rest will be ignored." msgstr "" -"CanvasModulate는 씬 당 단 하나만 보일 수 있습니다. 처음에 만든 것만 작동하" -"고, 나머지는 무시됩니다." +"CanvasModulate는 씬 (또는 인스턴트된 씬 세트) 당 단 하나만 보일 수 있습니다. " +"처음에 만든 것만 작동하고, 나머지는 무시됩니다." #: scene/2d/collision_object_2d.cpp msgid "" @@ -13544,9 +13567,9 @@ msgid "" "Consider adding a CollisionShape2D or CollisionPolygon2D as a child to " "define its shape." msgstr "" -"이 노드는 Shape가 없습니다, 다른 물체와 충돌하거나 상호 작용할 수 없습니다.\n" -"CollisionShape2D 또는 CollisionPolygon2D를 자식 노드로 추가하여 Shape를 정의" -"하세요." +"이 노드는 모양이 없습니다, 다른 물체와 충돌하거나 상호 작용할 수 없습니다.\n" +"CollisionShape2D 또는 CollisionPolygon2D를 자손 노드로 추가하여 모양을 정의하" +"는 것을 고려하세요." #: scene/2d/collision_polygon_2d.cpp msgid "" @@ -13554,13 +13577,13 @@ msgid "" "CollisionObject2D derived node. Please only use it as a child of Area2D, " "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" -"CollisionPolygon2D는 CollisionObject2D에 충돌 모양을 지정하는 용도로만 사용됩" -"니다. Shape를 정의해야 하는 Area2D, StaticBody2D, RigidBody2D, " -"KinematicBody2D 등의 자식으로만 사용해주세요." +"CollisionPolygon2D는 CollisionObject2D에 콜리전 모양을 지정하는 용도로만 사용" +"됩니다. 모양을 정의해야 하는 Area2D, StaticBody2D, RigidBody2D, " +"KinematicBody2D 등의 자손으로만 사용해주세요." #: scene/2d/collision_polygon_2d.cpp msgid "An empty CollisionPolygon2D has no effect on collision." -msgstr "빈 CollisionPolygon2D는 충돌에 영향을 주지 않습니다." +msgstr "빈 CollisionPolygon2D는 콜리전에 영향을 주지 않습니다." #: scene/2d/collision_polygon_2d.cpp msgid "Invalid polygon. At least 3 points are needed in 'Solids' build mode." @@ -13576,24 +13599,24 @@ msgid "" "CollisionObject2D derived node. Please only use it as a child of Area2D, " "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" -"CollisionShape2D는 CollisionObject2D에 충돌 모양을 지정하는 용도로만 사용됩니" -"다. Shape를 정의해야 하는 Area2D, StaticBody2D, RigidBody2D, KinematicBody2D " -"등의 자식으로만 사용해주세요." +"CollisionShape2D는 CollisionObject2D에 콜리전 모양을 지정하는 용도로만 사용됩" +"니다. 모양을 정의해야 하는 Area2D, StaticBody2D, RigidBody2D, " +"KinematicBody2D 등의 자손으로만 사용해주세요." #: scene/2d/collision_shape_2d.cpp msgid "" "A shape must be provided for CollisionShape2D to function. Please create a " "shape resource for it!" msgstr "" -"CollisionShape2D가 작동하려면 반드시 Shape가 있어야 합니다. Shape 리소스를 만" -"들어주세요!" +"CollisionShape2D가 작동하려면 반드시 모양이 있어야 합니다. 모양 리소스를 만들" +"어주세요!" #: scene/2d/collision_shape_2d.cpp msgid "" "Polygon-based shapes are not meant be used nor edited directly through the " "CollisionShape2D node. Please use the CollisionPolygon2D node instead." msgstr "" -"폴리곤 기반 Shape는 CollisionShape2D에 추가하거나 거기서 편집하게끔 설계하지 " +"폴리곤 기반 모양은 CollisionShape2D에 추가하거나 거기서 편집하게끔 설계하지 " "않았습니다. 대신 CollisionPolygon2D 노드를 사용하십시오." #: scene/2d/cpu_particles_2d.cpp @@ -13601,7 +13624,7 @@ msgid "" "CPUParticles2D animation requires the usage of a CanvasItemMaterial with " "\"Particles Animation\" enabled." msgstr "" -"CPUParticles2D 애니메이션에는 \"Particles Animation\"이 켜진 " +"CPUParticles2D 애니메이션에는 \"Particles Animation\"이 활성화된 " "CanvasItemMaterial을 사용해야 합니다." #: scene/2d/joints_2d.cpp @@ -13634,8 +13657,7 @@ msgstr "조명의 모양을 나타낼 텍스처를 \"Texture\" 속성에 지정 msgid "" "An occluder polygon must be set (or drawn) for this occluder to take effect." msgstr "" -"이 Occluder가 영향을 주게 하려면 Occluder 폴리곤을 설정해야 (혹은 그려야) 합" -"니다." +"이 Occluder를 반영하려면 Occluder 폴리곤을 설정해야 (혹은 그려야) 합니다." #: scene/2d/light_occluder_2d.cpp msgid "The occluder polygon for this occluder is empty. Please draw a polygon." @@ -13654,14 +13676,14 @@ msgid "" "NavigationPolygonInstance must be a child or grandchild to a Navigation2D " "node. It only provides navigation data." msgstr "" -"NavigationPolygonInstance는 Navigation2D 노드의 자식 또는 그 아래에 있어야 합" -"니다. 이것은 내비게이션 데이터만을 제공합니다." +"NavigationPolygonInstance는 Navigation2D 노드의 자손이나 손주에 있어야 합니" +"다. 이것은 내비게이션 데이터만을 제공합니다." #: scene/2d/parallax_layer.cpp msgid "" "ParallaxLayer node only works when set as child of a ParallaxBackground node." msgstr "" -"ParallaxLayer는 ParallaxBackground 노드의 자식 노드로 있을 때만 작동합니다." +"ParallaxLayer는 ParallaxBackground 노드의 자손 노드로 있을 때만 작동합니다." #: scene/2d/particles_2d.cpp msgid "" @@ -13670,15 +13692,15 @@ msgid "" "CPUParticles\" option for this purpose." msgstr "" "GPU 기반 파티클은 GLES2 비디오 드라이버에서 지원하지 않습니다.\n" -"대신 CPUParticles2D 노드를 사용하세요. 이 경우 \"CPU파티클로 변환\" 옵션을 사" -"용할 수 있습니다." +"대신 CPUParticles2D 노드를 사용하세요. 이 경우 \"CPUParticles로 변환\" 옵션" +"을 사용할 수 있습니다." #: scene/2d/particles_2d.cpp scene/3d/particles.cpp msgid "" "A material to process the particles is not assigned, so no behavior is " "imprinted." msgstr "" -"파티클을 처리할 머티리얼을 지정하지 않았습니다. 아무런 동작도 찍히지 않습니" +"파티클을 처리할 머티리얼이 할당되지 않았으므로, 아무런 동작도 찍히지 않습니" "다." #: scene/2d/particles_2d.cpp @@ -13686,12 +13708,12 @@ msgid "" "Particles2D animation requires the usage of a CanvasItemMaterial with " "\"Particles Animation\" enabled." msgstr "" -"Particles2D 애니메이션은 \"Particles Animation\"이 켜져 있는 " +"Particles2D 애니메이션은 \"Particles Animation\"이 활성화되어 있는 " "CanvasItemMaterial을 사용해야 합니다." #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." -msgstr "PathFollow2D는 Path2D 노드의 자식 노드로 있을 때만 작동합니다." +msgstr "PathFollow2D는 Path2D 노드의 자손 노드로 있을 때만 작동합니다." #: scene/2d/physics_body_2d.cpp msgid "" @@ -13701,7 +13723,7 @@ msgid "" msgstr "" "(캐릭터나 리지드 모드에서) RigidBody2D의 크기 변경은 물리 엔진이 작동하는 동" "안 큰 부담이 됩니다.\n" -"대신 자식 충돌 형태의 크기를 변경해보세요." +"대신 자손 콜리전 모양의 크기를 변경해보세요." #: scene/2d/remote_transform_2d.cpp msgid "Path property must point to a valid Node2D node to work." @@ -13728,9 +13750,9 @@ msgid "" "to. Please use it as a child of Area2D, StaticBody2D, RigidBody2D, " "KinematicBody2D, etc. to give them a shape." msgstr "" -"Use Parent가 켜진 TileMap은 형태를 주는 부모 CollisionObject2D가 필요합니다. " -"형태를 주기 위해 Area2D, StaticBody2D, RigidBody2D, KinematicBody2D 등을 자" -"식 노드로 사용해주세요." +"Use Parent가 켜진 TileMap은 모양을 주는 부모 CollisionObject2D가 필요합니다. " +"모양을 주기 위해 Area2D, StaticBody2D, RigidBody2D, KinematicBody2D 등을 자" +"손 노드로 사용해주세요." #: scene/2d/visibility_notifier_2d.cpp msgid "" @@ -13767,15 +13789,15 @@ msgstr "앵커 ID가 0이 되면 앵커가 실제 앵커에 바인딩하지 않 #: scene/3d/arvr_nodes.cpp msgid "ARVROrigin requires an ARVRCamera child node." -msgstr "ARVROrigin은 자식으로 ARVRCamera 노드가 필요합니다." +msgstr "ARVROrigin은 자손으로 ARVRCamera 노드가 필요합니다." #: scene/3d/baked_lightmap.cpp msgid "Finding meshes and lights" -msgstr "메시 및 조명 찾는 중" +msgstr "메시 및 조명을 찾는 중" #: scene/3d/baked_lightmap.cpp msgid "Preparing geometry (%d/%d)" -msgstr "형태 준비 중 (%d/%d)" +msgstr "지오메트리 준비 중 (%d/%d)" #: scene/3d/baked_lightmap.cpp msgid "Preparing environment" @@ -13787,7 +13809,7 @@ msgstr "캡처 생성 중" #: scene/3d/baked_lightmap.cpp msgid "Saving lightmaps" -msgstr "라이트맵 저장 중" +msgstr "라이트맵을 저장 중" #: scene/3d/baked_lightmap.cpp msgid "Done" @@ -13799,9 +13821,9 @@ msgid "" "Consider adding a CollisionShape or CollisionPolygon as a child to define " "its shape." msgstr "" -"이 노드는 Shape가 없습니다. 다른 물체와 충돌하거나 상호 작용할 수 없습니다.\n" -"CollisionShape 또는 CollisionPolygon을 자식 노드로 추가해서 Shape을 정의해보" -"세요." +"이 노드는 모양이 없습니다. 다른 물체와 충돌하거나 상호 작용할 수 없습니다.\n" +"CollisionShape 또는 CollisionPolygon을 자손 노드로 추가해서 모양을 정의하는 " +"것을 고려하세요." #: scene/3d/collision_polygon.cpp msgid "" @@ -13809,13 +13831,13 @@ msgid "" "CollisionObject derived node. Please only use it as a child of Area, " "StaticBody, RigidBody, KinematicBody, etc. to give them a shape." msgstr "" -"CollisionPolygon은 CollisionObject에 충돌 Shape를 지정하는 용도로만 사용됩니" -"다. Area, StaticBody, RigidBody, KinematicBody 등에 자식 노드로 추가해서 사용" +"CollisionPolygon은 CollisionObject에 콜리전 모양을 지정하는 용도로만 사용됩니" +"다. Area, StaticBody, RigidBody, KinematicBody 등에 자손 노드로 추가해서 사용" "해주세요." #: scene/3d/collision_polygon.cpp msgid "An empty CollisionPolygon has no effect on collision." -msgstr "빈 CollisionPolygon는 충돌에 영향을 주지 않습니다." +msgstr "빈 CollisionPolygon는 콜리전에 영향을 주지 않습니다." #: scene/3d/collision_shape.cpp msgid "" @@ -13823,8 +13845,8 @@ msgid "" "derived node. Please only use it as a child of Area, StaticBody, RigidBody, " "KinematicBody, etc. to give them a shape." msgstr "" -"CollisionShape은 CollisionObject에 충돌 Shape를 지정하는 용도로만 사용됩니" -"다. Area, StaticBody, RigidBody, KinematicBody 등에 자식 노드로 추가해서 사용" +"CollisionShape은 CollisionObject에 콜리전 모양을 지정하는 용도로만 사용됩니" +"다. Area, StaticBody, RigidBody, KinematicBody 등에 자손 노드로 추가해서 사용" "해주세요." #: scene/3d/collision_shape.cpp @@ -13832,8 +13854,8 @@ msgid "" "A shape must be provided for CollisionShape to function. Please create a " "shape resource for it." msgstr "" -"CollisionShape가 제 기능을 하려면 Shape가 있어야 합니다. Shape 리소스를 만들" -"어주세요." +"CollisionShape가 제 기능을 하려면 모양이 있어야 합니다. 모양 리소스를 만들어" +"주세요." #: scene/3d/collision_shape.cpp msgid "" @@ -13884,6 +13906,9 @@ msgid "" "longer has any effect.\n" "To remove this warning, disable the GIProbe's Compress property." msgstr "" +"GIProbe Compress 속성은 알려진 버그로 인해 더 이상 사용되지 않으며 더 이상 영" +"향이 없습니다.\n" +"이 경고를 제거하려면, GIProbe의 Compress 속성을 비활성화하세요." #: scene/3d/light.cpp msgid "A SpotLight with an angle wider than 90 degrees cannot cast shadows." @@ -13899,8 +13924,16 @@ msgid "" "NavigationMeshInstance must be a child or grandchild to a Navigation node. " "It only provides navigation data." msgstr "" -"NavigationMeshInstance는 Navigation 노드의 자식이나 더 하위에 있어야 합니다. " -"이것은 내비게이션 데이터만 제공합니다." +"NavigationMeshInstance는 Navigation 노드의 자손이나 손주에 있어야 합니다. 이" +"것은 내비게이션 데이터만 제공합니다." + +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" #: scene/3d/particles.cpp msgid "" @@ -13909,8 +13942,8 @@ msgid "" "\" option for this purpose." msgstr "" "GPU 기반 파티클은 GLES2 비디오 드라이버에서 지원하지 않습니다.\n" -"대신 CPUParticles 노드를 사용하세요. 이 경우 \"CPU파티클로 변환\" 설정을 사용" -"할 수 있습니다." +"대신 CPUParticles 노드를 사용하세요. 이 경우 \"CPUParticles로 변환\" 설정을 " +"사용할 수 있습니다." #: scene/3d/particles.cpp msgid "" @@ -13927,7 +13960,7 @@ msgstr "" #: scene/3d/path.cpp msgid "PathFollow only works when set as a child of a Path node." -msgstr "PathFollow는 Path 노드의 자식으로 있을 때만 작동합니다." +msgstr "PathFollow는 Path 노드의 자손으로 있을 때만 작동합니다." #: scene/3d/path.cpp msgid "" @@ -13945,7 +13978,7 @@ msgid "" msgstr "" "(캐릭터나 리지드 모드에서) RigidBody의 크기 변경은 물리 엔진이 작동하는 동안 " "큰 부담이 됩니다.\n" -"대신 자식 충돌 모양의 크기를 변경하세요." +"대신 자손 콜리전 모양의 크기를 변경하세요." #: scene/3d/physics_joint.cpp msgid "Node A and Node B must be PhysicsBodies" @@ -13969,15 +14002,15 @@ msgstr "노드 A와 노드 B는 서로 다른 PhysicsBody여야 합니다" #: scene/3d/portal.cpp msgid "The RoomManager should not be a child or grandchild of a Portal." -msgstr "" +msgstr "RoomManager는 Portal의 자손이나 손주가 아니어야 합니다." #: scene/3d/portal.cpp msgid "A Room should not be a child or grandchild of a Portal." -msgstr "" +msgstr "Room은 Portal의 자손이나 손주가 아니어야 합니다." #: scene/3d/portal.cpp msgid "A RoomGroup should not be a child or grandchild of a Portal." -msgstr "" +msgstr "RoomGroup은 Portal의 자손이나 손주가 아니어야 합니다." #: scene/3d/remote_transform.cpp msgid "" @@ -13989,79 +14022,93 @@ msgstr "" #: scene/3d/room.cpp msgid "A Room cannot have another Room as a child or grandchild." -msgstr "" +msgstr "Room은 다른 Room을 자손이나 손주로 가질 수 없습니다." #: scene/3d/room.cpp msgid "The RoomManager should not be placed inside a Room." -msgstr "" +msgstr "RoomManager는 Room 안에 배치해서는 안됩니다." #: scene/3d/room.cpp msgid "A RoomGroup should not be placed inside a Room." -msgstr "" +msgstr "RoomGroup은 Room 안에 배치해서는 안됩니다." #: scene/3d/room.cpp msgid "" "Room convex hull contains a large number of planes.\n" "Consider simplifying the room bound in order to increase performance." msgstr "" +"룸 컨벡스 헐에는 다수의 평면이 있습니다.\n" +"성능을 높이려면 룸 경계를 단순화하는 것을 고려하세요." #: scene/3d/room_group.cpp msgid "The RoomManager should not be placed inside a RoomGroup." -msgstr "" +msgstr "RoomManager는 RoomGroup 안에 배치해서는 안됩니다." #: scene/3d/room_manager.cpp msgid "The RoomList has not been assigned." -msgstr "" +msgstr "RoomList가 할당되어 있지 않습니다." #: scene/3d/room_manager.cpp msgid "The RoomList node should be a Spatial (or derived from Spatial)." -msgstr "" +msgstr "RoomList 노드는 Spatial(또는 Spatial에서 파생)이어야 합니다." #: scene/3d/room_manager.cpp msgid "" "Portal Depth Limit is set to Zero.\n" "Only the Room that the Camera is in will render." msgstr "" +"포털 깊이 제한이 영으로 설정됩니다.\n" +"카메라가 있는 룸만 렌더링될 것입니다." #: scene/3d/room_manager.cpp msgid "There should only be one RoomManager in the SceneTree." -msgstr "" +msgstr "SceneTree에는 RoomManager 하나만 있어야 합니다." #: scene/3d/room_manager.cpp msgid "" "RoomList path is invalid.\n" "Please check the RoomList branch has been assigned in the RoomManager." msgstr "" +"RoomList 경로가 잘못되었습니다.\n" +"RoomList 가지가 RoomManager에서 할당되었는지 확인해주세요." #: scene/3d/room_manager.cpp msgid "RoomList contains no Rooms, aborting." -msgstr "" +msgstr "RoomList에 포함된 Room이 없어, 중단합니다." #: scene/3d/room_manager.cpp msgid "Misnamed nodes detected, check output log for details. Aborting." msgstr "" +"이름이 잘못된 노드가 감지되었으며, 자세한 사항은 출력 로그를 확인하세요. 중단" +"합니다." #: scene/3d/room_manager.cpp msgid "Portal link room not found, check output log for details." -msgstr "" +msgstr "포털 연결 룸을 찾을 수 없으며, 자세한 사항은 출력 로그를 확인하세요." #: scene/3d/room_manager.cpp msgid "" "Portal autolink failed, check output log for details.\n" "Check the portal is facing outwards from the source room." msgstr "" +"포털 자동연결에 실패했으며, 자세한 사항은 출력 로그를 확인하세요.\n" +"포털이 소스 룸으로부터 바깥쪽을 향하고 있는지 확인하세요." #: scene/3d/room_manager.cpp msgid "" "Room overlap detected, cameras may work incorrectly in overlapping area.\n" "Check output log for details." msgstr "" +"룸 겹침이 감지되어, 카메라가 겹치는 영역에서 잘못 작동할 수 있습니다.\n" +"자세한 사항은 출력 로그를 확인하세요." #: scene/3d/room_manager.cpp msgid "" "Error calculating room bounds.\n" "Ensure all rooms contain geometry or manual bounds." msgstr "" +"룸 경계를 계산하는 중 오류.\n" +"모든 룸에 지오메트리 또는 수동 경계가 포함되어 있는지 확인하세요." #: scene/3d/soft_body.cpp msgid "This body will be ignored until you set a mesh." @@ -14074,7 +14121,7 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" "실행 중에 SoftBody의 크기 변경은 물리 엔진에 의해 재정의됩니다.\n" -"대신 자식의 충돌 모양 크기를 변경하세요." +"대신 자손 콜리전 모양의 크기를 변경하세요." #: scene/3d/sprite_3d.cpp msgid "" @@ -14090,21 +14137,21 @@ msgid "" "it as a child of a VehicleBody." msgstr "" "VehicleWheel은 VehicleBody로 바퀴 시스템을 제공하는 역할입니다. VehicleBody" -"의 자식으로 사용해주세요." +"의 자손으로 사용해주세요." #: scene/3d/world_environment.cpp msgid "" "WorldEnvironment requires its \"Environment\" property to contain an " "Environment to have a visible effect." msgstr "" -"WorldEnvironment가 시각 효과를 갖도록 Environment를 갖고 있는 \"Environment" +"WorldEnvironment가 시각 이펙트를 갖도록 Environment를 갖고 있는 \"Environment" "\" 속성이 필요합니다." #: scene/3d/world_environment.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." msgstr "" -"씬마다 (혹은 인스턴스된 씬 세트마다) WorldEnvironment는 하나만 허용됩니다." +"씬(또는 인스턴스된 씬 세트마다) 당 WorldEnvironment는 하나만 허용됩니다." #: scene/3d/world_environment.cpp msgid "" @@ -14124,7 +14171,7 @@ msgstr "애니메이션을 찾을 수 없음: '%s'" #: scene/animation/animation_player.cpp msgid "Anim Apply Reset" -msgstr "" +msgstr "애니메이션 적용 재설정" #: scene/animation/animation_tree.cpp msgid "In node '%s', invalid animation: '%s'." @@ -14169,11 +14216,11 @@ msgid "" msgstr "" "색상: #%s\n" "좌클릭: 색상 설정\n" -"우클릭: 프리셋 삭제" +"우클릭: 프리셋 제거" #: scene/gui/color_picker.cpp msgid "Pick a color from the editor window." -msgstr "편집기 창에서 색상을 고르세요." +msgstr "에디터 창에서 색상을 고르세요." #: scene/gui/color_picker.cpp msgid "HSV" @@ -14197,7 +14244,7 @@ msgid "" "children placement behavior.\n" "If you don't intend to add a script, use a plain Control node instead." msgstr "" -"Container 자체는 자식 배치 작업을 구성하는 스크립트 외에는 목적이 없습니다.\n" +"Container 자체는 자손 배치 작업을 구성하는 스크립트 외에는 목적이 없습니다.\n" "스크립트를 추가하는 의도가 없으면, 순수한 Control 노드를 사용해주세요." #: scene/gui/control.cpp @@ -14225,6 +14272,14 @@ msgstr "올바른 확장자를 사용해야 합니다." msgid "Enable grid minimap." msgstr "그리드 미니맵을 활성화합니다." +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14236,7 +14291,7 @@ msgstr "" #: scene/gui/range.cpp msgid "If \"Exp Edit\" is enabled, \"Min Value\" must be greater than 0." -msgstr "\"Exp Edit\"을 켜면, \"Min Value\"는 반드시 0보다 커야 합니다." +msgstr "\"Exp Edit\"을 활성화하면, \"Min Value\"는 반드시 0보다 커야 합니다." #: scene/gui/scroll_container.cpp msgid "" @@ -14244,8 +14299,8 @@ msgid "" "Use a container as child (VBox, HBox, etc.), or a Control and set the custom " "minimum size manually." msgstr "" -"ScrollContainer는 단일 자식 Control을 작업하기 위한 것입니다.\n" -"(VBox, HBox 등) 컨테이너를 자식으로 사용하거나, Control을 사용하고 맞춤 최소 " +"ScrollContainer는 단일 자손 Control을 작업하기 위한 것입니다.\n" +"(VBox, HBox 등) 컨테이너를 자손으로 사용하거나, Control을 사용하고 맞춤 최소 " "수치를 수동으로 설정하세요." #: scene/gui/tree.cpp @@ -14257,8 +14312,8 @@ msgid "" "Default Environment as specified in Project Settings (Rendering -> " "Environment -> Default Environment) could not be loaded." msgstr "" -"프로젝트 설정 (Rendering -> Environment -> Default Environment)에 지정한 기" -"본 환경을 불러올 수 없습니다." +"프로젝트 설정 (Rendering -> Environment -> Default Environment)에 지정한 디폴" +"트 환경을 불러올 수 없습니다." #: scene/main/viewport.cpp msgid "" @@ -14268,7 +14323,7 @@ msgid "" "texture to some node for display." msgstr "" "뷰포트를 렌더 대상으로 설정하지 않았습니다. 뷰포트의 내용을 화면에 직접 표시" -"하려면, Control의 자식 노드로 만들어서 크기를 얻어야 합니다. 그렇지 않을 경" +"하려면, Control의 자손 노드로 만들어서 크기를 얻어야 합니다. 그렇지 않을 경" "우, 화면에 표시하기 위해서는 뷰포트를 RenderTarget으로 만들고 내부적인 텍스처" "를 다른 노드에 지정해야 합니다." @@ -14276,6 +14331,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "무엇이든 렌더링하려면 뷰포트 크기가 0보다 커야 합니다." +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " @@ -14297,25 +14356,28 @@ msgid "Invalid comparison function for that type." msgstr "해당 유형에 잘못된 비교 함수." #: servers/visual/shader_language.cpp -#, fuzzy msgid "Varying may not be assigned in the '%s' function." -msgstr "Varying은 꼭짓점 함수에만 지정할 수 있습니다." +msgstr "Varying은 '%s' 함수에서 할당되지 않을 수 있습니다." #: servers/visual/shader_language.cpp msgid "" "Varyings which assigned in 'vertex' function may not be reassigned in " "'fragment' or 'light'." msgstr "" +"'vertex' 함수에서 할당된 Varying은 'fragment' 또는 'light'에서 재할당되지 않" +"을 수 있습니다." #: servers/visual/shader_language.cpp msgid "" "Varyings which assigned in 'fragment' function may not be reassigned in " "'vertex' or 'light'." msgstr "" +"'fragment' 함수에서 할당된 Varying은 'vertex' 또는 'light'에서 재할당되지 않" +"을 수 있습니다." #: servers/visual/shader_language.cpp msgid "Fragment-stage varying could not been accessed in custom function!" -msgstr "" +msgstr "맞춤 함수에서 Fragment-stage varying에 접근할 수 없습니다!" #: servers/visual/shader_language.cpp msgid "Assignment to function." @@ -14329,6 +14391,41 @@ msgstr "Uniform에 대입." msgid "Constants cannot be modified." msgstr "상수는 수정할 수 없습니다." +#~ msgid "Make Rest Pose (From Bones)" +#~ msgstr "(본의) 대기 자세 만들기" + +#~ msgid "Bottom" +#~ msgstr "아랫면" + +#~ msgid "Left" +#~ msgstr "왼쪽면" + +#~ msgid "Right" +#~ msgstr "오른쪽면" + +#~ msgid "Front" +#~ msgstr "정면" + +#~ msgid "Rear" +#~ msgstr "뒷면" + +#~ msgid "Nameless gizmo" +#~ msgstr "이름 없는 기즈모" + +#~ msgid "" +#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile " +#~ "VR\"." +#~ msgstr "" +#~ "\"자유도(DoF)\"는 \"Xr 모드\" 가 \"Oculus Mobile VR\" 일 때만 사용 가능합" +#~ "니다." + +#~ msgid "" +#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" +#~ "\"." +#~ msgstr "" +#~ "\"포커스 인식\"은 \"Xr 모드\"가 \"Oculus Mobile VR\" 인 경우에만 사용 가능" +#~ "합니다." + #~ msgid "Package Contents:" #~ msgstr "패키지 내용:" @@ -16407,9 +16504,6 @@ msgstr "상수는 수정할 수 없습니다." #~ msgid "Images:" #~ msgstr "이미지:" -#~ msgid "Group" -#~ msgstr "그룹" - #~ msgid "Sample Conversion Mode: (.wav files):" #~ msgstr "샘플 변환 모드: (.wav 파일):" diff --git a/editor/translations/lt.po b/editor/translations/lt.po index f8bc356023..a853757f43 100644 --- a/editor/translations/lt.po +++ b/editor/translations/lt.po @@ -1037,7 +1037,7 @@ msgstr "" msgid "Dependencies" msgstr "" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "" @@ -1669,13 +1669,13 @@ msgid "" "Enabled'." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2067,7 +2067,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "" @@ -2556,6 +2556,30 @@ msgid "Current scene not saved. Open anyway?" msgstr "" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Undo: %s" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Redo: %s" +msgstr "" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "" @@ -3191,6 +3215,11 @@ msgid "Merge With Existing" msgstr "" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Animacija: Pakeisti Transformaciją" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "" @@ -3443,6 +3472,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "" @@ -5572,6 +5605,17 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Locked" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Panaikinti pasirinkimą" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6500,7 +6544,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7098,6 +7146,16 @@ msgstr "Sukurti" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "Animacija: Pakeisti Transformaciją" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Ištrinti Efektą" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7610,11 +7668,12 @@ msgid "Skeleton2D" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "Sukurti Naują" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" +msgid "Overwrite Rest Pose" msgstr "" #: editor/plugins/skeleton_editor_plugin.cpp @@ -7642,6 +7701,60 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7750,42 +7863,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -8050,6 +8143,11 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "Priedai" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "" @@ -8115,7 +8213,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -12174,6 +12272,14 @@ msgstr "" msgid "Set Portal Point Position" msgstr "" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Position" +msgstr "" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12462,6 +12568,11 @@ msgstr "" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "Visas Pasirinkimas" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -12947,163 +13058,152 @@ msgstr "" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting APK..." msgstr "Redaguoti" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Uninstalling..." msgstr "Išinstaliuoti" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Installing to device, please wait..." msgstr "Atsiųsti" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not execute on device." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Invalid package name:" msgstr "Netinkamas šrifto dydis." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13111,57 +13211,57 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13169,55 +13269,55 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "Animacijos Nodas" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13225,20 +13325,20 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Adding files..." msgstr "Filtrai..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13698,6 +13798,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -13992,6 +14100,14 @@ msgstr "" msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14032,6 +14148,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/lv.po b/editor/translations/lv.po index 180cd1be1c..26674cb5b8 100644 --- a/editor/translations/lv.po +++ b/editor/translations/lv.po @@ -1029,7 +1029,7 @@ msgstr "" msgid "Dependencies" msgstr "Atkarības" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Resurs" @@ -1678,13 +1678,13 @@ msgid "" "Enabled'." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2059,7 +2059,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "" @@ -2537,6 +2537,30 @@ msgid "Current scene not saved. Open anyway?" msgstr "" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Undo: %s" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Redo: %s" +msgstr "" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "" @@ -3162,6 +3186,11 @@ msgid "Merge With Existing" msgstr "" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Anim Izmainīt Transformāciju" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "" @@ -3406,6 +3435,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "" @@ -5459,6 +5492,17 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Locked" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Grupa Izvēlēta" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6370,7 +6414,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -6962,6 +7010,15 @@ msgstr "Izveidot punktus." msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Occluder Set Transform" +msgstr "" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Izdzēst" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7468,11 +7525,12 @@ msgid "Skeleton2D" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "Ielādēt Noklusējumu" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" +msgid "Overwrite Rest Pose" msgstr "" #: editor/plugins/skeleton_editor_plugin.cpp @@ -7500,6 +7558,60 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7610,42 +7722,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -7909,6 +8001,11 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "Izveidot" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "" @@ -7974,7 +8071,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -11988,6 +12085,14 @@ msgstr "" msgid "Set Portal Point Position" msgstr "" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Position" +msgstr "" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12273,6 +12378,11 @@ msgstr "" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "Visa Izvēle" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -12750,161 +12860,150 @@ msgstr "" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Uninstalling..." msgstr "Instalēt..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Installing to device, please wait..." msgstr "Ielādēt..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not execute on device." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "Nederīgs paketes nosaukums:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -12912,57 +13011,57 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -12970,55 +13069,55 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "Animācija netika atrasta: '%s'" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13026,20 +13125,20 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Adding files..." msgstr "Pievienot Mezglus..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13496,6 +13595,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -13786,6 +13893,14 @@ msgstr "" msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13826,6 +13941,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/mi.po b/editor/translations/mi.po index 3a70aade1a..456d89671e 100644 --- a/editor/translations/mi.po +++ b/editor/translations/mi.po @@ -985,7 +985,7 @@ msgstr "" msgid "Dependencies" msgstr "" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "" @@ -1614,13 +1614,13 @@ msgid "" "Enabled'." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -1990,7 +1990,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "" @@ -2468,6 +2468,30 @@ msgid "Current scene not saved. Open anyway?" msgstr "" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Undo: %s" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Redo: %s" +msgstr "" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "" @@ -3091,6 +3115,10 @@ msgid "Merge With Existing" msgstr "" #: editor/editor_node.cpp +msgid "Apply MeshInstance Transforms" +msgstr "" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "" @@ -3331,6 +3359,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "" @@ -5371,6 +5403,16 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Locked" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Grouped" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6269,7 +6311,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -6853,6 +6899,14 @@ msgstr "" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Occluder Set Transform" +msgstr "" + +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Center Node" +msgstr "" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7347,11 +7401,11 @@ msgid "Skeleton2D" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" +msgid "Reset to Rest Pose" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" +msgid "Overwrite Rest Pose" msgstr "" #: editor/plugins/skeleton_editor_plugin.cpp @@ -7379,6 +7433,60 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7486,42 +7594,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -7783,6 +7871,10 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Occlusion Culling" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "" @@ -7848,7 +7940,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -11748,6 +11840,14 @@ msgstr "" msgid "Set Portal Point Position" msgstr "" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Position" +msgstr "" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12028,6 +12128,10 @@ msgstr "" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Build Solution" +msgstr "" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -12494,159 +12598,148 @@ msgstr "" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Uninstalling..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Installing to device, please wait..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not execute on device." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -12654,57 +12747,57 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -12712,54 +12805,54 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package not found: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -12767,19 +12860,19 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Adding files..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13229,6 +13322,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -13518,6 +13619,14 @@ msgstr "" msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13558,6 +13667,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/mk.po b/editor/translations/mk.po index bf449381bb..26d14a75ba 100644 --- a/editor/translations/mk.po +++ b/editor/translations/mk.po @@ -992,7 +992,7 @@ msgstr "" msgid "Dependencies" msgstr "" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "" @@ -1621,13 +1621,13 @@ msgid "" "Enabled'." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -1998,7 +1998,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "" @@ -2476,6 +2476,30 @@ msgid "Current scene not saved. Open anyway?" msgstr "" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Undo: %s" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Redo: %s" +msgstr "" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "" @@ -3100,6 +3124,10 @@ msgid "Merge With Existing" msgstr "" #: editor/editor_node.cpp +msgid "Apply MeshInstance Transforms" +msgstr "" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "" @@ -3340,6 +3368,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "" @@ -5383,6 +5415,16 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Locked" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Grouped" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6282,7 +6324,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -6868,6 +6914,14 @@ msgstr "Промести Безиер Точка" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Occluder Set Transform" +msgstr "" + +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Center Node" +msgstr "" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7362,11 +7416,11 @@ msgid "Skeleton2D" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" +msgid "Reset to Rest Pose" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" +msgid "Overwrite Rest Pose" msgstr "" #: editor/plugins/skeleton_editor_plugin.cpp @@ -7394,6 +7448,60 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7501,42 +7609,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -7798,6 +7886,10 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Occlusion Culling" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "" @@ -7863,7 +7955,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -11763,6 +11855,14 @@ msgstr "" msgid "Set Portal Point Position" msgstr "" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Position" +msgstr "" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12043,6 +12143,10 @@ msgstr "" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Build Solution" +msgstr "" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -12509,159 +12613,148 @@ msgstr "" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Uninstalling..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Installing to device, please wait..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not execute on device." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -12669,57 +12762,57 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -12727,54 +12820,54 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package not found: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -12782,19 +12875,19 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Adding files..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13244,6 +13337,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -13533,6 +13634,14 @@ msgstr "" msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13573,6 +13682,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/ml.po b/editor/translations/ml.po index b0d3a5a8d7..b9f86d4cf2 100644 --- a/editor/translations/ml.po +++ b/editor/translations/ml.po @@ -997,7 +997,7 @@ msgstr "" msgid "Dependencies" msgstr "" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "" @@ -1627,13 +1627,13 @@ msgid "" "Enabled'." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2003,7 +2003,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "" @@ -2483,6 +2483,30 @@ msgid "Current scene not saved. Open anyway?" msgstr "" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Undo: %s" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Redo: %s" +msgstr "" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "" @@ -3106,6 +3130,11 @@ msgid "Merge With Existing" msgstr "" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "പരിവർത്തനം ചലിപ്പിക്കുക" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "" @@ -3346,6 +3375,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "" @@ -5390,6 +5423,16 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Locked" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Grouped" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6290,7 +6333,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -6876,6 +6923,14 @@ msgstr "ബെസിയർ ബിന്ദു നീക്കുക" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Occluder Set Transform" +msgstr "" + +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Center Node" +msgstr "" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7370,11 +7425,11 @@ msgid "Skeleton2D" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" +msgid "Reset to Rest Pose" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" +msgid "Overwrite Rest Pose" msgstr "" #: editor/plugins/skeleton_editor_plugin.cpp @@ -7402,6 +7457,60 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7509,42 +7618,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -7806,6 +7895,10 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Occlusion Culling" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "" @@ -7871,7 +7964,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -11772,6 +11865,14 @@ msgstr "" msgid "Set Portal Point Position" msgstr "" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Position" +msgstr "" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12052,6 +12153,10 @@ msgstr "" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Build Solution" +msgstr "" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -12520,159 +12625,148 @@ msgstr "" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Uninstalling..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Installing to device, please wait..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not execute on device." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -12680,57 +12774,57 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -12738,54 +12832,54 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package not found: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -12793,19 +12887,19 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Adding files..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13255,6 +13349,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -13544,6 +13646,14 @@ msgstr "" msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13584,6 +13694,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/mr.po b/editor/translations/mr.po index af59635c8a..e305a8b937 100644 --- a/editor/translations/mr.po +++ b/editor/translations/mr.po @@ -993,7 +993,7 @@ msgstr "" msgid "Dependencies" msgstr "" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "" @@ -1622,13 +1622,13 @@ msgid "" "Enabled'." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -1998,7 +1998,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "" @@ -2476,6 +2476,30 @@ msgid "Current scene not saved. Open anyway?" msgstr "" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Undo: %s" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Redo: %s" +msgstr "" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "" @@ -3100,6 +3124,10 @@ msgid "Merge With Existing" msgstr "" #: editor/editor_node.cpp +msgid "Apply MeshInstance Transforms" +msgstr "" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "" @@ -3340,6 +3368,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "" @@ -5380,6 +5412,16 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Locked" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Grouped" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6281,7 +6323,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -6865,6 +6911,15 @@ msgstr "" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Occluder Set Transform" +msgstr "" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "नोड हलवा" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7359,11 +7414,11 @@ msgid "Skeleton2D" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" +msgid "Reset to Rest Pose" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" +msgid "Overwrite Rest Pose" msgstr "" #: editor/plugins/skeleton_editor_plugin.cpp @@ -7391,6 +7446,60 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7499,42 +7608,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -7796,6 +7885,10 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Occlusion Culling" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "" @@ -7861,7 +7954,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -11765,6 +11858,14 @@ msgstr "" msgid "Set Portal Point Position" msgstr "" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Position" +msgstr "" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12045,6 +12146,10 @@ msgstr "" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Build Solution" +msgstr "" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -12512,159 +12617,148 @@ msgstr "" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Uninstalling..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Installing to device, please wait..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not execute on device." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -12672,57 +12766,57 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -12730,54 +12824,54 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package not found: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -12785,19 +12879,19 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Adding files..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13247,6 +13341,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -13536,6 +13638,14 @@ msgstr "" msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13576,6 +13686,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/ms.po b/editor/translations/ms.po index 5fd2547bcb..ca77c01937 100644 --- a/editor/translations/ms.po +++ b/editor/translations/ms.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2021-08-02 02:00+0000\n" +"PO-Revision-Date: 2021-08-22 22:46+0000\n" "Last-Translator: Keviindran Ramachandran <keviinx@yahoo.com>\n" "Language-Team: Malay <https://hosted.weblate.org/projects/godot-engine/godot/" "ms/>\n" @@ -23,7 +23,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.8-dev\n" +"X-Generator: Weblate 4.8.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -372,7 +372,7 @@ msgstr "Masukkan Anim" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp msgid "node '%s'" -msgstr "" +msgstr "nod '%s'" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp @@ -599,7 +599,7 @@ msgstr "Pergi ke Langkah Sebelumnya" #: editor/animation_track_editor.cpp msgid "Apply Reset" -msgstr "" +msgstr "Guna Set Semula" #: editor/animation_track_editor.cpp msgid "Optimize Animation" @@ -966,11 +966,11 @@ msgstr "Cipta %s Baru" #: editor/create_dialog.cpp editor/plugins/asset_library_editor_plugin.cpp msgid "No results for \"%s\"." -msgstr "" +msgstr "Tiada hasil untuk \"%s\"." #: editor/create_dialog.cpp editor/property_selector.cpp msgid "No description available for %s." -msgstr "" +msgstr "Tiada keterangan tersedia untuk %s." #: editor/create_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp @@ -1030,7 +1030,7 @@ msgstr "" msgid "Dependencies" msgstr "Kebergantungan" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Sumber" @@ -1274,11 +1274,11 @@ msgstr "%s (Sudah Wujud)" #: editor/editor_asset_installer.cpp msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:" -msgstr "" +msgstr "Kandungan aset \"%s\" - fail-fail %d bercanggah dengan projek anda:" #: editor/editor_asset_installer.cpp msgid "Contents of asset \"%s\" - No files conflict with your project:" -msgstr "" +msgstr "Kandungan aset \"%s\" - Tiada fail-fail bercanggah dengan projek anda:" #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" @@ -1544,11 +1544,11 @@ msgstr "Tidak boleh menambahkan autoload:" #: editor/editor_autoload_settings.cpp msgid "%s is an invalid path. File does not exist." -msgstr "" +msgstr "%s adalah laluan yang tidak sah. Fail tidak wujud." #: editor/editor_autoload_settings.cpp msgid "%s is an invalid path. Not in resource path (res://)." -msgstr "" +msgstr "%s adalah laluan yang tidak sah. Tidak dalam laluan sumber (res://)." #: editor/editor_autoload_settings.cpp msgid "Add AutoLoad" @@ -1573,7 +1573,7 @@ msgstr "Nama" #: editor/editor_autoload_settings.cpp msgid "Global Variable" -msgstr "" +msgstr "Pembolehubah Global" #: editor/editor_data.cpp msgid "Paste Params" @@ -1697,13 +1697,13 @@ msgstr "" "Aktifkan 'Import Pvrtc' dalam Tetapan Projek, atau nyahaktifkan 'Driver " "Fallback Enabled'." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "Templat nyahpepijat tersuai tidak dijumpai." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -1748,15 +1748,16 @@ msgstr "Import Dok" #: editor/editor_feature_profile.cpp msgid "Allows to view and edit 3D scenes." -msgstr "" +msgstr "Membenarkan untuk melihat dan menyunting adegan 3D." #: editor/editor_feature_profile.cpp msgid "Allows to edit scripts using the integrated script editor." msgstr "" +"Membenarkan untuk menyunting skrip-skrip menggunakan editor skrip bersepadu." #: editor/editor_feature_profile.cpp msgid "Provides built-in access to the Asset Library." -msgstr "" +msgstr "Memberikan akses terbina dalam kepada Perpustakaan Aset." #: editor/editor_feature_profile.cpp msgid "Allows editing the node hierarchy in the Scene dock." @@ -2088,7 +2089,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "Mengimport (Semula) Aset" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "Atas" @@ -2599,6 +2600,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "Adegan semasa tidak disimpan. Masih buka?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "Buat Asal" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "Buat Semula" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "Tidak dapat memuatkan semula adegan yang tidak pernah disimpan." @@ -3290,6 +3317,11 @@ msgid "Merge With Existing" msgstr "Gabung Dengan Sedia Ada" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Anim Ubah Perubahan" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "Buka & Jalankan Skrip" @@ -3547,6 +3579,10 @@ msgstr "" "Sumber yang dipilih (%s) tidak sesuai dengan jenis yang diharapkan untuk " "sifat ini (%s)." +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "Buat Unik" @@ -5656,6 +5692,17 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Locked" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Kumpulan" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6569,7 +6616,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7155,6 +7206,16 @@ msgstr "Masukkan Titik" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "Kosongkan Transformasi" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Semua Pilihan" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7650,12 +7711,14 @@ msgid "Skeleton2D" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "Set Semula ke Lalai" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "Tulis Ganti" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7682,6 +7745,60 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7795,42 +7912,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -8095,6 +8192,10 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Occlusion Culling" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "" @@ -8160,7 +8261,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -12141,6 +12242,14 @@ msgstr "" msgid "Set Portal Point Position" msgstr "" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Position" +msgstr "" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12428,6 +12537,11 @@ msgstr "" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "Semua Pilihan" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -12901,165 +13015,154 @@ msgstr "" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting APK..." msgstr "Eksport..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Uninstalling..." msgstr "Nyahpasang" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Installing to device, please wait..." msgstr "Mengambil maklumat cermin, sila tunggu..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not install to device: %s" msgstr "Tidak dapat memulakan subproses!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Running on device..." msgstr "Menjalankan Skrip Tersuai..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not execute on device." msgstr "Tidak dapat mencipta folder." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13067,60 +13170,60 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Signing release %s..." msgstr "" "Mengimbas Fail,\n" "Sila Tunggu..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13128,56 +13231,56 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "Kandungan Pakej:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Creating APK..." msgstr "Menyambung..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13185,21 +13288,21 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Adding files..." msgstr "Tapis Fail-fail..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files" msgstr "Tidak dapat memulakan subproses!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13653,6 +13756,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -13942,6 +14053,14 @@ msgstr "Mesti menggunakan sambungan yang sah." msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13982,6 +14101,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/nb.po b/editor/translations/nb.po index 02f32b055b..0b9333655f 100644 --- a/editor/translations/nb.po +++ b/editor/translations/nb.po @@ -14,7 +14,7 @@ # Byzantin <kasper-hoel@hotmail.com>, 2018. # Hans-Marius Øverås <hansmariusoveras@gmail.com>, 2019. # Revolution <revosw@gmail.com>, 2019. -# Petter Reinholdtsen <pere-weblate@hungry.com>, 2019, 2020. +# Petter Reinholdtsen <pere-weblate@hungry.com>, 2019, 2020, 2021. # Patrick Sletvold <patricksletvold@hotmail.com>, 2021. # Kristoffer <kskau93@gmail.com>, 2021. # Lili Zoey <sayaks1@gmail.com>, 2021. @@ -22,8 +22,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2021-05-29 13:49+0000\n" -"Last-Translator: Lili Zoey <sayaks1@gmail.com>\n" +"PO-Revision-Date: 2021-08-12 21:32+0000\n" +"Last-Translator: Petter Reinholdtsen <pere-weblate@hungry.com>\n" "Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/godot-" "engine/godot/nb_NO/>\n" "Language: nb\n" @@ -31,7 +31,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.7-dev\n" +"X-Generator: Weblate 4.8-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -1054,7 +1054,7 @@ msgstr "" msgid "Dependencies" msgstr "Avhengigheter" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Ressurs" @@ -1739,13 +1739,13 @@ msgstr "" "Aktiver 'Importer Etc' i Prosjektinnstillinger, eller deaktiver " "'Drivertilbakefall Aktivert'." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "Tilpasset feilsøkingsmal ble ikke funnet." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -1929,7 +1929,7 @@ msgstr "Gjeldende:" #: editor/editor_feature_profile.cpp editor/editor_node.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp msgid "Import" -msgstr "Importer" +msgstr "importer" #: editor/editor_feature_profile.cpp editor/project_export.cpp msgid "Export" @@ -2149,7 +2149,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "(Re)Importerer Assets" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "Topp" @@ -2681,6 +2681,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "Gjeldende scene er ikke lagret. Åpne likevel?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "Angre" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "Gjenta" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "Kan ikke laste en scene som aldri ble lagret." @@ -3380,6 +3406,11 @@ msgid "Merge With Existing" msgstr "Slå sammen Med Eksisterende" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Anim Forandre Omforming" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "Åpne & Kjør et Skript" @@ -3643,6 +3674,10 @@ msgstr "" "Den valgte ressursen (%s) svarer ikke til noen forventede verdier for denne " "egenskapen (%s)." +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "Gjør Unik" @@ -5891,6 +5926,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "Endre CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "Slett Valgte" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Grupper" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6874,7 +6921,13 @@ msgid "Remove Selected Item" msgstr "Fjern Valgte Element" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +#, fuzzy +msgid "Import from Scene (Ignore Transforms)" +msgstr "Importer fra Scene" + +#: editor/plugins/mesh_library_editor_plugin.cpp +#, fuzzy +msgid "Import from Scene (Apply Transforms)" msgstr "Importer fra Scene" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7491,6 +7544,16 @@ msgstr "Fjern Punkt" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "Nullstill Transformasjon" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Lag Node" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -8011,12 +8074,14 @@ msgid "Skeleton2D" msgstr "Singleton" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "Last Standard" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "Overskriv" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -8045,6 +8110,67 @@ msgid "Perspective" msgstr "Perspektiv" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Perspective" +msgstr "Perspektiv" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "Perspektiv" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Left Orthogonal" +msgstr "Venstre knapp" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Perspective" +msgstr "Perspektiv" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Orthogonal" +msgstr "Høyre knapp" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Perspective" +msgstr "Perspektiv" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Perspective" +msgstr "Perspektiv" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -8162,42 +8288,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "Venstre" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "Høyrevisning." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "Høyre" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "Frontvisning." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "Front" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "Bakvisning." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "Bak" - -#: editor/plugins/spatial_editor_plugin.cpp #, fuzzy msgid "Align Transform with View" msgstr "Høyrevisning" @@ -8468,6 +8574,11 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "Rediger Poly" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "Innstillinger …" @@ -8533,7 +8644,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -12746,6 +12857,15 @@ msgstr "Fjern Funksjon" msgid "Set Portal Point Position" msgstr "Fjern Funksjon" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr "Fjern Funksjon" + #: modules/csg/csg_gizmos.cpp #, fuzzy msgid "Change Cylinder Radius" @@ -13048,6 +13168,11 @@ msgstr "Genererer Lyskart" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "Alle valg" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -13554,166 +13679,155 @@ msgstr "Lim inn Noder" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "Velg enhet fra listen" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting APK..." msgstr "Eksporter" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Uninstalling..." msgstr "Avinstaller" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Installing to device, please wait..." msgstr "Henter fillager, vennligst vent..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not install to device: %s" msgstr "Kunne ikke starta subprosess!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Running on device..." msgstr "Kjører Tilpasser Skript..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not execute on device." msgstr "Kunne ikke opprette mappe." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Invalid package name:" msgstr "Ugyldig navn." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13721,63 +13835,63 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Signing release %s..." msgstr "" "Gjennomgår filer,\n" "Vent…" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not find keystore, unable to export." msgstr "Kunne ikke opprette mappe." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Verifying %s..." msgstr "Legger til %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting for Android" msgstr "Eksporter" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13785,59 +13899,59 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files to gradle project\n" msgstr "Kunne ikke endre project.godot i projsektstien." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not write expansion package file!" msgstr "Kunne ikke opprette mappe." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "Animasjonsverktøy" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Creating APK..." msgstr "Lager konturer..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" "Could not find template APK to export:\n" "%s" msgstr "Kunne ikke opprette mappe." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13845,21 +13959,21 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Adding files..." msgstr "Legger til %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files" msgstr "Kunne ikke opprette mappe." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -14327,6 +14441,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14621,6 +14743,14 @@ msgstr "Må ha en gyldig filutvidelse." msgid "Enable grid minimap." msgstr "Aktiver Snap" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14661,6 +14791,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " @@ -14713,6 +14847,18 @@ msgstr "" msgid "Constants cannot be modified." msgstr "Konstanter kan ikke endres." +#~ msgid "Left" +#~ msgstr "Venstre" + +#~ msgid "Right" +#~ msgstr "Høyre" + +#~ msgid "Front" +#~ msgstr "Front" + +#~ msgid "Rear" +#~ msgstr "Bak" + #, fuzzy #~ msgid "Package Contents:" #~ msgstr "Innhold:" diff --git a/editor/translations/nl.po b/editor/translations/nl.po index 00f87ef79c..d588afb791 100644 --- a/editor/translations/nl.po +++ b/editor/translations/nl.po @@ -1072,7 +1072,7 @@ msgstr "" msgid "Dependencies" msgstr "Afhankelijkheden" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Bron" @@ -1734,13 +1734,13 @@ msgstr "" "Schakel 'Import Pvrtc' in bij de Projectinstellingen, of schakel de optie " "'Driver Fallback Enabled' uit." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "Aangepast debug pakket niet gevonden." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2124,7 +2124,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "Bronnen (her)importeren" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "Boven" @@ -2637,6 +2637,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "De huidige scène is niet opgeslagen. Toch openen?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "Ongedaan maken" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "Opnieuw" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "Een scène die nooit opgeslagen is kan niet opnieuw laden worden." @@ -3325,6 +3351,11 @@ msgid "Merge With Existing" msgstr "Met bestaande samenvoegen" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Anim Wijzig Transform" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "Voer Een Script Uit" @@ -3582,6 +3613,10 @@ msgstr "" "De geselecteerde hulpbron (%s) komt niet overeen met het verwachte type van " "deze eigenschap (%s)." +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "Maak Uniek" @@ -5717,6 +5752,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "CanvasItem \"%s\" naar (%d, %d) verplaatsen" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "Slot Geselecteerd" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Groepen" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6672,7 +6719,13 @@ msgid "Remove Selected Item" msgstr "Geselecteerd element verwijderen" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +#, fuzzy +msgid "Import from Scene (Ignore Transforms)" +msgstr "Vanuit scène importeren" + +#: editor/plugins/mesh_library_editor_plugin.cpp +#, fuzzy +msgid "Import from Scene (Apply Transforms)" msgstr "Vanuit scène importeren" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7270,6 +7323,16 @@ msgstr "Telling Gegenereerde Punten:" msgid "Flip Portal" msgstr "Horizontaal omdraaien" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "Transform wissen" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Knoop maken" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "AnimationTree heeft geen ingesteld pad naar een AnimationPlayer" @@ -7771,12 +7834,14 @@ msgid "Skeleton2D" msgstr "Skeleton2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "Maak Rustpose (van Botten)" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "Botten in rusthouding zetten" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "Botten in rusthouding zetten" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "Overschrijven" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7803,6 +7868,71 @@ msgid "Perspective" msgstr "Perspectief" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Orthogonal" +msgstr "Orthogonaal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Perspective" +msgstr "Perspectief" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Orthogonal" +msgstr "Orthogonaal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "Perspectief" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Left Orthogonal" +msgstr "Orthogonaal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Perspective" +msgstr "Perspectief" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Orthogonal" +msgstr "Orthogonaal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Orthogonal" +msgstr "Orthogonaal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Perspective" +msgstr "Perspectief" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Orthogonal" +msgstr "Orthogonaal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Perspective" +msgstr "Perspectief" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "Transformatie Afgebroken." @@ -7921,42 +8051,22 @@ msgid "Bottom View." msgstr "Onderaanzicht." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "Onder" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "Linkeraanzicht." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "Links" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "Rechteraanzicht." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "Rechts" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "Vooraanzicht." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "Voor" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "Achteraanzicht." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "Achter" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "Uitlijnen Transform met aanzicht" @@ -8230,6 +8340,11 @@ msgid "View Portal Culling" msgstr "Beeldvensterinstellingen" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "Beeldvensterinstellingen" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "Instellingen..." @@ -8295,8 +8410,9 @@ msgid "Post" msgstr "Post" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" -msgstr "Naamloze gizmo" +#, fuzzy +msgid "Unnamed Gizmo" +msgstr "Naamloos Project" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Mesh2D" @@ -12497,6 +12613,16 @@ msgstr "Zet Curve Punt Positie" msgid "Set Portal Point Position" msgstr "Zet Curve Punt Positie" +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Radius" +msgstr "Wijzig Cylinder Vorm Radius" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr "Zet Curve In Positie" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "Wijzig Cylinder Straal" @@ -12781,6 +12907,11 @@ msgstr "Lightmaps plotten" msgid "Class name can't be a reserved keyword" msgstr "Klassennaam kan geen gereserveerd sleutelwoord zijn" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "Vul selectie" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "Einde van innerlijke exception stack trace" @@ -13270,75 +13401,75 @@ msgstr "Zoek VisualScript" msgid "Get %s" msgstr "Krijg %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "Package naam ontbreekt." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "Pakketsegmenten moeten een lengte ongelijk aan nul hebben." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" "Het karakter '%s' is niet toegestaan in Android application pakketnamen." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "Een getal kan niet het eerste teken zijn in een pakket segment." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" "Het karakter '%s' kan niet het eerste teken zijn in een pakket segment." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "De pakketnaam moet ten minste een '.' bevatten." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "Selecteer apparaat uit de lijst" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting APK..." msgstr "Exporteer alles" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Uninstalling..." msgstr "Verwijderen" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Installing to device, please wait..." msgstr "Aan het laden, even wachten a.u.b..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not install to device: %s" msgstr "Kon het subproces niet opstarten!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Running on device..." msgstr "Aangepast script uitvoeren ..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not execute on device." msgstr "Map kon niet gemaakt worden." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "Het hulpmiddel 'apksigner' kon niet gevonden worden." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -13346,64 +13477,64 @@ msgstr "" "Geen Android bouwsjabloon geïnstalleerd in dit project. Vanuit het " "projectmenu kan het geïnstalleerd worden." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "Debug Keystore is niet ingesteld of aanwezig in de Editor Settings." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "Release-Keystore is verkeerd ingesteld in de exportinstelingen." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" "Een geldig Android SDK-pad moet in de Editorinstellingen ingesteld zijn." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "Ongeldig Android SDK-pad in Editorinstellingen." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "'platform-tools' map ontbreekt!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "Controleer de opgegeven Android SDK map in de Editor instellingen." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "'build tools' map ontbreekt!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "Ongeldige publieke sleutel voor APK -uitbreiding." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "Ongeldige pakketnaam:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" @@ -13411,37 +13542,22 @@ msgstr "" "Ongeldige \"GodotPaymentV3\" module ingesloten in de projectinstelling " "\"android/modules\" (veranderd in Godot 3.2.2).\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "\"Use Custom Build\" moet geactiveerd zijn om plugins te gebruiken." -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" -"\"Degrees Of Freedom\" is alleen geldig als \"Xr Mode\" op \"Oculus Mobile VR" -"\" staat." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" "\"Hand Tracking\" is alleen geldig als \"Xr Mode\" op \"Oculus Mobile VR\" " "staat." -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" -"\"Focus Awareness\" is alleen geldig als \"Xr Mode\" op \"Oculus Mobile VR\" " -"staat." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "\"Export AAB\" is alleen geldig als \"Use Custom Build\" aan staat." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13449,58 +13565,58 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Signing release %s..." msgstr "" "Bestanden aan het doornemen,\n" "Wacht alstublieft..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not find keystore, unable to export." msgstr "Kon template niet openen voor export:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Verifying %s..." msgstr "%s aan het toevoegen..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting for Android" msgstr "Exporteer alles" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" "Bestandsnaam niet toegestaan! Android App Bundle vereist een *.aab extensie." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "APK Expansion werkt niet samen met Android App Bundle." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "Bestandsnaam niet toegestaan! Android APK vereist een *.apk extensie." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." @@ -13508,7 +13624,7 @@ msgstr "" "Geprobeerd met een eigen bouwsjabloon te bouwen, maar versie info ontbreekt. " "Installeer alstublieft opnieuw vanuit het 'Project' menu." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13520,26 +13636,26 @@ msgstr "" " Godot versie: %s\n" "Herinstalleer Android build template vanuit het 'Project' menu." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files to gradle project\n" msgstr "Kan project.godot niet bewerken in projectpad." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not write expansion package file!" msgstr "Kon bestand niet schrijven:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "Bouwen van Android Project (gradle)" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." @@ -13547,11 +13663,11 @@ msgstr "" "Bouwen van Androidproject mislukt, bekijk de foutmelding in de uitvoer.\n" "Zie anders Android bouwdocumentatie op docs.godotengine.org." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "Output verplaatsen" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." @@ -13559,24 +13675,24 @@ msgstr "" "Niet in staat om het export bestand te kopiëren en hernoemen. Controleer de " "gradle project folder voor outputs." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "Animatie niet gevonden: '%s'" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Creating APK..." msgstr "Contouren aan het creëeren..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" "Could not find template APK to export:\n" "%s" msgstr "Kon template niet openen voor export:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13584,21 +13700,21 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Adding files..." msgstr "%s aan het toevoegen..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files" msgstr "Kon bestand niet schrijven:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -14138,6 +14254,14 @@ msgstr "" "NavigationMeshInstance moet een (klein)kind zijn van een Navigation-knoop om " "navigatiegevens door te geven." +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14465,6 +14589,14 @@ msgstr "Een geldige extensie moet gebruikt worden." msgid "Enable grid minimap." msgstr "Rasteroverzicht inschakelen." +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14518,6 +14650,10 @@ msgid "Viewport size must be greater than 0 to render anything." msgstr "" "De grootte van een Viewport moet groter zijn dan 0 om iets weer te geven." +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " @@ -14569,6 +14705,41 @@ msgstr "Toewijzing aan uniform." msgid "Constants cannot be modified." msgstr "Constanten kunnen niet worden aangepast." +#~ msgid "Make Rest Pose (From Bones)" +#~ msgstr "Maak Rustpose (van Botten)" + +#~ msgid "Bottom" +#~ msgstr "Onder" + +#~ msgid "Left" +#~ msgstr "Links" + +#~ msgid "Right" +#~ msgstr "Rechts" + +#~ msgid "Front" +#~ msgstr "Voor" + +#~ msgid "Rear" +#~ msgstr "Achter" + +#~ msgid "Nameless gizmo" +#~ msgstr "Naamloze gizmo" + +#~ msgid "" +#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile " +#~ "VR\"." +#~ msgstr "" +#~ "\"Degrees Of Freedom\" is alleen geldig als \"Xr Mode\" op \"Oculus " +#~ "Mobile VR\" staat." + +#~ msgid "" +#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" +#~ "\"." +#~ msgstr "" +#~ "\"Focus Awareness\" is alleen geldig als \"Xr Mode\" op \"Oculus Mobile VR" +#~ "\" staat." + #~ msgid "Package Contents:" #~ msgstr "Pakketinhoud:" diff --git a/editor/translations/or.po b/editor/translations/or.po index 8bee62f8d5..c1036fa702 100644 --- a/editor/translations/or.po +++ b/editor/translations/or.po @@ -991,7 +991,7 @@ msgstr "" msgid "Dependencies" msgstr "" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "" @@ -1620,13 +1620,13 @@ msgid "" "Enabled'." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -1996,7 +1996,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "" @@ -2474,6 +2474,30 @@ msgid "Current scene not saved. Open anyway?" msgstr "" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Undo: %s" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Redo: %s" +msgstr "" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "" @@ -3097,6 +3121,10 @@ msgid "Merge With Existing" msgstr "" #: editor/editor_node.cpp +msgid "Apply MeshInstance Transforms" +msgstr "" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "" @@ -3337,6 +3365,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "" @@ -5377,6 +5409,16 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Locked" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Grouped" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6275,7 +6317,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -6859,6 +6905,14 @@ msgstr "" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Occluder Set Transform" +msgstr "" + +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Center Node" +msgstr "" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7353,11 +7407,11 @@ msgid "Skeleton2D" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" +msgid "Reset to Rest Pose" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" +msgid "Overwrite Rest Pose" msgstr "" #: editor/plugins/skeleton_editor_plugin.cpp @@ -7385,6 +7439,60 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7492,42 +7600,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -7789,6 +7877,10 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Occlusion Culling" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "" @@ -7854,7 +7946,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -11754,6 +11846,14 @@ msgstr "" msgid "Set Portal Point Position" msgstr "" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Position" +msgstr "" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12034,6 +12134,10 @@ msgstr "" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Build Solution" +msgstr "" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -12500,159 +12604,148 @@ msgstr "" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Uninstalling..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Installing to device, please wait..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not execute on device." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -12660,57 +12753,57 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -12718,54 +12811,54 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package not found: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -12773,19 +12866,19 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Adding files..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13235,6 +13328,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -13524,6 +13625,14 @@ msgstr "" msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13564,6 +13673,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/pl.po b/editor/translations/pl.po index 24ad379ad0..7a5a0eb037 100644 --- a/editor/translations/pl.po +++ b/editor/translations/pl.po @@ -48,11 +48,12 @@ # gnu-ewm <gnu.ewm@protonmail.com>, 2021. # vrid <patryksoon@live.com>, 2021. # Suchy Talerz <kacperkubis06@gmail.com>, 2021. +# Bartosz Stasiak <bs97086@amu.edu.pl>, 2021. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2021-07-29 21:48+0000\n" +"PO-Revision-Date: 2021-09-15 00:46+0000\n" "Last-Translator: Tomek <kobewi4e@gmail.com>\n" "Language-Team: Polish <https://hosted.weblate.org/projects/godot-engine/" "godot/pl/>\n" @@ -62,7 +63,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.7.2-dev\n" +"X-Generator: Weblate 4.9-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -411,15 +412,13 @@ msgstr "Wstaw animację" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "node '%s'" -msgstr "Nie można otworzyć '%s'." +msgstr "węzeł \"%s\"" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "animation" -msgstr "Animacja" +msgstr "animacja" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." @@ -428,9 +427,8 @@ msgstr "" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "property '%s'" -msgstr "Właściwość \"%s\" nie istnieje." +msgstr "właściwość \"%s\"" #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -639,9 +637,8 @@ msgid "Go to Previous Step" msgstr "Przejdź do poprzedniego kroku" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Apply Reset" -msgstr "Resetuj" +msgstr "Zastosuj reset" #: editor/animation_track_editor.cpp msgid "Optimize Animation" @@ -660,9 +657,8 @@ msgid "Use Bezier Curves" msgstr "Użyj krzywych Beziera" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Create RESET Track(s)" -msgstr "Wklej ścieżki" +msgstr "Utwórz ścieżki RESET" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" @@ -986,7 +982,6 @@ msgid "Edit..." msgstr "Edytuj..." #: editor/connections_dialog.cpp -#, fuzzy msgid "Go to Method" msgstr "Idź do metody" @@ -1008,7 +1003,7 @@ msgstr "Brak wyników dla \"%s\"." #: editor/create_dialog.cpp editor/property_selector.cpp msgid "No description available for %s." -msgstr "" +msgstr "Brak dostępnego opisu dla %s." #: editor/create_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp @@ -1068,7 +1063,7 @@ msgstr "" msgid "Dependencies" msgstr "Zależności" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Zasoby" @@ -1108,17 +1103,16 @@ msgid "Owners Of:" msgstr "Właściciele:" #: editor/dependency_editor.cpp -#, fuzzy msgid "" "Remove the selected files from the project? (Cannot be undone.)\n" "Depending on your filesystem configuration, the files will either be moved " "to the system trash or deleted permanently." msgstr "" "Usunąć wybrane pliki z projektu? (nie można tego cofnąć)\n" -"Możesz znaleźć usunięte pliki w systemowym koszu, by je przywrócić." +"W zależności od konfiguracji systemu plików, te pliki zostaną przeniesione " +"do kosza albo usunięte na stałe." #: editor/dependency_editor.cpp -#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -1128,7 +1122,8 @@ msgid "" msgstr "" "Usuwane pliki są wymagane przez inne zasoby, żeby mogły one działać.\n" "Usunąć mimo to? (nie można tego cofnąć)\n" -"Możesz znaleźć usunięte pliki w systemowym koszu, by je przywrócić." +"W zależności od konfiguracji systemu plików, te pliki zostaną przeniesione " +"do kosza albo usunięte na stałe." #: editor/dependency_editor.cpp msgid "Cannot remove:" @@ -1298,41 +1293,37 @@ msgid "Licenses" msgstr "Licencje" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Error opening asset file for \"%s\" (not in ZIP format)." -msgstr "Błąd otwierania pliku pakietu (nie jest w formacie ZIP)." +msgstr "Błąd otwierania pliku zasobu dla \"%s\" (nie jest w formacie ZIP)." #: editor/editor_asset_installer.cpp -#, fuzzy msgid "%s (already exists)" msgstr "%s (już istnieje)" #: editor/editor_asset_installer.cpp msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:" -msgstr "" +msgstr "Zawartość zasobu \"%s\" - %d plik(ów) konfliktuje z twoim projektem:" #: editor/editor_asset_installer.cpp msgid "Contents of asset \"%s\" - No files conflict with your project:" msgstr "" +"Zawartość zasobu \"%s\" - Żaden plik nie konfliktuje z twoim projektem:" #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" msgstr "Dekompresja zasobów" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "The following files failed extraction from asset \"%s\":" -msgstr "Nie powiodło się wypakowanie z pakietu następujących plików:" +msgstr "Nie powiodło się wypakowanie następujących plików z zasobu \"%s\":" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "(and %s more files)" -msgstr "I jeszcze %s plików." +msgstr "(i jeszcze %s plików)" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Asset \"%s\" installed successfully!" -msgstr "Pakiet zainstalowano poprawnie!" +msgstr "Zasób \"%s\" zainstalowany pomyślnie!" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -1344,9 +1335,8 @@ msgid "Install" msgstr "Zainstaluj" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Asset Installer" -msgstr "Instalator pakietu" +msgstr "Instalator zasobu" #: editor/editor_audio_buses.cpp msgid "Speakers" @@ -1409,7 +1399,6 @@ msgid "Bypass" msgstr "Omiń" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Bus Options" msgstr "Opcje magistrali" @@ -1577,13 +1566,12 @@ msgid "Can't add autoload:" msgstr "Nie można dodać Autoload:" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "%s is an invalid path. File does not exist." -msgstr "Plik nie istnieje." +msgstr "Ścieżka %s jest nieprawidłowa. Plik nie istnieje." #: editor/editor_autoload_settings.cpp msgid "%s is an invalid path. Not in resource path (res://)." -msgstr "" +msgstr "%s jest nieprawidłową ścieżką. Nie jest ścieżką zasobu (res://)." #: editor/editor_autoload_settings.cpp msgid "Add AutoLoad" @@ -1607,9 +1595,8 @@ msgid "Name" msgstr "Nazwa" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Global Variable" -msgstr "Zmienna" +msgstr "Zmienna globalna" #: editor/editor_data.cpp msgid "Paste Params" @@ -1733,13 +1720,13 @@ msgstr "" "Włącz \"Import Pvrtc\" w Ustawieniach Projektu lub wyłącz \"Driver Fallback " "Enabled\"." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "Nie znaleziono własnego szablonu debugowania." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -1783,48 +1770,50 @@ msgstr "Dok importowania" #: editor/editor_feature_profile.cpp msgid "Allows to view and edit 3D scenes." -msgstr "" +msgstr "Pozwala wyświetlać i edytować sceny 3D." #: editor/editor_feature_profile.cpp msgid "Allows to edit scripts using the integrated script editor." -msgstr "" +msgstr "Pozwala edytować skrypty, z użyciem zintegrowanego edytora skryptów." #: editor/editor_feature_profile.cpp msgid "Provides built-in access to the Asset Library." -msgstr "" +msgstr "Zapewnia wbudowany dostęp do Biblioteki Zasobów." #: editor/editor_feature_profile.cpp msgid "Allows editing the node hierarchy in the Scene dock." -msgstr "" +msgstr "Pozwala edytować hierarchię węzłów w doku sceny." #: editor/editor_feature_profile.cpp msgid "" "Allows to work with signals and groups of the node selected in the Scene " "dock." msgstr "" +"Pozwala pracować z sygnałami i grupami węzłów zaznaczonych w doku sceny." #: editor/editor_feature_profile.cpp msgid "Allows to browse the local file system via a dedicated dock." -msgstr "" +msgstr "Pozwala przeglądać lokalny system plików używając dedykowanego doku." #: editor/editor_feature_profile.cpp msgid "" "Allows to configure import settings for individual assets. Requires the " "FileSystem dock to function." msgstr "" +"Pozwala konfigurować ustawienia importu dla indywidualnych zasobów. Wymaga " +"doku systemu plików do funkcjonowania." #: editor/editor_feature_profile.cpp -#, fuzzy msgid "(current)" -msgstr "(Bieżący)" +msgstr "(bieżący)" #: editor/editor_feature_profile.cpp msgid "(none)" -msgstr "" +msgstr "(żaden)" #: editor/editor_feature_profile.cpp msgid "Remove currently selected profile, '%s'? Cannot be undone." -msgstr "" +msgstr "Usunąć aktualnie wybrany profil, \"%s\"? Nie można cofnąć." #: editor/editor_feature_profile.cpp msgid "Profile must be a valid filename and must not contain '.'" @@ -1855,19 +1844,16 @@ msgid "Enable Contextual Editor" msgstr "Włącz edytor kontekstowy" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Class Properties:" -msgstr "Właściwości:" +msgstr "Właściwości klasy:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Main Features:" -msgstr "Funkcje" +msgstr "Główne funkcjonalności:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Nodes and Classes:" -msgstr "Włączone klasy:" +msgstr "Węzły i klasy:" #: editor/editor_feature_profile.cpp msgid "File '%s' format is invalid, import aborted." @@ -1885,7 +1871,6 @@ msgid "Error saving profile to path: '%s'." msgstr "Błąd zapisywania profilu do ścieżki \"%s\"." #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Reset to Default" msgstr "Resetuj do domyślnych" @@ -1894,14 +1879,12 @@ msgid "Current Profile:" msgstr "Bieżący profil:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Create Profile" -msgstr "Usuń profil" +msgstr "Utwórz profil" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Remove Profile" -msgstr "Usuń Kafelek" +msgstr "Usuń profil" #: editor/editor_feature_profile.cpp msgid "Available Profiles:" @@ -1921,18 +1904,17 @@ msgid "Export" msgstr "Eksportuj" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Configure Selected Profile:" -msgstr "Bieżący profil:" +msgstr "Konfiguruj wybrany profil:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Extra Options:" -msgstr "Opcje Tekstury" +msgstr "Opcje dodatkowe:" #: editor/editor_feature_profile.cpp msgid "Create or import a profile to edit available classes and properties." msgstr "" +"Utwórz lub zaimportuj profil, by edytować dostępne klasy i właściwości." #: editor/editor_feature_profile.cpp msgid "New profile name:" @@ -1959,7 +1941,6 @@ msgid "Select Current Folder" msgstr "Wybierz bieżący katalog" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "File exists, overwrite?" msgstr "Plik istnieje, nadpisać?" @@ -2120,7 +2101,7 @@ msgstr "Istnieje wiele importerów różnych typów dla pliku %s, import przerwa msgid "(Re)Importing Assets" msgstr "(Ponowne) importowanie zasobów" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "Góra" @@ -2357,6 +2338,9 @@ msgid "" "Update Continuously is enabled, which can increase power usage. Click to " "disable it." msgstr "" +"Kręci się, gdy edytor się przerysowuje.\n" +"Ciągła aktualizacja jest włączona, co zwiększa pobór mocy. Kliknij, by ją " +"wyłączyć." #: editor/editor_node.cpp msgid "Spins when the editor window redraws." @@ -2593,13 +2577,16 @@ msgid "" "The current scene has no root node, but %d modified external resource(s) " "were saved anyway." msgstr "" +"Aktualna scena nie ma korzenia, ale %s zmodyfikowane zasoby zostały zapisane " +"i tak." #: editor/editor_node.cpp -#, fuzzy msgid "" "A root node is required to save the scene. You can add a root node using the " "Scene tree dock." -msgstr "Scena musi posiadać korzeń, by ją zapisać." +msgstr "" +"Scena musi posiadać korzeń, by ją zapisać. Możesz dodać węzeł korzenia " +"używając doku drzewa sceny." #: editor/editor_node.cpp msgid "Save Scene As..." @@ -2630,6 +2617,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "Aktualna scena nie została zapisana. Otworzyć mimo to?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "Cofnij" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "Ponów" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "Nie można przeładować sceny która nie została zapisana." @@ -2981,9 +2994,8 @@ msgid "Orphan Resource Explorer..." msgstr "Eksplorator osieroconych zasobów..." #: editor/editor_node.cpp -#, fuzzy msgid "Reload Current Project" -msgstr "Zmień nazwę projektu" +msgstr "Wczytaj ponownie aktualny projekt" #: editor/editor_node.cpp msgid "Quit to Project List" @@ -3142,22 +3154,20 @@ msgid "Help" msgstr "Pomoc" #: editor/editor_node.cpp -#, fuzzy msgid "Online Documentation" -msgstr "Otwórz dokumentację" +msgstr "Dokumentacja online" #: editor/editor_node.cpp msgid "Questions & Answers" -msgstr "" +msgstr "Pytania i odpowiedzi" #: editor/editor_node.cpp msgid "Report a Bug" msgstr "Zgłoś błąd" #: editor/editor_node.cpp -#, fuzzy msgid "Suggest a Feature" -msgstr "Ustaw Wartość" +msgstr "Zasugeruj funkcjonalność" #: editor/editor_node.cpp msgid "Send Docs Feedback" @@ -3168,9 +3178,8 @@ msgid "Community" msgstr "Społeczność" #: editor/editor_node.cpp -#, fuzzy msgid "About Godot" -msgstr "O silniku" +msgstr "O Godocie" #: editor/editor_node.cpp msgid "Support Godot Development" @@ -3262,14 +3271,12 @@ msgid "Manage Templates" msgstr "Zarządzaj szablonami" #: editor/editor_node.cpp -#, fuzzy msgid "Install from file" msgstr "Zainstaluj z pliku" #: editor/editor_node.cpp -#, fuzzy msgid "Select android sources file" -msgstr "Wybierz siatkę źródłową:" +msgstr "Wybierz pliki źródłowe Androida" #: editor/editor_node.cpp msgid "" @@ -3317,6 +3324,11 @@ msgid "Merge With Existing" msgstr "Połącz z Istniejącym" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Zmiana transformacji" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "Otwórz i Uruchom Skrypt" @@ -3351,9 +3363,8 @@ msgid "Select" msgstr "Zaznacz" #: editor/editor_node.cpp -#, fuzzy msgid "Select Current" -msgstr "Wybierz bieżący katalog" +msgstr "Wybierz aktualną" #: editor/editor_node.cpp msgid "Open 2D Editor" @@ -3388,9 +3399,8 @@ msgid "No sub-resources found." msgstr "Nie znaleziono podzasobów." #: editor/editor_path.cpp -#, fuzzy msgid "Open a list of sub-resources." -msgstr "Nie znaleziono podzasobów." +msgstr "Otwórz listę pod-zasobów." #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" @@ -3417,14 +3427,12 @@ msgid "Update" msgstr "Odśwież" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Version" -msgstr "Wersja:" +msgstr "Wersja" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Author" -msgstr "Autorzy" +msgstr "Autor" #: editor/editor_plugin_settings.cpp #: editor/plugins/version_control_editor_plugin.cpp @@ -3437,14 +3445,12 @@ msgid "Measure:" msgstr "Zmierzono:" #: editor/editor_profiler.cpp -#, fuzzy msgid "Frame Time (ms)" -msgstr "Czas klatki (sek)" +msgstr "Czas klatki (ms)" #: editor/editor_profiler.cpp -#, fuzzy msgid "Average Time (ms)" -msgstr "Średni czas (sek)" +msgstr "Średni czas (ms)" #: editor/editor_profiler.cpp msgid "Frame %" @@ -3471,6 +3477,12 @@ msgid "" "functions called by that function.\n" "Use this to find individual functions to optimize." msgstr "" +"Inkluzyjny: Zawiera czas z innych funkcji wywołanych przez tę funkcję.\n" +"Użyj tego, by znaleźć wąskie gardła.\n" +"\n" +"Własny: Licz tylko czas spędzony w samej funkcji, bez funkcji wywołanych " +"przez nią.\n" +"Użyj tego, by znaleźć pojedyncze funkcje do optymalizacji." #: editor/editor_profiler.cpp msgid "Frame #:" @@ -3573,6 +3585,10 @@ msgstr "" "Wybrany zasób (%s) nie zgadza się z żadnym rodzajem przewidywanym dla tego " "użycia (%s)." +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "Zrób unikalny" @@ -3592,9 +3608,8 @@ msgid "Paste" msgstr "Wklej" #: editor/editor_resource_picker.cpp editor/property_editor.cpp -#, fuzzy msgid "Convert to %s" -msgstr "Konwersja do %s" +msgstr "Konwertuj do %s" #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "New %s" @@ -3643,10 +3658,9 @@ msgid "Did you forget the '_run' method?" msgstr "Zapomniano metody \"_run\"?" #: editor/editor_spin_slider.cpp -#, fuzzy msgid "Hold %s to round to integers. Hold Shift for more precise changes." msgstr "" -"Przytrzyma Ctrl, by zaokrąglić do liczb całkowitych. Przytrzymaj Shift dla " +"Przytrzymaj %s, by zaokrąglić do liczb całkowitych. Przytrzymaj Shift dla " "bardziej precyzyjnych zmian." #: editor/editor_sub_scene.cpp @@ -3667,49 +3681,43 @@ msgstr "Zaimportuj z węzła:" #: editor/export_template_manager.cpp msgid "Open the folder containing these templates." -msgstr "" +msgstr "Otwórz folder zawierający te szablony." #: editor/export_template_manager.cpp msgid "Uninstall these templates." -msgstr "" +msgstr "Odinstaluj te szablony." #: editor/export_template_manager.cpp -#, fuzzy msgid "There are no mirrors available." -msgstr "Nie ma pliku \"%s\"." +msgstr "Brak dostępnych mirrorów." #: editor/export_template_manager.cpp -#, fuzzy msgid "Retrieving the mirror list..." -msgstr "Pobieranie informacji o serwerach lustrzanych, proszę czekać..." +msgstr "Pobieranie listy mirrorów..." #: editor/export_template_manager.cpp msgid "Starting the download..." -msgstr "" +msgstr "Zaczynam pobieranie..." #: editor/export_template_manager.cpp msgid "Error requesting URL:" msgstr "Błąd podczas żądania adresu URL:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Connecting to the mirror..." -msgstr "Łączenie z serwerem lustrzanym..." +msgstr "Łączenie z mirrorem..." #: editor/export_template_manager.cpp -#, fuzzy msgid "Can't resolve the requested address." -msgstr "Nie udało się odnaleźć hosta:" +msgstr "Nie udało się rozstrzygnąć żądanego adresu." #: editor/export_template_manager.cpp -#, fuzzy msgid "Can't connect to the mirror." -msgstr "Nie można połączyć do hosta:" +msgstr "Nie można połączyć z mirrorem." #: editor/export_template_manager.cpp -#, fuzzy msgid "No response from the mirror." -msgstr "Brak odpowiedzi hosta:" +msgstr "Brak odpowiedzi mirrora." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -3717,18 +3725,16 @@ msgid "Request failed." msgstr "Żądanie nie powiodło się." #: editor/export_template_manager.cpp -#, fuzzy msgid "Request ended up in a redirect loop." -msgstr "Żądanie nieudane, zbyt dużo przekierowań" +msgstr "Żądanie skończyło w pętli przekierowań." #: editor/export_template_manager.cpp -#, fuzzy msgid "Request failed:" -msgstr "Żądanie nie powiodło się." +msgstr "Żądanie nie powiodło się:" #: editor/export_template_manager.cpp msgid "Download complete; extracting templates..." -msgstr "" +msgstr "Pobieranie ukończone; rozpakowuję szablony..." #: editor/export_template_manager.cpp msgid "Cannot remove temporary file:" @@ -3747,13 +3753,12 @@ msgid "Error getting the list of mirrors." msgstr "Błąd odbierania listy mirrorów." #: editor/export_template_manager.cpp -#, fuzzy msgid "Error parsing JSON with the list of mirrors. Please report this issue!" -msgstr "Błąd parsowania JSONa listy mirrorów. Zgłoś proszę ten błąd!" +msgstr "Błąd parsowania JSONa z listą mirrorów. Zgłoś proszę ten błąd!" #: editor/export_template_manager.cpp msgid "Best available mirror" -msgstr "" +msgstr "Najlepszy dostępny mirror" #: editor/export_template_manager.cpp msgid "" @@ -3806,24 +3811,20 @@ msgid "SSL Handshake Error" msgstr "Błąd podczas wymiany (handshake) SSL" #: editor/export_template_manager.cpp -#, fuzzy msgid "Can't open the export templates file." -msgstr "Nie można otworzyć pliku zip szablonów eksportu." +msgstr "Nie można otworzyć pliku szablonów eksportu." #: editor/export_template_manager.cpp -#, fuzzy msgid "Invalid version.txt format inside the export templates file: %s." -msgstr "Nieprawidłowy format pliku version.txt w szablonach: %s." +msgstr "Nieprawidłowy format version.txt w pliku szablonów eksportu: %s." #: editor/export_template_manager.cpp -#, fuzzy msgid "No version.txt found inside the export templates file." -msgstr "Nie znaleziono pliku version.txt w szablonach." +msgstr "Nie znaleziono version.txt w pliku szablonu eksportu." #: editor/export_template_manager.cpp -#, fuzzy msgid "Error creating path for extracting templates:" -msgstr "Błąd tworzenia ścieżki dla szablonów:" +msgstr "Błąd tworzenia ścieżki do rozpakowania szablonów:" #: editor/export_template_manager.cpp msgid "Extracting Export Templates" @@ -3834,9 +3835,8 @@ msgid "Importing:" msgstr "Importowanie:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Remove templates for the version '%s'?" -msgstr "Usunąć wersję \"%s\" szablonu?" +msgstr "Usunąć szablony dla wersji \"%s\"?" #: editor/export_template_manager.cpp msgid "Uncompressing Android Build Sources" @@ -3852,54 +3852,51 @@ msgstr "Aktualna wersja:" #: editor/export_template_manager.cpp msgid "Export templates are missing. Download them or install from a file." -msgstr "" +msgstr "Brakuje szablonów eksportu. Pobierz je lub zainstaluj z pliku." #: editor/export_template_manager.cpp msgid "Export templates are installed and ready to be used." -msgstr "" +msgstr "Szablony eksportu są zainstalowane i gotowe do użycia." #: editor/export_template_manager.cpp -#, fuzzy msgid "Open Folder" -msgstr "Otwórz plik" +msgstr "Otwórz folder" #: editor/export_template_manager.cpp msgid "Open the folder containing installed templates for the current version." -msgstr "" +msgstr "Otwórz folder zawierający zainstalowane szablony dla aktualnej wersji." #: editor/export_template_manager.cpp msgid "Uninstall" msgstr "Odinstaluj" #: editor/export_template_manager.cpp -#, fuzzy msgid "Uninstall templates for the current version." -msgstr "Początkowa wartość dla licznika" +msgstr "Odinstaluj szablony dla aktualnej wersji." #: editor/export_template_manager.cpp -#, fuzzy msgid "Download from:" -msgstr "Błąd pobierania" +msgstr "Pobierz z:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Open in Web Browser" -msgstr "Uruchom w przeglądarce" +msgstr "Otwórz w przeglądarce" #: editor/export_template_manager.cpp -#, fuzzy msgid "Copy Mirror URL" -msgstr "Kopiuj błąd" +msgstr "Kopiuj URL mirrora" #: editor/export_template_manager.cpp msgid "Download and Install" -msgstr "" +msgstr "Pobierz i zainstaluj" #: editor/export_template_manager.cpp msgid "" "Download and install templates for the current version from the best " "possible mirror." msgstr "" +"Pobierz i zainstaluj szablony dla aktualnej wersji z najlepszego dostępnego " +"mirroru." #: editor/export_template_manager.cpp msgid "Official export templates aren't available for development builds." @@ -3908,14 +3905,12 @@ msgstr "" "programistycznych." #: editor/export_template_manager.cpp -#, fuzzy msgid "Install from File" msgstr "Zainstaluj z pliku" #: editor/export_template_manager.cpp -#, fuzzy msgid "Install templates from a local file." -msgstr "Zaimportuj Szablony z pliku ZIP" +msgstr "Zainstaluj szablony z lokalnego pliku." #: editor/export_template_manager.cpp editor/find_in_files.cpp #: editor/progress_dialog.cpp scene/gui/dialogs.cpp @@ -3923,19 +3918,16 @@ msgid "Cancel" msgstr "Anuluj" #: editor/export_template_manager.cpp -#, fuzzy msgid "Cancel the download of the templates." -msgstr "Nie można otworzyć pliku zip szablonów eksportu." +msgstr "Anuluj pobieranie szablonów." #: editor/export_template_manager.cpp -#, fuzzy msgid "Other Installed Versions:" -msgstr "Zainstalowane szablony:" +msgstr "Inne zainstalowane wersje:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Uninstall Template" -msgstr "Odinstaluj" +msgstr "Odinstaluj szablon" #: editor/export_template_manager.cpp msgid "Select Template File" @@ -3950,6 +3942,8 @@ msgid "" "The templates will continue to download.\n" "You may experience a short editor freeze when they finish." msgstr "" +"Szablony kontynuują pobieranie.\n" +"Możesz doświadczyć krótkiego zacięcia edytora, kiedy skończą." #: editor/filesystem_dock.cpp msgid "Favorites" @@ -4097,35 +4091,32 @@ msgid "Collapse All" msgstr "Zwiń wszystko" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Sort files" -msgstr "Przeszukaj pliki" +msgstr "Sortuj pliki" #: editor/filesystem_dock.cpp msgid "Sort by Name (Ascending)" -msgstr "" +msgstr "Sortuj po nazwie (rosnąco)" #: editor/filesystem_dock.cpp msgid "Sort by Name (Descending)" -msgstr "" +msgstr "Sortuj po nazwie (malejąco)" #: editor/filesystem_dock.cpp msgid "Sort by Type (Ascending)" -msgstr "" +msgstr "Sortuj po typie (rosnąco)" #: editor/filesystem_dock.cpp msgid "Sort by Type (Descending)" -msgstr "" +msgstr "Sortuj po typie (malejąco)" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Sort by Last Modified" -msgstr "Data modyfikacji" +msgstr "Ostatnie zmodyfikowane" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Sort by First Modified" -msgstr "Data modyfikacji" +msgstr "Pierwsze zmodyfikowane" #: editor/filesystem_dock.cpp msgid "Duplicate..." @@ -4137,7 +4128,7 @@ msgstr "Zmień nazwę..." #: editor/filesystem_dock.cpp msgid "Focus the search box" -msgstr "" +msgstr "Przełącz na pasek wyszukiwania" #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -4447,14 +4438,12 @@ msgid "Failed to load resource." msgstr "Nie udało się wczytać zasobu." #: editor/inspector_dock.cpp -#, fuzzy msgid "Copy Properties" -msgstr "Właściwości" +msgstr "Skopiuj właściwości" #: editor/inspector_dock.cpp -#, fuzzy msgid "Paste Properties" -msgstr "Właściwości" +msgstr "Wklej właściwości" #: editor/inspector_dock.cpp msgid "Make Sub-Resources Unique" @@ -4479,23 +4468,20 @@ msgid "Save As..." msgstr "Zapisz jako..." #: editor/inspector_dock.cpp -#, fuzzy msgid "Extra resource options." -msgstr "Nie znaleziono w ścieżce zasobów." +msgstr "Dodatkowe opcje zasobów." #: editor/inspector_dock.cpp -#, fuzzy msgid "Edit Resource from Clipboard" -msgstr "Edytuj schowek zasobów" +msgstr "Edytuj zasób ze schowka" #: editor/inspector_dock.cpp msgid "Copy Resource" msgstr "Kopiuj zasób" #: editor/inspector_dock.cpp -#, fuzzy msgid "Make Resource Built-In" -msgstr "Stwórz wbudowany" +msgstr "Uczyń zasób wbudowanym" #: editor/inspector_dock.cpp msgid "Go to the previous edited object in history." @@ -4510,9 +4496,8 @@ msgid "History of recently edited objects." msgstr "Historia ostatnio edytowanych obiektów." #: editor/inspector_dock.cpp -#, fuzzy msgid "Open documentation for this object." -msgstr "Otwórz dokumentację" +msgstr "Otwórz dokumentację dla tego obiektu." #: editor/inspector_dock.cpp editor/scene_tree_dock.cpp msgid "Open Documentation" @@ -4523,9 +4508,8 @@ msgid "Filter properties" msgstr "Filtruj właściwości" #: editor/inspector_dock.cpp -#, fuzzy msgid "Manage object properties." -msgstr "Właściwości obiektu." +msgstr "Zarządzaj właściwościami obiektu." #: editor/inspector_dock.cpp msgid "Changes may be lost!" @@ -4770,9 +4754,8 @@ msgid "Blend:" msgstr "Mieszanie:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Parameter Changed:" -msgstr "Parametr zmieniony" +msgstr "Parametr zmieniony:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -5503,11 +5486,11 @@ msgstr "Wszystko" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Search templates, projects, and demos" -msgstr "" +msgstr "Przeszukaj szablony, projekty i dema" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Search assets (excluding templates, projects, and demos)" -msgstr "" +msgstr "Przeszukaj zasoby (bez szablonów, projektów i dem)" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." @@ -5551,7 +5534,7 @@ msgstr "Plik ZIP assetów" #: editor/plugins/audio_stream_editor_plugin.cpp msgid "Audio Preview Play/Pause" -msgstr "" +msgstr "Graj/Pauzuj podgląd audio" #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "" @@ -5710,6 +5693,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "Przesuń CanvasItem \"%s\" na (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "Zablokuj wybrane" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Grupa" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -5812,13 +5807,12 @@ msgstr "Zmień zakotwiczenie" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "" "Project Camera Override\n" "Overrides the running project's camera with the editor viewport camera." msgstr "" "Przejmij kamerę gry\n" -"Zastępuje kamerę gry kamerą z widoku edytora." +"Nadpisuje kamerę uruchomionego projektu kamerą z widoku edytora." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5827,6 +5821,9 @@ msgid "" "No project instance running. Run the project from the editor to use this " "feature." msgstr "" +"Przejmij kamerę gry\n" +"Nie ma uruchomionej instancji projektu. Uruchom projekt z edytora, by użyć " +"tej funkcjonalności." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5894,31 +5891,27 @@ msgstr "Tryb zaznaczenia" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Drag: Rotate selected node around pivot." -msgstr "Usuń zaznaczony węzeł lub przejście." +msgstr "Przeciągnij: Obróć zaznaczony węzeł wokół osi obrotu." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Alt+Drag: Move selected node." -msgstr "Alt+Przeciągnij: Przesuń" +msgstr "Alt+Przeciągnij: Przesuń zaznaczony węzeł." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "V: Set selected node's pivot position." -msgstr "Usuń zaznaczony węzeł lub przejście." +msgstr "V: Ustaw pozycję osi obrotu zaznaczonego węzła." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Alt+RMB: Show list of all nodes at position clicked, including locked." msgstr "" -"Pokaż listę obiektów w miejscu kliknięcia\n" -"(tak samo jak Alt+RMB w trybie zaznaczania)." +"Alt+PPM: Pokaż listę wszystkich węzłów na klikniętej pozycji, wliczając " +"zablokowane." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "RMB: Add node at position clicked." -msgstr "" +msgstr "Ctrl+PPM: Dodaj węzeł na klikniętej pozycji." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5990,7 +5983,7 @@ msgstr "Przyciągaj względnie" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Pixel Snap" -msgstr "Użyj krokowania na poziomie pikseli" +msgstr "Przyciągaj do pikseli" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Smart Snapping" @@ -6156,14 +6149,12 @@ msgid "Clear Pose" msgstr "Wyczyść pozę" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Add Node Here" -msgstr "Dodaj węzeł" +msgstr "Dodaj węzeł tutaj" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Instance Scene Here" -msgstr "Dodaj instancję sceny" +msgstr "Instancjonuj scenę tutaj" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Multiply grid step by 2" @@ -6179,49 +6170,43 @@ msgstr "Przesuń widok" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 3.125%" -msgstr "" +msgstr "Oddal do 3.125%" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 6.25%" -msgstr "" +msgstr "Oddal do 6.25%" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 12.5%" -msgstr "" +msgstr "Oddal do 12.5%" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 25%" -msgstr "Oddal" +msgstr "Oddal do 25%" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 50%" -msgstr "Oddal" +msgstr "Oddal do 50%" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 100%" -msgstr "Oddal" +msgstr "Przybliż do 100%" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 200%" -msgstr "Oddal" +msgstr "Przybliż do 200%" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 400%" -msgstr "Oddal" +msgstr "Przybliż do 400%" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 800%" -msgstr "Oddal" +msgstr "Przybliż do 800%" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 1600%" -msgstr "" +msgstr "Przybliż do 1600%" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" @@ -6468,9 +6453,8 @@ msgid "Couldn't create a single convex collision shape." msgstr "Nie udało się utworzyć pojedynczego wypukłego kształtu kolizji." #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Simplified Convex Shape" -msgstr "Utwórz pojedynczy wypukły kształt" +msgstr "Utwórz uproszczony wypukły kształt" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Single Convex Shape" @@ -6506,9 +6490,8 @@ msgid "No mesh to debug." msgstr "Brak siatki do debugowania." #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Mesh has no UV in layer %d." -msgstr "Model nie posiada UV w tej warstwie" +msgstr "Siatka nie posiada UV na warstwie %d." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "MeshInstance lacks a Mesh!" @@ -6573,9 +6556,8 @@ msgstr "" "To jest najszybsza (ale najmniej dokładna) opcja dla detekcji kolizji." #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Simplified Convex Collision Sibling" -msgstr "Utwórz pojedynczego wypukłego sąsiada kolizji" +msgstr "Utwórz uproszczonego wypukłego sąsiada kolizji" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "" @@ -6583,20 +6565,23 @@ msgid "" "This is similar to single collision shape, but can result in a simpler " "geometry in some cases, at the cost of accuracy." msgstr "" +"Tworzy uproszczony wypukły kształt kolizji.\n" +"Podobne do pojedynczego kształtu, ale w niektórych przypadkach tworzy " +"prostszą geometrię, kosztem dokładności." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Multiple Convex Collision Siblings" msgstr "Utwórz wiele wypukłych sąsiadów kolizji" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "" "Creates a polygon-based collision shape.\n" "This is a performance middle-ground between a single convex collision and a " "polygon-based collision." msgstr "" "Tworzy kształt kolizji oparty o wielokąty.\n" -"To jest złoty środek względem wydajności powyższych dwóch opcji." +"To jest złoty środek względem wydajności pomiędzy pojedynczym kształtem, a " +"kolizją opartą o wielokąty." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." @@ -6663,7 +6648,13 @@ msgid "Remove Selected Item" msgstr "Usuń zaznaczony element" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +#, fuzzy +msgid "Import from Scene (Ignore Transforms)" +msgstr "Import ze sceny" + +#: editor/plugins/mesh_library_editor_plugin.cpp +#, fuzzy +msgid "Import from Scene (Apply Transforms)" msgstr "Import ze sceny" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7238,24 +7229,30 @@ msgid "ResourcePreloader" msgstr "Wstępny ładowacz zasobów" #: editor/plugins/room_manager_editor_plugin.cpp -#, fuzzy msgid "Flip Portals" -msgstr "Odbij poziomo" +msgstr "Odbij portale" #: editor/plugins/room_manager_editor_plugin.cpp -#, fuzzy msgid "Room Generate Points" -msgstr "Wygeneruj chmurę punktów:" +msgstr "Wygeneruj punkty pokoju" #: editor/plugins/room_manager_editor_plugin.cpp -#, fuzzy msgid "Generate Points" -msgstr "Wygeneruj chmurę punktów:" +msgstr "Wygeneruj punkty" #: editor/plugins/room_manager_editor_plugin.cpp -#, fuzzy msgid "Flip Portal" -msgstr "Odbij poziomo" +msgstr "Odbij portal" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "Wyczyść przekształcenie" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Utwórz węzeł" #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" @@ -7760,12 +7757,14 @@ msgid "Skeleton2D" msgstr "Szkielet 2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "Utwórz pozę spoczynkową (z kości)" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "Ustaw kości do pozy spoczynkowej" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "Ustaw kości do pozy spoczynkowej" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "Nadpisz" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7792,6 +7791,71 @@ msgid "Perspective" msgstr "Perspektywa" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Orthogonal" +msgstr "Ortogonalna" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Perspective" +msgstr "Perspektywa" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Orthogonal" +msgstr "Ortogonalna" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "Perspektywa" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Left Orthogonal" +msgstr "Ortogonalna" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Perspective" +msgstr "Perspektywa" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Orthogonal" +msgstr "Ortogonalna" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Orthogonal" +msgstr "Ortogonalna" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Perspective" +msgstr "Perspektywa" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Orthogonal" +msgstr "Ortogonalna" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Perspective" +msgstr "Perspektywa" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "Transformacja Zaniechana." @@ -7818,20 +7882,17 @@ msgid "None" msgstr "Brak" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Rotate" -msgstr "Status:" +msgstr "Obróć" #. TRANSLATORS: This refers to the movement that changes the position of an object. #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Translate" -msgstr "Przesuń:" +msgstr "Przesuń" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Scale" -msgstr "Skala:" +msgstr "Skaluj" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scaling: " @@ -7854,52 +7915,44 @@ msgid "Animation Key Inserted." msgstr "Wstawiono klucz animacji." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Pitch:" -msgstr "Wysokość" +msgstr "Pułap:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Yaw:" -msgstr "" +msgstr "Odchylenie:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Size:" -msgstr "Rozmiar: " +msgstr "Rozmiar:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Objects Drawn:" -msgstr "Narysowane obiekty" +msgstr "Narysowane obiekty:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Material Changes:" -msgstr "Zmiany materiału" +msgstr "Zmiany materiału:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Shader Changes:" -msgstr "Zmiany Shadera" +msgstr "Zmiany shadera:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Surface Changes:" -msgstr "Zmiany powierzchni" +msgstr "Zmiany powierzchni:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Draw Calls:" -msgstr "Wywołania rysowania" +msgstr "Wywołania rysowania:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Vertices:" -msgstr "Wierzchołki" +msgstr "Wierzchołki:" #: editor/plugins/spatial_editor_plugin.cpp msgid "FPS: %d (%s ms)" -msgstr "" +msgstr "FPS: %d (%s ms)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Top View." @@ -7910,42 +7963,22 @@ msgid "Bottom View." msgstr "Widok z dołu." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "Dół" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "Widok z lewej." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "Lewa" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "Widok z prawej." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "Prawa" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "Widok z przodu." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "Przód" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "Widok z tyłu." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "Tył" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "Dopasuj położenie do widoku" @@ -8054,9 +8087,8 @@ msgid "Freelook Slow Modifier" msgstr "Wolny modyfikator swobodnego widoku" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Toggle Camera Preview" -msgstr "Zmień rozmiar kamery" +msgstr "Przełącz podgląd kamery" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Rotation Locked" @@ -8078,9 +8110,8 @@ msgstr "" "Nie może być używana jako miarodajny wskaźnik wydajności w grze." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Convert Rooms" -msgstr "Konwersja do %s" +msgstr "Konwertuj pokoje" #: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" @@ -8102,7 +8133,6 @@ msgstr "" "powierzchnie (\"x-ray\")." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Snap Nodes to Floor" msgstr "Przyciągnij węzły do podłogi" @@ -8120,7 +8150,7 @@ msgstr "Użyj przyciągania" #: editor/plugins/spatial_editor_plugin.cpp msgid "Converts rooms for portal culling." -msgstr "" +msgstr "Konwertuje pokoje do cullingu portali." #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" @@ -8216,9 +8246,13 @@ msgid "View Grid" msgstr "Pokaż siatkę" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View Portal Culling" -msgstr "Ustawienia widoku" +msgstr "Culling portali widoku" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "Culling portali widoku" #: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp @@ -8286,8 +8320,9 @@ msgid "Post" msgstr "Po" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" -msgstr "Uchwyt bez nazwy" +#, fuzzy +msgid "Unnamed Gizmo" +msgstr "Projekt bez nazwy" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Mesh2D" @@ -8364,7 +8399,7 @@ msgstr "Utwórz równorzędny węzeł LightOccluder2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Sprite" -msgstr "Postać" +msgstr "Sprite" #: editor/plugins/sprite_editor_plugin.cpp msgid "Simplification: " @@ -8539,221 +8574,196 @@ msgid "TextureRegion" msgstr "Obszar tekstury" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Colors" -msgstr "Kolor" +msgstr "Kolory" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Fonts" -msgstr "Font" +msgstr "Fonty" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Icons" -msgstr "Ikona" +msgstr "Ikony" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Styleboxes" -msgstr "StyleBox" +msgstr "Styleboxy" #: editor/plugins/theme_editor_plugin.cpp msgid "{num} color(s)" -msgstr "" +msgstr "{num} kolor(y)" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "No colors found." -msgstr "Nie znaleziono podzasobów." +msgstr "Nie znaleziono kolorów." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "{num} constant(s)" -msgstr "Stałe" +msgstr "{num} stałych" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "No constants found." -msgstr "Stała koloru." +msgstr "Nie znaleziono stałych." #: editor/plugins/theme_editor_plugin.cpp msgid "{num} font(s)" -msgstr "" +msgstr "{num} czcionki" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "No fonts found." -msgstr "Nie znaleziono!" +msgstr "Nie znaleziono czcionek." #: editor/plugins/theme_editor_plugin.cpp msgid "{num} icon(s)" -msgstr "" +msgstr "{num} ikon" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "No icons found." -msgstr "Nie znaleziono!" +msgstr "Nie znaleziono ikon." #: editor/plugins/theme_editor_plugin.cpp msgid "{num} stylebox(es)" -msgstr "" +msgstr "{num} stylebox(y)" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "No styleboxes found." -msgstr "Nie znaleziono podzasobów." +msgstr "Nie znaleziono styleboxów." #: editor/plugins/theme_editor_plugin.cpp msgid "{num} currently selected" -msgstr "" +msgstr "{num} aktualnie wybrane" #: editor/plugins/theme_editor_plugin.cpp msgid "Nothing was selected for the import." -msgstr "" +msgstr "Nic nie zostało wybrane do importu." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Importing Theme Items" -msgstr "Zaimportuj motyw" +msgstr "Importowanie elementów motywu" #: editor/plugins/theme_editor_plugin.cpp msgid "Importing items {n}/{n}" -msgstr "" +msgstr "Importowanie elementów {n}/{n}" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Updating the editor" -msgstr "Zamknąć edytor?" +msgstr "Aktualizowanie edytora" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Finalizing" -msgstr "Analizowanie" +msgstr "Finalizowanie" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Filter:" -msgstr "Filtr: " +msgstr "Filtr:" #: editor/plugins/theme_editor_plugin.cpp msgid "With Data" -msgstr "" +msgstr "z danymi" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select by data type:" -msgstr "Wybierz węzeł" +msgstr "Zaznacz po typie danych:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select all visible color items." -msgstr "Wybierz podział, by go usunąć." +msgstr "Zaznacz wszystkie widoczne elementy kolorów." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible color items and their data." -msgstr "" +msgstr "Zaznacz wszystkie widoczne elementy kolorów oraz ich dane." #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all visible color items." -msgstr "" +msgstr "Odznacz wszystkie widoczne elementy kolorów." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select all visible constant items." -msgstr "Najpierw wybierz ustawienie z listy!" +msgstr "Zaznacz wszystkie widoczne elementy stałych." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible constant items and their data." -msgstr "" +msgstr "Zaznacz wszystkie widoczne elementy stałych i ich dane." #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all visible constant items." -msgstr "" +msgstr "Odznacz wszystkie widoczne elementy stałych." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select all visible font items." -msgstr "Najpierw wybierz ustawienie z listy!" +msgstr "Zaznacz wszystkie widoczne elementy czcionek." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible font items and their data." -msgstr "" +msgstr "Zaznacz wszystkie widoczne elementy czcionek i ich dane." #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all visible font items." -msgstr "" +msgstr "Odznacz wszystkie widoczne elementy czcionek." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select all visible icon items." -msgstr "Najpierw wybierz ustawienie z listy!" +msgstr "Zaznacz wszystkie widoczne elementy ikon." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select all visible icon items and their data." -msgstr "Najpierw wybierz ustawienie z listy!" +msgstr "Zaznacz wszystkie widoczne elementy ikon i ich dane." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Deselect all visible icon items." -msgstr "Najpierw wybierz ustawienie z listy!" +msgstr "Odznacz wszystkie widoczne elementy ikon." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible stylebox items." -msgstr "" +msgstr "Zaznacz wszystkie widoczne elementy styleboxów." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible stylebox items and their data." -msgstr "" +msgstr "Zaznacz wszystkie widoczne elementy styleboxów i ich dane." #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all visible stylebox items." -msgstr "" +msgstr "Odznacz wszystkie widoczne elementy styleboxów." #: editor/plugins/theme_editor_plugin.cpp msgid "" "Caution: Adding icon data may considerably increase the size of your Theme " "resource." msgstr "" +"Uwaga: Dodanie danych ikon może znacząco zwiększyć rozmiar twojego zasobu " +"Theme." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Collapse types." -msgstr "Zwiń wszystko" +msgstr "Zwiń typy." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Expand types." -msgstr "Rozwiń wszystko" +msgstr "Rozwiń typy." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select all Theme items." -msgstr "Wybierz plik szablonu" +msgstr "Zaznacz wszystkie elementy motywu." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select With Data" -msgstr "Zaznacz Punkty" +msgstr "Zaznacz z danymi" #: editor/plugins/theme_editor_plugin.cpp msgid "Select all Theme items with item data." -msgstr "" +msgstr "Zaznacz wszystkie elementy motywu z ich danymi." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Deselect All" -msgstr "Zaznacz wszystko" +msgstr "Odznacz wszystko" #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all Theme items." -msgstr "" +msgstr "Odznacz wszystkie elementy motywu." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Import Selected" -msgstr "Importuj Scenę" +msgstr "Importuj zaznaczone" #: editor/plugins/theme_editor_plugin.cpp msgid "" @@ -8761,283 +8771,250 @@ msgid "" "closing this window.\n" "Close anyway?" msgstr "" +"Zakładka importu elementów ma zaznaczone elementy. Zaznaczenie zostanie " +"utracone po zamknięciu tego okna.\n" +"Zamknąć tak czy inaczej?" #: editor/plugins/theme_editor_plugin.cpp msgid "" "Select a theme type from the list to edit its items.\n" "You can add a custom type or import a type with its items from another theme." msgstr "" +"Wybierz typ motywu z listy, aby edytować jego elementy.\n" +"Możesz dodać niestandardowy typ lub importować typ wraz z jego elementami z " +"innego motywu." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Color Items" -msgstr "Usuń wszystkie elementy" +msgstr "Usuń wszystkie elementy kolorów" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Item" -msgstr "Usuń element" +msgstr "Zmień nazwę elementu" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Constant Items" -msgstr "Usuń wszystkie elementy" +msgstr "Usuń wszystkie elementy stałych" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Font Items" -msgstr "Usuń wszystkie elementy" +msgstr "Usuń wszystkie elementy czcionek" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Icon Items" -msgstr "Usuń wszystkie elementy" +msgstr "Usuń wszystkie elementy ikon" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All StyleBox Items" -msgstr "Usuń wszystkie elementy" +msgstr "Usuń wszystkie elementy styleboxów" #: editor/plugins/theme_editor_plugin.cpp msgid "" "This theme type is empty.\n" "Add more items to it manually or by importing from another theme." msgstr "" +"Ten motyw jest pusty.\n" +"Dodaj więcej elementów ręcznie albo importując z innego motywu." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Color Item" -msgstr "Dodaj klasę elementów" +msgstr "Dodaj element koloru" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Constant Item" -msgstr "Dodaj klasę elementów" +msgstr "Dodaj element stałej" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Font Item" -msgstr "Dodaj element" +msgstr "Dodaj element czcionki" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Icon Item" -msgstr "Dodaj element" +msgstr "Dodaj element ikony" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Stylebox Item" -msgstr "Dodaj wszystkie elementy" +msgstr "Dodaj element stylebox" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Color Item" -msgstr "Usuń elementy klasy" +msgstr "Zmień nazwę elementu koloru" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Constant Item" -msgstr "Usuń elementy klasy" +msgstr "Zmień nazwę elementu stałej" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Font Item" -msgstr "Zmień nazwę węzła" +msgstr "Zmień nazwę elementu czcionki" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Icon Item" -msgstr "Zmień nazwę węzła" +msgstr "Zmień nazwę elementu ikony" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Stylebox Item" -msgstr "Usuń zaznaczony element" +msgstr "Zmień nazwę elementu stylebox" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Invalid file, not a Theme resource." -msgstr "Plik niepoprawny, nie jest układem magistral audio." +msgstr "Plik niepoprawny, nie jest zasobem motywu (Theme)." #: editor/plugins/theme_editor_plugin.cpp msgid "Invalid file, same as the edited Theme resource." -msgstr "" +msgstr "Nieprawidłowy plik, taki sam jak edytowany zasób motywu." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Manage Theme Items" -msgstr "Zarządzaj szablonami" +msgstr "Zarządzaj elementami motywu" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Edit Items" -msgstr "Edytowalny element" +msgstr "Edytuj elementy" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Types:" -msgstr "Typ:" +msgstr "Typy:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Type:" -msgstr "Typ:" +msgstr "Dodaj typ:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Item:" -msgstr "Dodaj element" +msgstr "Dodaj element:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add StyleBox Item" -msgstr "Dodaj wszystkie elementy" +msgstr "Dodaj element stylebox" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove Items:" -msgstr "Usuń element" +msgstr "Usuń elementy:" #: editor/plugins/theme_editor_plugin.cpp msgid "Remove Class Items" msgstr "Usuń elementy klasy" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove Custom Items" -msgstr "Usuń elementy klasy" +msgstr "Usuń własne elementy" #: editor/plugins/theme_editor_plugin.cpp msgid "Remove All Items" msgstr "Usuń wszystkie elementy" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Theme Item" -msgstr "Elementy motywu interfejsu" +msgstr "Dodaj element motywu" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Old Name:" -msgstr "Nazwa węzła:" +msgstr "Stara nazwa:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Import Items" -msgstr "Zaimportuj motyw" +msgstr "Importuj elementy" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Default Theme" -msgstr "Domyślny" +msgstr "Domyślny motyw" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Editor Theme" -msgstr "Edytuj motyw" +msgstr "Motyw edytora" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select Another Theme Resource:" -msgstr "Usuń zasób" +msgstr "Wybierz inny zasób motywu:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Another Theme" -msgstr "Zaimportuj motyw" +msgstr "Inny motyw" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Confirm Item Rename" -msgstr "Zmień nazwę ściezki animacji" +msgstr "Potwierdź zmianę nazwy elementu" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Cancel Item Rename" -msgstr "Grupowa zmiana nazwy" +msgstr "Anuluj zmianę nazwy elementu" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Override Item" -msgstr "Nadpisuje" +msgstr "Nadpisz element" #: editor/plugins/theme_editor_plugin.cpp msgid "Unpin this StyleBox as a main style." -msgstr "" +msgstr "Odepnij ten StyleBox jako główny styl." #: editor/plugins/theme_editor_plugin.cpp msgid "" "Pin this StyleBox as a main style. Editing its properties will update the " "same properties in all other StyleBoxes of this type." msgstr "" +"Przypnij ten StyleBox jako główny styl. Edytowanie jego właściwości " +"zaktualizuje te same właściwości we wszystkich innych StyleBoxach tego typu." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Type" -msgstr "Typ" +msgstr "Dodaj typ" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Item Type" -msgstr "Dodaj element" +msgstr "Dodaj typ elementu" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Node Types:" -msgstr "Typ węzła" +msgstr "Typy węzłów:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Show Default" -msgstr "Wczytaj domyślny" +msgstr "Pokaż domyślne" #: editor/plugins/theme_editor_plugin.cpp msgid "Show default type items alongside items that have been overridden." -msgstr "" +msgstr "Pokaż domyślne elementy typu obok elementów, które zostały nadpisane." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Override All" -msgstr "Nadpisuje" +msgstr "Nadpisz wszystkie" #: editor/plugins/theme_editor_plugin.cpp msgid "Override all default type items." -msgstr "" +msgstr "Nadpisz wszystkie domyślne elementy typu." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Theme:" -msgstr "Motyw" +msgstr "Motyw:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Manage Items..." -msgstr "Zarządzaj szablonami eksportu..." +msgstr "Zarządzaj elementami..." #: editor/plugins/theme_editor_plugin.cpp msgid "Add, remove, organize and import Theme items." -msgstr "" +msgstr "Dodaj, usuń, organizuj i importuj elementy motywu (Theme)." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Preview" -msgstr "Podgląd" +msgstr "Dodaj podgląd" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Default Preview" -msgstr "Odśwież podgląd" +msgstr "Domyślny podgląd" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select UI Scene:" -msgstr "Wybierz siatkę źródłową:" +msgstr "Wybierz scenę UI:" #: editor/plugins/theme_editor_preview.cpp msgid "" "Toggle the control picker, allowing to visually select control types for " "edit." msgstr "" +"Przełącz pobieranie kontrolek, pozwalające na wizualne wybranie typów " +"kontrolek do edytowania." #: editor/plugins/theme_editor_preview.cpp msgid "Toggle Button" @@ -9072,9 +9049,8 @@ msgid "Checked Radio Item" msgstr "Zaznaczony element opcji" #: editor/plugins/theme_editor_preview.cpp -#, fuzzy msgid "Named Separator" -msgstr "Nazwany sep." +msgstr "Nazwany separator" #: editor/plugins/theme_editor_preview.cpp msgid "Submenu" @@ -9127,19 +9103,21 @@ msgstr "Ma,Wiele,Opcji" #: editor/plugins/theme_editor_preview.cpp msgid "Invalid path, the PackedScene resource was probably moved or removed." msgstr "" +"Nieprawidłowa ścieżka, zasób PackedScene został prawdopodobnie przeniesiony " +"lub usunięty." #: editor/plugins/theme_editor_preview.cpp msgid "Invalid PackedScene resource, must have a Control node at its root." msgstr "" +"Nieprawidłowy zasób PackedScene, musi posiadać węzeł Control jako korzeń." #: editor/plugins/theme_editor_preview.cpp -#, fuzzy msgid "Invalid file, not a PackedScene resource." -msgstr "Plik niepoprawny, nie jest układem magistral audio." +msgstr "Nieprawidłowy plik, nie jest zasobem PackedScene." #: editor/plugins/theme_editor_preview.cpp msgid "Reload the scene to reflect its most actual state." -msgstr "" +msgstr "Przeładuj scenę, by odzwierciedlić jej najbardziej aktualny stan." #: editor/plugins/tile_map_editor_plugin.cpp msgid "Erase Selection" @@ -10540,9 +10518,8 @@ msgid "VisualShader" msgstr "Shader wizualny" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Edit Visual Property:" -msgstr "Edytuj Wizualną Właściwość" +msgstr "Edytuj wizualną właściwość:" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Visual Shader Mode Changed" @@ -10667,9 +10644,8 @@ msgid "Script" msgstr "Skrypt" #: editor/project_export.cpp -#, fuzzy msgid "GDScript Export Mode:" -msgstr "Tryb eksportu skryptów:" +msgstr "Tryb eksportu GDScript:" #: editor/project_export.cpp msgid "Text" @@ -10677,21 +10653,20 @@ msgstr "Tekst" #: editor/project_export.cpp msgid "Compiled Bytecode (Faster Loading)" -msgstr "" +msgstr "Skompilowany kod bajtowy (szybsze ładowanie)" #: editor/project_export.cpp msgid "Encrypted (Provide Key Below)" msgstr "Zaszyfrowany (podaj klucz poniżej)" #: editor/project_export.cpp -#, fuzzy msgid "Invalid Encryption Key (must be 64 hexadecimal characters long)" -msgstr "Nieprawidłowy klucz szyfrowania (długość musi wynosić 64 znaki)" +msgstr "" +"Nieprawidłowy klucz szyfrowania (długość musi wynosić 64 znaki szesnastkowe)" #: editor/project_export.cpp -#, fuzzy msgid "GDScript Encryption Key (256-bits as hexadecimal):" -msgstr "Klucz szyfrujący skryptu (256-bit jako hex):" +msgstr "Klucz szyfrujący GDScript (256 bitów jako szesnastkowy):" #: editor/project_export.cpp msgid "Export PCK/Zip" @@ -10764,7 +10739,6 @@ msgid "Imported Project" msgstr "Zaimportowano projekt" #: editor/project_manager.cpp -#, fuzzy msgid "Invalid project name." msgstr "Nieprawidłowa nazwa projektu." @@ -10991,14 +10965,12 @@ msgid "Are you sure to run %d projects at once?" msgstr "Czy na pewno chcesz uruchomić %d projektów na raz?" #: editor/project_manager.cpp -#, fuzzy msgid "Remove %d projects from the list?" -msgstr "Wybierz urządzenie z listy" +msgstr "Usunąć %d projektów z listy?" #: editor/project_manager.cpp -#, fuzzy msgid "Remove this project from the list?" -msgstr "Wybierz urządzenie z listy" +msgstr "Usunąć ten projekt z listy?" #: editor/project_manager.cpp msgid "" @@ -11031,9 +11003,8 @@ msgid "Project Manager" msgstr "Menedżer projektów" #: editor/project_manager.cpp -#, fuzzy msgid "Local Projects" -msgstr "Projekty" +msgstr "Lokalne projekty" #: editor/project_manager.cpp msgid "Loading, please wait..." @@ -11044,23 +11015,20 @@ msgid "Last Modified" msgstr "Data modyfikacji" #: editor/project_manager.cpp -#, fuzzy msgid "Edit Project" -msgstr "Wyeksportuj projekt" +msgstr "Edytuj projekt" #: editor/project_manager.cpp -#, fuzzy msgid "Run Project" -msgstr "Zmień nazwę projektu" +msgstr "Uruchom projekt" #: editor/project_manager.cpp msgid "Scan" msgstr "Skanuj" #: editor/project_manager.cpp -#, fuzzy msgid "Scan Projects" -msgstr "Projekty" +msgstr "Skanuj projekty" #: editor/project_manager.cpp msgid "Select a Folder to Scan" @@ -11071,14 +11039,12 @@ msgid "New Project" msgstr "Nowy projekt" #: editor/project_manager.cpp -#, fuzzy msgid "Import Project" -msgstr "Zaimportowano projekt" +msgstr "Importuj projekt" #: editor/project_manager.cpp -#, fuzzy msgid "Remove Project" -msgstr "Zmień nazwę projektu" +msgstr "Usuń projekt" #: editor/project_manager.cpp msgid "Remove Missing" @@ -11089,9 +11055,8 @@ msgid "About" msgstr "O silniku" #: editor/project_manager.cpp -#, fuzzy msgid "Asset Library Projects" -msgstr "Biblioteka zasobów" +msgstr "Projekty Biblioteki Zasobów" #: editor/project_manager.cpp msgid "Restart Now" @@ -11103,7 +11068,7 @@ msgstr "Usuń wszystkie" #: editor/project_manager.cpp msgid "Also delete project contents (no undo!)" -msgstr "" +msgstr "Usuń także projekt (nie można cofnąć!)" #: editor/project_manager.cpp msgid "Can't run project" @@ -11118,20 +11083,17 @@ msgstr "" "Czy chcesz zobaczyć oficjalne przykładowe projekty w Bibliotece Zasobów?" #: editor/project_manager.cpp -#, fuzzy msgid "Filter projects" -msgstr "Filtruj właściwości" +msgstr "Filtruj projekty" #: editor/project_manager.cpp -#, fuzzy msgid "" "This field filters projects by name and last path component.\n" "To filter projects by name and full path, the query must contain at least " "one `/` character." msgstr "" -"Pasek wyszukiwania filtruje projekty po nazwie i ostatnim komponencie " -"ścieżki.\n" -"By filtrować po nazwie i pełnej ścieżce, zapytanie musi zawierać " +"To pole filtruje projekty po nazwie i ostatniej składowej ścieżki.\n" +"By filtrować projekty po nazwie i pełnej ścieżce, zapytanie musi zawierać " "przynajmniej jeden znak \"/\"." #: editor/project_settings_editor.cpp @@ -11140,7 +11102,7 @@ msgstr "Klawisz " #: editor/project_settings_editor.cpp msgid "Physical Key" -msgstr "" +msgstr "Fizyczny klawisz" #: editor/project_settings_editor.cpp msgid "Joy Button" @@ -11188,7 +11150,7 @@ msgstr "Urządzenie" #: editor/project_settings_editor.cpp msgid " (Physical)" -msgstr "" +msgstr " (fizyczny)" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "Press a Key..." @@ -11331,23 +11293,20 @@ msgid "Override for Feature" msgstr "Nadpisanie dla cechy" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Add %d Translations" -msgstr "Dodaj tłumaczenie" +msgstr "Dodaj %d tłumaczeń" #: editor/project_settings_editor.cpp msgid "Remove Translation" msgstr "Usuń tłumaczenie" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Translation Resource Remap: Add %d Path(s)" -msgstr "Dodaj mapowanie zasobu" +msgstr "Przemapowanie tłumaczenia zasobu: Dodaj %d ścieżek" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Translation Resource Remap: Add %d Remap(s)" -msgstr "Dodaj mapowanie zasobu" +msgstr "Przemapowanie tłumaczenia zasobu: Dodaj %d przemapowań" #: editor/project_settings_editor.cpp msgid "Change Resource Remap Language" @@ -11790,13 +11749,15 @@ msgstr "Usunąć węzeł \"%s\"?" #: editor/scene_tree_dock.cpp msgid "" "Saving the branch as a scene requires having a scene open in the editor." -msgstr "" +msgstr "Zapisane gałęzi jako scena wymaga, aby scena była otwarta w edytorze." #: editor/scene_tree_dock.cpp msgid "" "Saving the branch as a scene requires selecting only one node, but you have " "selected %d nodes." msgstr "" +"Zapisanie gałęzi jako scena wymaga wybrania tylko jednego węzła, a masz " +"wybrane %d węzłów." #: editor/scene_tree_dock.cpp msgid "" @@ -11805,6 +11766,10 @@ msgid "" "FileSystem dock context menu\n" "or create an inherited scene using Scene > New Inherited Scene... instead." msgstr "" +"Nie można zapisać gałęzi z korzenia jako instancji sceny.\n" +"By utworzyć edytowalną kopię aktualnej sceny, zduplikuj ją z menu " +"kontekstowego doku systemu plików\n" +"lub utwórz scenę dziedziczącą używając Scena > Nowa scena dziedzicząca..." #: editor/scene_tree_dock.cpp msgid "" @@ -11812,6 +11777,9 @@ msgid "" "To create a variation of a scene, you can make an inherited scene based on " "the instanced scene using Scene > New Inherited Scene... instead." msgstr "" +"Nie można zapisać gałęzi instancji sceny.\n" +"By utworzyć wariację sceny, zamiast tego możesz stworzyć scenę dziedziczącą " +"bazowaną na instancji sceny, używając Scena -> Nowa scena dziedzicząca..." #: editor/scene_tree_dock.cpp msgid "Save New Scene As..." @@ -12218,6 +12186,8 @@ msgid "" "Warning: Having the script name be the same as a built-in type is usually " "not desired." msgstr "" +"Ostrzeżenie: Posiadanie skryptu z nazwą taką samą jak typ wbudowany jest " +"zazwyczaj niepożądane." #: editor/script_create_dialog.cpp msgid "Class Name:" @@ -12289,7 +12259,7 @@ msgstr "Kopiuj błąd" #: editor/script_editor_debugger.cpp msgid "Open C++ Source on GitHub" -msgstr "" +msgstr "Otwórz źródło C++ na GitHubie" #: editor/script_editor_debugger.cpp msgid "Video RAM" @@ -12468,14 +12438,22 @@ msgid "Change Ray Shape Length" msgstr "Zmień długość Ray Shape" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Set Room Point Position" -msgstr "Ustaw pozycje punktu krzywej" +msgstr "Ustaw pozycję punktu pokoju" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Set Portal Point Position" -msgstr "Ustaw pozycje punktu krzywej" +msgstr "Ustaw pozycję punktu portalu" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Radius" +msgstr "Zmień promień kształtu cylindra" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr "Ustaw punkt kontrolny wchodzący z krzywej" #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" @@ -12587,14 +12565,12 @@ msgid "Object can't provide a length." msgstr "Obiekt nie może podać długości." #: modules/gltf/editor_scene_exporter_gltf_plugin.cpp -#, fuzzy msgid "Export Mesh GLTF2" -msgstr "Eksportuj bibliotekę Meshów" +msgstr "Eksportowani siatki GLTF2" #: modules/gltf/editor_scene_exporter_gltf_plugin.cpp -#, fuzzy msgid "Export GLTF..." -msgstr "Eksport..." +msgstr "Eksportuj GLTF..." #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" @@ -12637,9 +12613,8 @@ msgid "GridMap Paint" msgstr "Malowanie GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Selection" -msgstr "GridMap Wypełnij zaznaczenie" +msgstr "Wybór GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Grid Map" @@ -12762,6 +12737,11 @@ msgstr "Kreślenie map światła" msgid "Class name can't be a reserved keyword" msgstr "Nazwa klasy nie może być słowem zastrzeżonym" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "Wypełnij zaznaczone" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "Koniec śladu stosu wewnętrznego wyjątku" @@ -12891,14 +12871,12 @@ msgid "Add Output Port" msgstr "Dodaj port wyjściowy" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Port Type" -msgstr "Zmień typ" +msgstr "Zmień typ portu" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Port Name" -msgstr "Zmień nazwę portu wejściowego" +msgstr "Zmień nazwę portu" #: modules/visual_script/visual_script_editor.cpp msgid "Override an existing built-in function." @@ -13013,9 +12991,8 @@ msgid "Add Preload Node" msgstr "Dodaj wstępnie wczytany węzeł" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Add Node(s)" -msgstr "Dodaj węzeł" +msgstr "Dodaj węzeł(y)" #: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" @@ -13247,73 +13224,67 @@ msgstr "Przeszukaj VisualScript" msgid "Get %s" msgstr "Przyjmij %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "Brakuje nazwy paczki." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "Segmenty paczki muszą mieć niezerową długość." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "Znak \"%s\" nie jest dozwolony w nazwach paczek aplikacji Androida." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "Cyfra nie może być pierwszym znakiem w segmencie paczki." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "Znak \"%s\" nie może być pierwszym znakiem w segmencie paczki." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "Paczka musi mieć co najmniej jedną kropkę jako separator." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "Wybierz urządzenie z listy" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" -msgstr "" +msgstr "Uruchamiam na %s" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Exporting APK..." -msgstr "Eksportowanie wszystkiego" +msgstr "Eksportowanie APK..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Uninstalling..." -msgstr "Odinstaluj" +msgstr "Odinstalowywanie..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Installing to device, please wait..." -msgstr "Wczytywanie, proszę czekać..." +msgstr "Instalowanie na urządzeniu, proszę czekać..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" -msgstr "Nie można stworzyć instancji sceny!" +msgstr "Nie udało się zainstalować na urządzeniu: %s" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Running on device..." -msgstr "Uruchamiam skrypt..." +msgstr "Uruchamiam na urządzeniu..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Could not execute on device." -msgstr "Nie można utworzyć katalogu." +msgstr "Nie udało się uruchomić na urządzeniu." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "Nie udało się znaleźć narzędzia \"apksigner\"." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -13321,7 +13292,7 @@ msgstr "" "Szablon budowania Androida nie jest zainstalowany dla projektu. Zainstaluj " "go z menu Projekt." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." @@ -13329,13 +13300,13 @@ msgstr "" "Albo ustawienia Debug Keystore, Debug User ORAZ Debug Password muszą być " "skonfigurowane, ALBO żadne z nich." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" "Debugowy keystore nieskonfigurowany w Ustawieniach Edytora ani w profilu " "eksportu." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." @@ -13343,49 +13314,49 @@ msgstr "" "Albo ustawienia Release Keystore, Release User ORAZ Release Password muszą " "być skonfigurowane, ALBO żadne z nich." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" "Wydaniowy keystore jest niepoprawnie skonfigurowany w profilu eksportu." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "Wymagana jest poprawna ścieżka SDK Androida w Ustawieniach Edytora." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "Niepoprawna ścieżka do SDK Androida w Ustawieniach Edytora." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "Folder \"platform-tools\" nie istnieje!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" "Nie udało się znaleźć komendy adb z narzędzi platformowych SDK Androida." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "Sprawdź w folderze SDK Androida podanych w Ustawieniach Edytora." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "Brakuje folderu \"build-tools\"!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "Nie udało się znaleźć komendy apksigner z narzędzi SDK Androida." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "Niepoprawny klucz publiczny dla ekspansji APK." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "Niepoprawna nazwa paczki:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" @@ -13393,97 +13364,79 @@ msgstr "" "Niepoprawny moduł \"GodotPaymentV3\" załączony w ustawieniu projektu " "\"android/modules\" (zmieniony w Godocie 3.2.2).\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "\"Use Custom Build\" musi być włączone, by używać wtyczek." -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" -"\"Degrees Of Freedom\" jest poprawne tylko gdy \"Xr Mode\" jest \"Oculus " -"Mobile VR\"." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" "\"Hand Tracking\" jest poprawne tylko gdy \"Xr Mode\" jest \"Oculus Mobile VR" "\"." -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" -"\"Focus Awareness\" jest poprawne tylko gdy \"Xr Mode\" jest \"Oculus Mobile " -"VR\"." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" "\"Eksportuj AAB\" jest ważne tylko gdy \"Use Custom Build\" jest włączone." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " "directory.\n" "The resulting %s is unsigned." msgstr "" +"\"apksigner\" nie został znaleziony.\n" +"Sprawdź, czy komenda jest dostępna w folderze narzędzi SDK Androida.\n" +"Wynikowy %s jest niepodpisany." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." -msgstr "" +msgstr "Podpisywanie debugu %s..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." -msgstr "" -"Skanowanie plików,\n" -"Proszę czekać..." +msgstr "Podpisywanie wydania %s..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." -msgstr "Nie można otworzyć szablonu dla eksportu:" +msgstr "Nie udało się znaleźć keystore, nie można eksportować." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" -msgstr "" +msgstr "\"apksigner\" zwrócił błąd #%d" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." -msgstr "Dodawanie %s..." +msgstr "Weryfikowanie %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." -msgstr "" +msgstr "Weryfikacja \"apksigner\" dla %s nieudana." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" -msgstr "Eksportowanie wszystkiego" +msgstr "Eksportowanie na Androida" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" "Nieprawidłowa nazwa pliku! Android App Bundle wymaga rozszerzenia *.aab." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "APK Expansion nie jest kompatybilne z Android App Bundle." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "Nieprawidłowa nazwa pliku! APK Androida wymaga rozszerzenia *.apk." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" -msgstr "" +msgstr "Nieobsługiwany format eksportu!\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." @@ -13491,7 +13444,7 @@ msgstr "" "Próbowano zbudować z własnego szablonu, ale nie istnieje dla niego " "informacja o wersji. Zainstaluj ponownie z menu \"Projekt\"." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13503,26 +13456,26 @@ msgstr "" " Wersja Godota: %s\n" "Zainstaluj ponownie szablon z menu \"Projekt\"." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" +"Nie udało się nadpisać plików \"res://android/build/res/*.xml\" nazwą " +"projektu" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" -msgstr "Nie znaleziono project.godot w ścieżce projektu." +msgstr "Nie udało się eksportować plików projektu do projektu gradle\n" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" -msgstr "Nie można zapisać pliku:" +msgstr "Nie udało się zapisać pliku pakietu rozszerzenia!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "Budowanie projektu Androida (gradle)" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." @@ -13531,11 +13484,11 @@ msgstr "" "Alternatywnie, odwiedź docs.godotengine.org po dokumentację budowania dla " "Androida." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "Przesuwam wyjście" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." @@ -13543,48 +13496,48 @@ msgstr "" "Nie udało się skopiować i przemianować pliku eksportu, sprawdź folder " "projektu gradle po informacje." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Package not found: %s" -msgstr "Animacja nie znaleziona: \"%s\"" +msgstr "Pakiet nie znaleziony: %s" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." -msgstr "Tworzenie konturów..." +msgstr "Tworzenie APK..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" -msgstr "Nie można otworzyć szablonu dla eksportu:" +msgstr "" +"Nie udało się znaleźć szablonu APK do eksportu:\n" +"%s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" "Please build a template with all required libraries, or uncheck the missing " "architectures in the export preset." msgstr "" +"Brakujące biblioteki w szablonie eksportu dla wybranej architektury: %s.\n" +"Zbuduj szablon ze wszystkimi wymaganymi bibliotekami lub odznacz brakujące " +"architektury w profilu eksportu." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Adding files..." -msgstr "Dodawanie %s..." +msgstr "Dodawanie plików..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Could not export project files" -msgstr "Nie można zapisać pliku:" +msgstr "Nie udało się eksportować plików projektu" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "Uzgadnianie APK..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." -msgstr "" +msgstr "Nie udało się rozpakować tymczasowego niewyrównanego APK." #: platform/iphone/export/export.cpp platform/osx/export/export.cpp msgid "Identifier is missing." @@ -13631,45 +13584,40 @@ msgid "Could not write file:" msgstr "Nie można zapisać pliku:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not read file:" -msgstr "Nie można zapisać pliku:" +msgstr "Nie udało się odczytać pliku:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not read HTML shell:" -msgstr "Nie można odczytać niestandardowe powłoki HTML:" +msgstr "Nie udało się odczytać powłoki HTML:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not create HTTP server directory:" -msgstr "Nie można utworzyć katalogu." +msgstr "Nie udało się utworzyć folderu serwera HTTP:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Error starting HTTP server:" -msgstr "Błąd podczas zapisywania sceny." +msgstr "Błąd uruchamiania serwera HTTP:" #: platform/osx/export/export.cpp -#, fuzzy msgid "Invalid bundle identifier:" -msgstr "Niepoprawny identyfikator:" +msgstr "Nieprawidłowy identyfikator paczki:" #: platform/osx/export/export.cpp msgid "Notarization: code signing required." -msgstr "" +msgstr "Poświadczenie: wymagane podpisanie kodu." #: platform/osx/export/export.cpp msgid "Notarization: hardened runtime required." -msgstr "" +msgstr "Poświadczenie: wymagane wzmocnione środowisko wykonawcze." #: platform/osx/export/export.cpp msgid "Notarization: Apple ID name not specified." -msgstr "" +msgstr "Poświadczenie: Nazwa Apple ID nie podana." #: platform/osx/export/export.cpp msgid "Notarization: Apple ID password not specified." -msgstr "" +msgstr "Poświadczenie: Hasło Apple ID nie podane." #: platform/uwp/export/export.cpp msgid "Invalid package short name." @@ -14113,6 +14061,9 @@ msgid "" "longer has any effect.\n" "To remove this warning, disable the GIProbe's Compress property." msgstr "" +"Właściwość GIProbe Compress jest przestarzała z powodu znanych błędów i nie " +"ma już żadnego efektu.\n" +"By usunąć to ostrzeżenie, wyłącz właściwość Compress w GIProbe." #: scene/3d/light.cpp msgid "A SpotLight with an angle wider than 90 degrees cannot cast shadows." @@ -14132,6 +14083,14 @@ msgstr "" "NavigationMeshInstance musi być dzieckiem lub wnukiem węzła typu Navigation. " "Udostępnia on tylko dane nawigacyjne." +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14200,15 +14159,15 @@ msgstr "Node A i Node B muszą być różnymi węzłami PhysicsBody" #: scene/3d/portal.cpp msgid "The RoomManager should not be a child or grandchild of a Portal." -msgstr "" +msgstr "RoomManager nie powinien być potomkiem Portalu." #: scene/3d/portal.cpp msgid "A Room should not be a child or grandchild of a Portal." -msgstr "" +msgstr "Room nie powinien być potomkiem Portalu." #: scene/3d/portal.cpp msgid "A RoomGroup should not be a child or grandchild of a Portal." -msgstr "" +msgstr "RoomGroup nie powinien być potomkiem Portalu." #: scene/3d/remote_transform.cpp msgid "" @@ -14220,79 +14179,96 @@ msgstr "" #: scene/3d/room.cpp msgid "A Room cannot have another Room as a child or grandchild." -msgstr "" +msgstr "Room nie może mieć innego węzła Room jako potomka." #: scene/3d/room.cpp msgid "The RoomManager should not be placed inside a Room." -msgstr "" +msgstr "RoomManager nie powinien znajdować się w węźle Room." #: scene/3d/room.cpp msgid "A RoomGroup should not be placed inside a Room." -msgstr "" +msgstr "RoomGroup nie powinien znajdować się w węźle Room." #: scene/3d/room.cpp msgid "" "Room convex hull contains a large number of planes.\n" "Consider simplifying the room bound in order to increase performance." msgstr "" +"Otoczka wypukła pokoju zawiera dużą liczbę płaszczyzn.\n" +"Rozważ uproszczenie granicy pokoju w celu zwiększenia wydajności." #: scene/3d/room_group.cpp msgid "The RoomManager should not be placed inside a RoomGroup." -msgstr "" +msgstr "RoomManager nie powinien znajdować się w węźle RoomGroup." #: scene/3d/room_manager.cpp msgid "The RoomList has not been assigned." -msgstr "" +msgstr "RoomList nie został przypisany." #: scene/3d/room_manager.cpp msgid "The RoomList node should be a Spatial (or derived from Spatial)." -msgstr "" +msgstr "Węzeł RoomList powinien być typu Spatial lub pochodnego." #: scene/3d/room_manager.cpp msgid "" "Portal Depth Limit is set to Zero.\n" "Only the Room that the Camera is in will render." msgstr "" +"Portal Depth Limit jest ustawione na zero.\n" +"Tylko pokój, w którym jest kamera będzie się renderował." #: scene/3d/room_manager.cpp msgid "There should only be one RoomManager in the SceneTree." -msgstr "" +msgstr "Powinien być tylko jeden RoomManager w drzewie sceny." #: scene/3d/room_manager.cpp msgid "" "RoomList path is invalid.\n" "Please check the RoomList branch has been assigned in the RoomManager." msgstr "" +"Ścieżka RoomList jest nieprawidłowa.\n" +"Sprawdź czy gałąź RoomList została przypisana w RoomManager." #: scene/3d/room_manager.cpp msgid "RoomList contains no Rooms, aborting." -msgstr "" +msgstr "RoomList nie zawiera żadnego węzła Room, przerywam." #: scene/3d/room_manager.cpp msgid "Misnamed nodes detected, check output log for details. Aborting." msgstr "" +"Wykryto błędnie nazwane węzły, sprawdź dziennik wyjściowy po więcej " +"szczegółów. Przerywam." #: scene/3d/room_manager.cpp msgid "Portal link room not found, check output log for details." msgstr "" +"Łącznik portali nie znaleziony, sprawdź dziennik wyjściowy po więcej " +"szczegółów." #: scene/3d/room_manager.cpp msgid "" "Portal autolink failed, check output log for details.\n" "Check the portal is facing outwards from the source room." msgstr "" +"Autołączenie portali nieudane, sprawdź dziennik wyjścia po szczegóły.\n" +"Sprawdź, czy portal jest zwrócony na zewnątrz ze źródłowego pokoju." #: scene/3d/room_manager.cpp msgid "" "Room overlap detected, cameras may work incorrectly in overlapping area.\n" "Check output log for details." msgstr "" +"Wykryto nachodzenie się pokoi, kamery mogą działać niepoprawnie na " +"nachodzącym obszarze.\n" +"Sprawdź dziennik wyjścia po szczegóły." #: scene/3d/room_manager.cpp msgid "" "Error calculating room bounds.\n" "Ensure all rooms contain geometry or manual bounds." msgstr "" +"Błąd liczenia granic pokoju.\n" +"Upewnij się, że wszystkie pokoje zawierają geometrię lub ręczne granice." #: scene/3d/soft_body.cpp msgid "This body will be ignored until you set a mesh." @@ -14357,7 +14333,7 @@ msgstr "Animacja nie znaleziona: \"%s\"" #: scene/animation/animation_player.cpp msgid "Anim Apply Reset" -msgstr "" +msgstr "Resetowanie animacji" #: scene/animation/animation_tree.cpp msgid "In node '%s', invalid animation: '%s'." @@ -14457,6 +14433,14 @@ msgstr "Rozszerzenie musi być poprawne." msgid "Enable grid minimap." msgstr "Włącz minimapę siatki." +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14509,6 +14493,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "Rozmiar węzła Viewport musi być większy niż 0, by coś wyrenderować." +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " @@ -14530,25 +14518,29 @@ msgid "Invalid comparison function for that type." msgstr "Niewłaściwa funkcja porównania dla tego typu." #: servers/visual/shader_language.cpp -#, fuzzy msgid "Varying may not be assigned in the '%s' function." -msgstr "Varying może być przypisane tylko w funkcji wierzchołków." +msgstr "Varying nie może zostać przypisane w funkcji \"%s\"." #: servers/visual/shader_language.cpp msgid "" "Varyings which assigned in 'vertex' function may not be reassigned in " "'fragment' or 'light'." msgstr "" +"Varyings przypisane w funkcji \"vertex\" nie mogą zostać przypisane ponownie " +"we \"fragment\" ani \"light\"." #: servers/visual/shader_language.cpp msgid "" "Varyings which assigned in 'fragment' function may not be reassigned in " "'vertex' or 'light'." msgstr "" +"Varyings przypisane w funkcji \"fragment\" nie mogą zostać przypisane " +"ponownie we \"vertex\" ani \"light\"." #: servers/visual/shader_language.cpp msgid "Fragment-stage varying could not been accessed in custom function!" msgstr "" +"Varying z etapu fragmentów nie jest dostępny w niestandardowej funkcji!" #: servers/visual/shader_language.cpp msgid "Assignment to function." @@ -14562,6 +14554,41 @@ msgstr "Przypisanie do uniformu." msgid "Constants cannot be modified." msgstr "Stałe nie mogą być modyfikowane." +#~ msgid "Make Rest Pose (From Bones)" +#~ msgstr "Utwórz pozę spoczynkową (z kości)" + +#~ msgid "Bottom" +#~ msgstr "Dół" + +#~ msgid "Left" +#~ msgstr "Lewa" + +#~ msgid "Right" +#~ msgstr "Prawa" + +#~ msgid "Front" +#~ msgstr "Przód" + +#~ msgid "Rear" +#~ msgstr "Tył" + +#~ msgid "Nameless gizmo" +#~ msgstr "Uchwyt bez nazwy" + +#~ msgid "" +#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile " +#~ "VR\"." +#~ msgstr "" +#~ "\"Degrees Of Freedom\" jest poprawne tylko gdy \"Xr Mode\" jest \"Oculus " +#~ "Mobile VR\"." + +#~ msgid "" +#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" +#~ "\"." +#~ msgstr "" +#~ "\"Focus Awareness\" jest poprawne tylko gdy \"Xr Mode\" jest \"Oculus " +#~ "Mobile VR\"." + #~ msgid "Package Contents:" #~ msgstr "Zawartość paczki:" @@ -16432,9 +16459,6 @@ msgstr "Stałe nie mogą być modyfikowane." #~ msgid "Images:" #~ msgstr "Obrazki:" -#~ msgid "Group" -#~ msgstr "Grupa" - #~ msgid "Compress (RAM - IMA-ADPCM)" #~ msgstr "Kompresja (RAM - IMA-ADPCM)" diff --git a/editor/translations/pr.po b/editor/translations/pr.po index 96fab899cd..8f2aa04183 100644 --- a/editor/translations/pr.po +++ b/editor/translations/pr.po @@ -1037,7 +1037,7 @@ msgstr "" msgid "Dependencies" msgstr "" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "" @@ -1676,14 +1676,14 @@ msgid "" "Enabled'." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Custom debug template not found." msgstr "Yer fancy debug package be nowhere." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp #, fuzzy @@ -2072,7 +2072,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "" @@ -2560,6 +2560,30 @@ msgid "Current scene not saved. Open anyway?" msgstr "" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Undo: %s" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Redo: %s" +msgstr "" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "" @@ -3201,6 +3225,11 @@ msgid "Merge With Existing" msgstr "" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Change yer Anim Transform" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "" @@ -3447,6 +3476,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "" @@ -5572,6 +5605,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "Yar, Blow th' Selected Down!" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Yar, Blow th' Selected Down!" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6496,7 +6541,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7095,6 +7144,16 @@ msgstr "Yar, Blow th' Selected Down!" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "Change yer Anim Transform" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Slit th' Node" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7614,11 +7673,12 @@ msgid "Skeleton2D" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "Yar, Blow th' Selected Down!" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" +msgid "Overwrite Rest Pose" msgstr "" #: editor/plugins/skeleton_editor_plugin.cpp @@ -7646,6 +7706,60 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7759,42 +7873,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -8059,6 +8153,11 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "Ye be fixin' Signal:" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "" @@ -8124,7 +8223,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -12205,6 +12304,15 @@ msgstr "Discharge ye' Signal" msgid "Set Portal Point Position" msgstr "Discharge ye' Signal" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr "Discharge ye' Signal" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12501,6 +12609,11 @@ msgstr "" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "All yer Booty" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -13016,161 +13129,150 @@ msgstr "Discharge ye' Variable" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting APK..." msgstr "Edit" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Uninstalling..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Installing to device, please wait..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not execute on device." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Invalid package name:" msgstr "Yer unique name be evil." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13178,57 +13280,57 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13236,54 +13338,54 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package not found: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13291,20 +13393,20 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Adding files..." msgstr "Find ye Node Type" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13762,6 +13864,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14052,6 +14162,14 @@ msgstr "" msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14092,6 +14210,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/pt.po b/editor/translations/pt.po index 1c8e2476a3..94bcea301b 100644 --- a/editor/translations/pt.po +++ b/editor/translations/pt.po @@ -23,7 +23,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2021-08-06 06:48+0000\n" +"PO-Revision-Date: 2021-09-15 00:46+0000\n" "Last-Translator: João Lopes <linux-man@hotmail.com>\n" "Language-Team: Portuguese <https://hosted.weblate.org/projects/godot-engine/" "godot/pt/>\n" @@ -32,7 +32,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.8-dev\n" +"X-Generator: Weblate 4.9-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -381,15 +381,13 @@ msgstr "Anim Inserir" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "node '%s'" -msgstr "Impossível abrir '%s'." +msgstr "nó '%s'" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "animation" -msgstr "Animação" +msgstr "animação" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." @@ -399,9 +397,8 @@ msgstr "" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "property '%s'" -msgstr "Não existe a Propriedade '%s'." +msgstr "propriedade '%s'" #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -461,7 +458,7 @@ msgstr "Caminho da pista é inválido, não se consegue adicionar uma chave." #: editor/animation_track_editor.cpp msgid "Track is not of type Spatial, can't insert key" -msgstr "Pista não é do tipo Spatial, não consigo inserir chave" +msgstr "Pista não é do tipo Spatial, incapaz de inserir chave" #: editor/animation_track_editor.cpp msgid "Add Transform Track Key" @@ -473,7 +470,7 @@ msgstr "Adicionar Chave da Pista" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a method key." -msgstr "Caminho da pista é inválido, não consigo adicionar uma chave método." +msgstr "Caminho da pista é inválido, incapaz de adicionar uma chave método." #: editor/animation_track_editor.cpp msgid "Add Method Track Key" @@ -877,7 +874,7 @@ msgstr "Desconecta o sinal após a primeira emissão." #: editor/connections_dialog.cpp msgid "Cannot connect signal" -msgstr "Não consigo conectar sinal" +msgstr "Incapaz de conectar sinal" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/export_template_manager.cpp editor/groups_editor.cpp @@ -1037,7 +1034,7 @@ msgstr "" msgid "Dependencies" msgstr "Dependências" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Recurso" @@ -1082,7 +1079,7 @@ msgid "" "Depending on your filesystem configuration, the files will either be moved " "to the system trash or deleted permanently." msgstr "" -"Remover ficheiros selecionados do Projeto? (Sem desfazer.)\n" +"Remover ficheiros selecionados do Projeto? (Não pode ser revertido.)\n" "Dependendo da configuração, pode encontrar os ficheiros removidos na " "Reciclagem do sistema ou apagados permanentemente." @@ -1096,13 +1093,13 @@ msgid "" msgstr "" "Os ficheiros a serem removidos são necessários para que outros recursos " "funcionem.\n" -"Remover mesmo assim? (Sem desfazer.)\n" +"Remover mesmo assim? (Não pode ser revertido.)\n" "Dependendo da configuração, pode encontrar os ficheiros removidos na " "Reciclagem do sistema ou apagados permanentemente." #: editor/dependency_editor.cpp msgid "Cannot remove:" -msgstr "Não consigo remover:" +msgstr "Incapaz de remover:" #: editor/dependency_editor.cpp msgid "Error loading:" @@ -1279,14 +1276,16 @@ msgstr "%s (já existe)" #: editor/editor_asset_installer.cpp msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:" msgstr "" +"Conteúdos do recurso \"%s\" - %d ficheiro(s) em conflito com o projeto:" #: editor/editor_asset_installer.cpp msgid "Contents of asset \"%s\" - No files conflict with your project:" msgstr "" +"Conteúdos do recurso \"%s\" - Nenhum ficheiro em conflito com o projeto:" #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" -msgstr "A Descomprimir Ativos" +msgstr "A Descomprimir Recursos" #: editor/editor_asset_installer.cpp msgid "The following files failed extraction from asset \"%s\":" @@ -1374,9 +1373,8 @@ msgid "Bypass" msgstr "Ignorar" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Bus Options" -msgstr "Opções de barramento" +msgstr "Opções de Barramento" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp #: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp @@ -1540,16 +1538,15 @@ msgstr "Reorganizar Carregamentos Automáticos" #: editor/editor_autoload_settings.cpp msgid "Can't add autoload:" -msgstr "Não consigo adicionar carregamento automático:" +msgstr "Incapaz de adicionar carregamento automático:" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "%s is an invalid path. File does not exist." -msgstr "O Ficheiro não existe." +msgstr "%s é um caminho inválido. O ficheiro não existe." #: editor/editor_autoload_settings.cpp msgid "%s is an invalid path. Not in resource path (res://)." -msgstr "" +msgstr "%s é um caminho inválido. Não está no caminho do recurso (res://)." #: editor/editor_autoload_settings.cpp msgid "Add AutoLoad" @@ -1573,9 +1570,8 @@ msgid "Name" msgstr "Nome" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Global Variable" -msgstr "Variável" +msgstr "Variável Global" #: editor/editor_data.cpp msgid "Paste Params" @@ -1699,13 +1695,13 @@ msgstr "" "Ative 'Importar Pvrtc' nas Configurações do Projeto, ou desative 'Driver de " "Recurso Ativo'." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "Modelo de depuração personalizado não encontrado." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -1730,7 +1726,7 @@ msgstr "Editor de Script" #: editor/editor_feature_profile.cpp msgid "Asset Library" -msgstr "Biblioteca de Ativos" +msgstr "Biblioteca de Recursos" #: editor/editor_feature_profile.cpp msgid "Scene Tree Editing" @@ -1750,48 +1746,50 @@ msgstr "Importar Doca" #: editor/editor_feature_profile.cpp msgid "Allows to view and edit 3D scenes." -msgstr "" +msgstr "Permite ver e editar cenas 3D." #: editor/editor_feature_profile.cpp msgid "Allows to edit scripts using the integrated script editor." -msgstr "" +msgstr "Permite editar scripts com o editor de scripts integrado." #: editor/editor_feature_profile.cpp msgid "Provides built-in access to the Asset Library." -msgstr "" +msgstr "Fornece acesso integrado à Biblioteca de Recursos." #: editor/editor_feature_profile.cpp msgid "Allows editing the node hierarchy in the Scene dock." -msgstr "" +msgstr "Permite editar a hierarquia de nós na doca de Cena." #: editor/editor_feature_profile.cpp msgid "" "Allows to work with signals and groups of the node selected in the Scene " "dock." msgstr "" +"Permite trabalhar com sinais e grupos do nó selecionado na doca de Cena." #: editor/editor_feature_profile.cpp msgid "Allows to browse the local file system via a dedicated dock." -msgstr "" +msgstr "Permite navegar no sistema de ficheiros local por uma doca dedicada." #: editor/editor_feature_profile.cpp msgid "" "Allows to configure import settings for individual assets. Requires the " "FileSystem dock to function." msgstr "" +"Permite a configuração da importação para recursos individuais. Necessita da " +"doca FileSystem." #: editor/editor_feature_profile.cpp -#, fuzzy msgid "(current)" -msgstr "(Atual)" +msgstr "(atual)" #: editor/editor_feature_profile.cpp msgid "(none)" -msgstr "" +msgstr "(nada)" #: editor/editor_feature_profile.cpp msgid "Remove currently selected profile, '%s'? Cannot be undone." -msgstr "" +msgstr "Remover perfil selecionado, '%s'? Não pode ser revertido." #: editor/editor_feature_profile.cpp msgid "Profile must be a valid filename and must not contain '.'" @@ -1822,19 +1820,16 @@ msgid "Enable Contextual Editor" msgstr "Ativar Editor de Contexto" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Class Properties:" -msgstr "Propriedades:" +msgstr "Propriedades da Classe:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Main Features:" -msgstr "Características" +msgstr "Características Principais:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Nodes and Classes:" -msgstr "Ativar Classes:" +msgstr "Nós e Classes:" #: editor/editor_feature_profile.cpp msgid "File '%s' format is invalid, import aborted." @@ -1852,23 +1847,20 @@ msgid "Error saving profile to path: '%s'." msgstr "Erro ao guardar perfil no caminho: '%s'." #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Reset to Default" -msgstr "Restaurar Predefinições" +msgstr "Restaurar Predefinição" #: editor/editor_feature_profile.cpp msgid "Current Profile:" msgstr "Perfil atual:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Create Profile" -msgstr "Apagar Perfil" +msgstr "Criar Perfil" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Remove Profile" -msgstr "Remover Tile" +msgstr "Remover Perfil" #: editor/editor_feature_profile.cpp msgid "Available Profiles:" @@ -1888,18 +1880,17 @@ msgid "Export" msgstr "Exportar" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Configure Selected Profile:" -msgstr "Perfil atual:" +msgstr "Configurar Perfil Selecionado:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Extra Options:" -msgstr "Opções da Classe:" +msgstr "Opções Extra:" #: editor/editor_feature_profile.cpp msgid "Create or import a profile to edit available classes and properties." msgstr "" +"Criar ou importar perfil para editar classes e propriedades disponíveis." #: editor/editor_feature_profile.cpp msgid "New profile name:" @@ -1926,9 +1917,8 @@ msgid "Select Current Folder" msgstr "Selecionar pasta atual" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "File exists, overwrite?" -msgstr "O Ficheiro existe, sobrescrever?" +msgstr "O ficheiro existe, sobrescrever?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Select This Folder" @@ -2075,7 +2065,7 @@ msgstr "Ficheiro:" #: editor/editor_file_system.cpp msgid "ScanSources" -msgstr "Analisar fontes" +msgstr "PesquisarFontes" #: editor/editor_file_system.cpp msgid "" @@ -2087,9 +2077,9 @@ msgstr "" #: editor/editor_file_system.cpp msgid "(Re)Importing Assets" -msgstr "A (Re)Importar Ativos" +msgstr "A (Re)Importar Recursos" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "Topo" @@ -2359,7 +2349,7 @@ msgstr "Guardar Recurso Como..." #: editor/editor_node.cpp msgid "Can't open file for writing:" -msgstr "Não consigo abrir o ficheiro para escrita:" +msgstr "Incapaz de abrir o ficheiro para escrita:" #: editor/editor_node.cpp msgid "Requested file format unknown:" @@ -2371,7 +2361,7 @@ msgstr "Erro ao guardar." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Can't open '%s'. The file could have been moved or deleted." -msgstr "Não consigo abrir '%s'. O ficheiro pode ter sido movido ou apagado." +msgstr "Incapaz de abrir '%s'. O ficheiro pode ter sido movido ou apagado." #: editor/editor_node.cpp msgid "Error while parsing '%s'." @@ -2419,7 +2409,7 @@ msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" -"Não consigo guardar cena. Provavelmente, as dependências (instâncias ou " +"Incapaz de guardar cena. Provavelmente, as dependências (instâncias ou " "heranças) não puderam ser satisfeitas." #: editor/editor_node.cpp editor/scene_tree_dock.cpp @@ -2428,7 +2418,7 @@ msgstr "Não se consegue sobrescrever cena ainda aberta!" #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" -msgstr "Não consigo carregar MeshLibrary para combinar!" +msgstr "Incapaz de carregar MeshLibrary para combinar!" #: editor/editor_node.cpp msgid "Error saving MeshLibrary!" @@ -2436,7 +2426,7 @@ msgstr "Erro ao guardar MeshLibrary!" #: editor/editor_node.cpp msgid "Can't load TileSet for merging!" -msgstr "Não consigo carregar TileSet para combinar!" +msgstr "Incapaz de carregar TileSet para combinar!" #: editor/editor_node.cpp msgid "Error saving TileSet!" @@ -2563,13 +2553,16 @@ msgid "" "The current scene has no root node, but %d modified external resource(s) " "were saved anyway." msgstr "" +"A cena atual não tem nó raiz, mas %d recurso(s) externo(s) modificados foram " +"guardados." #: editor/editor_node.cpp -#, fuzzy msgid "" "A root node is required to save the scene. You can add a root node using the " "Scene tree dock." -msgstr "É necessário um nó raiz para guardar a cena." +msgstr "" +"É necessário um nó raiz para guardar a cena. Pode adicionar um nó raiz na " +"doca de árvore da Cena." #: editor/editor_node.cpp msgid "Save Scene As..." @@ -2600,8 +2593,34 @@ msgid "Current scene not saved. Open anyway?" msgstr "A cena atual não foi guardada. Abrir na mesma?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "Desfazer" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "Refazer" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." -msgstr "Não consigo recarregar uma cena que nunca foi guardada." +msgstr "Incapaz de recarregar uma cena que nunca foi guardada." #: editor/editor_node.cpp msgid "Reload Saved Scene" @@ -2952,9 +2971,8 @@ msgid "Orphan Resource Explorer..." msgstr "Explorador de Recursos Órfãos..." #: editor/editor_node.cpp -#, fuzzy msgid "Reload Current Project" -msgstr "Renomear Projeto" +msgstr "Recarregar Projeto Atual" #: editor/editor_node.cpp msgid "Quit to Project List" @@ -3114,13 +3132,12 @@ msgid "Help" msgstr "Ajuda" #: editor/editor_node.cpp -#, fuzzy msgid "Online Documentation" -msgstr "Abrir documentação" +msgstr "Documentação Online" #: editor/editor_node.cpp msgid "Questions & Answers" -msgstr "" +msgstr "Perguntas & Respostas" #: editor/editor_node.cpp msgid "Report a Bug" @@ -3128,7 +3145,7 @@ msgstr "Denunciar um Bug" #: editor/editor_node.cpp msgid "Suggest a Feature" -msgstr "" +msgstr "Proponha uma Funcionalidade" #: editor/editor_node.cpp msgid "Send Docs Feedback" @@ -3139,9 +3156,8 @@ msgid "Community" msgstr "Comunidade" #: editor/editor_node.cpp -#, fuzzy msgid "About Godot" -msgstr "Sobre" +msgstr "Sobre Godot" #: editor/editor_node.cpp msgid "Support Godot Development" @@ -3233,14 +3249,12 @@ msgid "Manage Templates" msgstr "Gerir Modelos" #: editor/editor_node.cpp -#, fuzzy msgid "Install from file" -msgstr "Instalar do Ficheiro" +msgstr "Instalar do ficheiro" #: editor/editor_node.cpp -#, fuzzy msgid "Select android sources file" -msgstr "Selecione uma Fonte Malha:" +msgstr "Selecione ficheiros fonte android" #: editor/editor_node.cpp msgid "" @@ -3289,6 +3303,11 @@ msgid "Merge With Existing" msgstr "Combinar com o Existente" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Anim Mudar Transformação" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "Abrir & Executar um Script" @@ -3323,9 +3342,8 @@ msgid "Select" msgstr "Selecionar" #: editor/editor_node.cpp -#, fuzzy msgid "Select Current" -msgstr "Selecionar pasta atual" +msgstr "Selecionar Atual" #: editor/editor_node.cpp msgid "Open 2D Editor" @@ -3341,7 +3359,7 @@ msgstr "Abrir Editor de Script" #: editor/editor_node.cpp editor/project_manager.cpp msgid "Open Asset Library" -msgstr "Abrir Biblioteca de Ativos" +msgstr "Abrir Biblioteca de Recursos" #: editor/editor_node.cpp msgid "Open the next Editor" @@ -3360,9 +3378,8 @@ msgid "No sub-resources found." msgstr "Sub-recurso não encontrado." #: editor/editor_path.cpp -#, fuzzy msgid "Open a list of sub-resources." -msgstr "Sub-recurso não encontrado." +msgstr "Abrir a lista de sub-recursos." #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" @@ -3389,14 +3406,12 @@ msgid "Update" msgstr "Atualizar" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Version" -msgstr "Versão:" +msgstr "Versão" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Author" -msgstr "Autores" +msgstr "Autor" #: editor/editor_plugin_settings.cpp #: editor/plugins/version_control_editor_plugin.cpp @@ -3409,14 +3424,12 @@ msgid "Measure:" msgstr "Medida:" #: editor/editor_profiler.cpp -#, fuzzy msgid "Frame Time (ms)" -msgstr "Tempo do Frame (seg)" +msgstr "Tempo do Frame (ms)" #: editor/editor_profiler.cpp -#, fuzzy msgid "Average Time (ms)" -msgstr "Tempo Médio (seg)" +msgstr "Tempo Médio (ms)" #: editor/editor_profiler.cpp msgid "Frame %" @@ -3545,6 +3558,10 @@ msgstr "" "O recurso selecionado (%s) não corresponde a qualquer tipo esperado para " "esta propriedade (%s)." +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "Fazer único" @@ -3564,7 +3581,6 @@ msgid "Paste" msgstr "Colar" #: editor/editor_resource_picker.cpp editor/property_editor.cpp -#, fuzzy msgid "Convert to %s" msgstr "Converter em %s" @@ -3616,10 +3632,9 @@ msgid "Did you forget the '_run' method?" msgstr "Esqueceu-se do método '_run'?" #: editor/editor_spin_slider.cpp -#, fuzzy msgid "Hold %s to round to integers. Hold Shift for more precise changes." msgstr "" -"Pressione Ctrl para arredondar para inteiro. Pressione Shift para mudanças " +"Pressione %s para arredondar para inteiro. Pressione Shift para mudanças " "mais precisas." #: editor/editor_sub_scene.cpp @@ -3640,49 +3655,43 @@ msgstr "Importar do Nó:" #: editor/export_template_manager.cpp msgid "Open the folder containing these templates." -msgstr "" +msgstr "Abrir a pasta que contem estes modelos." #: editor/export_template_manager.cpp msgid "Uninstall these templates." -msgstr "" +msgstr "Desinstalar este modelos." #: editor/export_template_manager.cpp -#, fuzzy msgid "There are no mirrors available." -msgstr "Não existe ficheiro '%s'." +msgstr "Não existem mirrors disponíveis." #: editor/export_template_manager.cpp -#, fuzzy msgid "Retrieving the mirror list..." -msgstr "A readquirir servidores, espere por favor..." +msgstr "A readquirir lista de mirror..." #: editor/export_template_manager.cpp msgid "Starting the download..." -msgstr "" +msgstr "A iniciar a transferência..." #: editor/export_template_manager.cpp msgid "Error requesting URL:" msgstr "Erro ao solicitar URL:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Connecting to the mirror..." -msgstr "A ligar ao servidor..." +msgstr "A ligar ao mirror..." #: editor/export_template_manager.cpp -#, fuzzy msgid "Can't resolve the requested address." -msgstr "Não consigo resolver hostname:" +msgstr "Incapaz de resolver o endereço solicitado." #: editor/export_template_manager.cpp -#, fuzzy msgid "Can't connect to the mirror." -msgstr "Não consigo ligar ao host:" +msgstr "Incapaz de ligar ao mirror." #: editor/export_template_manager.cpp -#, fuzzy msgid "No response from the mirror." -msgstr "Sem resposta do host:" +msgstr "Sem resposta do mirror." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -3690,22 +3699,20 @@ msgid "Request failed." msgstr "Pedido falhado." #: editor/export_template_manager.cpp -#, fuzzy msgid "Request ended up in a redirect loop." -msgstr "Falha na solicitação, demasiados redirecionamentos" +msgstr "Pedido acaba num loop de redirecionamento." #: editor/export_template_manager.cpp -#, fuzzy msgid "Request failed:" -msgstr "Pedido falhado." +msgstr "Pedido falhado:" #: editor/export_template_manager.cpp msgid "Download complete; extracting templates..." -msgstr "" +msgstr "Transferência completa; a extrair modelos..." #: editor/export_template_manager.cpp msgid "Cannot remove temporary file:" -msgstr "Não consigo remover ficheiro temporário:" +msgstr "Incapaz de remover ficheiro temporário:" #: editor/export_template_manager.cpp msgid "" @@ -3720,14 +3727,12 @@ msgid "Error getting the list of mirrors." msgstr "Erro na receção da lista de mirrors." #: editor/export_template_manager.cpp -#, fuzzy msgid "Error parsing JSON with the list of mirrors. Please report this issue!" -msgstr "" -"Erro ao analisar a lista de mirrors JSON. Por favor denuncie o problema!" +msgstr "Erro ao analisar a lista JSON de mirrors. Por favor relate o problema!" #: editor/export_template_manager.cpp msgid "Best available mirror" -msgstr "" +msgstr "Melhor mirror disponível" #: editor/export_template_manager.cpp msgid "" @@ -3748,7 +3753,7 @@ msgstr "A resolver" #: editor/export_template_manager.cpp msgid "Can't Resolve" -msgstr "Não consigo Resolver" +msgstr "Incapaz de Resolver" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -3757,7 +3762,7 @@ msgstr "A ligar..." #: editor/export_template_manager.cpp msgid "Can't Connect" -msgstr "Não consigo Conectar" +msgstr "Incapaz de Conectar" #: editor/export_template_manager.cpp msgid "Connected" @@ -3781,24 +3786,23 @@ msgid "SSL Handshake Error" msgstr "Erro SSL Handshake" #: editor/export_template_manager.cpp -#, fuzzy msgid "Can't open the export templates file." -msgstr "Não consigo abrir zip de modelos de exportação." +msgstr "Incapaz de abrir ficheiro de modelos de exportação." #: editor/export_template_manager.cpp -#, fuzzy msgid "Invalid version.txt format inside the export templates file: %s." -msgstr "Formato de version.txt inválido dentro dos modelos: %s." +msgstr "" +"Formato de version.txt inválido dentro do ficheiro de exportação de modelos: " +"%s." #: editor/export_template_manager.cpp -#, fuzzy msgid "No version.txt found inside the export templates file." -msgstr "Não foi encontrado version.txt dentro dos Modelos." +msgstr "" +"Não foi encontrado version.txt dentro do ficheiro de exportação de modelos." #: editor/export_template_manager.cpp -#, fuzzy msgid "Error creating path for extracting templates:" -msgstr "Erro ao criar o caminho para os modelos:" +msgstr "Erro ao criar o caminho para extrair os modelos:" #: editor/export_template_manager.cpp msgid "Extracting Export Templates" @@ -3809,9 +3813,8 @@ msgid "Importing:" msgstr "A Importar:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Remove templates for the version '%s'?" -msgstr "Remover versão '%s' do Modelo?" +msgstr "Remover modelos para a versão '%s'?" #: editor/export_template_manager.cpp msgid "Uncompressing Android Build Sources" @@ -3828,53 +3831,51 @@ msgstr "Versão Atual:" #: editor/export_template_manager.cpp msgid "Export templates are missing. Download them or install from a file." msgstr "" +"Modelos de exportação em falta. Descarregue-os ou instale-os de um ficheiro." #: editor/export_template_manager.cpp msgid "Export templates are installed and ready to be used." -msgstr "" +msgstr "Modelos de exportação estão instalados e prontos para serem usados." #: editor/export_template_manager.cpp -#, fuzzy msgid "Open Folder" -msgstr "Abrir Ficheiro" +msgstr "Abrir Pasta" #: editor/export_template_manager.cpp msgid "Open the folder containing installed templates for the current version." -msgstr "" +msgstr "Abrir a pasta que contem os modelos instalados para a versão atual." #: editor/export_template_manager.cpp msgid "Uninstall" msgstr "Desinstalar" #: editor/export_template_manager.cpp -#, fuzzy msgid "Uninstall templates for the current version." -msgstr "Valor inicial do contador" +msgstr "Desinstalar modelos para a versão atual." #: editor/export_template_manager.cpp -#, fuzzy msgid "Download from:" -msgstr "Erro na transferência" +msgstr "Transferir de:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Open in Web Browser" -msgstr "Executar no Navegador" +msgstr "Abrir no Navegador" #: editor/export_template_manager.cpp -#, fuzzy msgid "Copy Mirror URL" -msgstr "Copiar Erro" +msgstr "Copiar URL do Mirror" #: editor/export_template_manager.cpp msgid "Download and Install" -msgstr "" +msgstr "Descarregar e Instalar" #: editor/export_template_manager.cpp msgid "" "Download and install templates for the current version from the best " "possible mirror." msgstr "" +"Descarregar do melhor mirror disponível e instalar modelos para a versão " +"atual." #: editor/export_template_manager.cpp msgid "Official export templates aren't available for development builds." @@ -3883,14 +3884,12 @@ msgstr "" "desenvolvimento." #: editor/export_template_manager.cpp -#, fuzzy msgid "Install from File" msgstr "Instalar do Ficheiro" #: editor/export_template_manager.cpp -#, fuzzy msgid "Install templates from a local file." -msgstr "Importar Modelos a partir de um Ficheiro ZIP" +msgstr "Instalar modelos a partir de um ficheiro local." #: editor/export_template_manager.cpp editor/find_in_files.cpp #: editor/progress_dialog.cpp scene/gui/dialogs.cpp @@ -3898,19 +3897,16 @@ msgid "Cancel" msgstr "Cancelar" #: editor/export_template_manager.cpp -#, fuzzy msgid "Cancel the download of the templates." -msgstr "Não consigo abrir zip de modelos de exportação." +msgstr "Cancelar a transferência dos modelos." #: editor/export_template_manager.cpp -#, fuzzy msgid "Other Installed Versions:" -msgstr "Versões Instaladas:" +msgstr "Outras Versões Instaladas:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Uninstall Template" -msgstr "Desinstalar" +msgstr "Desinstalar Modelo" #: editor/export_template_manager.cpp msgid "Select Template File" @@ -3925,6 +3921,8 @@ msgid "" "The templates will continue to download.\n" "You may experience a short editor freeze when they finish." msgstr "" +"Os modelos vão continuar a ser descarregados.\n" +"Pode experimentar um curto bloqueio do editor quando terminar." #: editor/filesystem_dock.cpp msgid "Favorites" @@ -4072,35 +4070,32 @@ msgid "Collapse All" msgstr "Colapsar Tudo" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Sort files" -msgstr "Procurar ficheiros" +msgstr "Ordenar ficheiros" #: editor/filesystem_dock.cpp msgid "Sort by Name (Ascending)" -msgstr "" +msgstr "Ordenar por Nome (Ascendente)" #: editor/filesystem_dock.cpp msgid "Sort by Name (Descending)" -msgstr "" +msgstr "Ordenar por Nome (Descendente)" #: editor/filesystem_dock.cpp msgid "Sort by Type (Ascending)" -msgstr "" +msgstr "Ordenar por Tipo (Ascendente)" #: editor/filesystem_dock.cpp msgid "Sort by Type (Descending)" -msgstr "" +msgstr "Ordenar por Tipo (Descendente)" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Sort by Last Modified" -msgstr "Última modificação" +msgstr "Ordenar por Último Modificado" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Sort by First Modified" -msgstr "Última modificação" +msgstr "Ordenar por Primeiro Modificado" #: editor/filesystem_dock.cpp msgid "Duplicate..." @@ -4112,7 +4107,7 @@ msgstr "Renomear..." #: editor/filesystem_dock.cpp msgid "Focus the search box" -msgstr "" +msgstr "Focar a caixa de pesquisa" #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -4124,7 +4119,7 @@ msgstr "Próxima Pasta/Ficheiro" #: editor/filesystem_dock.cpp msgid "Re-Scan Filesystem" -msgstr "Carregar novamente o Sistema de Ficheiros" +msgstr "Re-pesquisar o Sistema de Ficheiros" #: editor/filesystem_dock.cpp msgid "Toggle Split Mode" @@ -4139,7 +4134,7 @@ msgid "" "Scanning Files,\n" "Please Wait..." msgstr "" -"A analisar Ficheiros,\n" +"A pesquisar Ficheiros,\n" "Espere, por favor..." #: editor/filesystem_dock.cpp @@ -4412,7 +4407,7 @@ msgstr "Alterar o tipo de um ficheiro importado requer reiniciar o editor." msgid "" "WARNING: Assets exist that use this resource, they may stop loading properly." msgstr "" -"AVISO: Existem Ativos que usam este recurso, poderem não ser carregados " +"AVISO: Outros recursos usam este recurso, e podem não ser carregados " "corretamente." #: editor/inspector_dock.cpp @@ -4420,14 +4415,12 @@ msgid "Failed to load resource." msgstr "Falha ao carregar recurso." #: editor/inspector_dock.cpp -#, fuzzy msgid "Copy Properties" -msgstr "Propriedades" +msgstr "Copiar Propriedades" #: editor/inspector_dock.cpp -#, fuzzy msgid "Paste Properties" -msgstr "Propriedades" +msgstr "Colar Propriedades" #: editor/inspector_dock.cpp msgid "Make Sub-Resources Unique" @@ -4452,23 +4445,20 @@ msgid "Save As..." msgstr "Guardar Como..." #: editor/inspector_dock.cpp -#, fuzzy msgid "Extra resource options." -msgstr "Não está no caminho do recurso." +msgstr "Opções de recurso extra." #: editor/inspector_dock.cpp -#, fuzzy msgid "Edit Resource from Clipboard" -msgstr "Editar Área de Transferência de Recursos" +msgstr "Editar Recurso da Área de Transferência" #: editor/inspector_dock.cpp msgid "Copy Resource" msgstr "Copiar Recurso" #: editor/inspector_dock.cpp -#, fuzzy msgid "Make Resource Built-In" -msgstr "Tornar Incorporado" +msgstr "Tornar Recurso Incorporado" #: editor/inspector_dock.cpp msgid "Go to the previous edited object in history." @@ -4483,9 +4473,8 @@ msgid "History of recently edited objects." msgstr "Histórico de Objetos recentemente editados." #: editor/inspector_dock.cpp -#, fuzzy msgid "Open documentation for this object." -msgstr "Abrir documentação" +msgstr "Abrir documentação para este objeto." #: editor/inspector_dock.cpp editor/scene_tree_dock.cpp msgid "Open Documentation" @@ -4496,9 +4485,8 @@ msgid "Filter properties" msgstr "Propriedades do Filtro" #: editor/inspector_dock.cpp -#, fuzzy msgid "Manage object properties." -msgstr "Propriedades do Objeto." +msgstr "Gerir propriedades do objeto." #: editor/inspector_dock.cpp msgid "Changes may be lost!" @@ -4742,9 +4730,8 @@ msgid "Blend:" msgstr "Mistura:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Parameter Changed:" -msgstr "Mudança de Parâmetro" +msgstr "Parâmetro Alterado:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -5318,11 +5305,11 @@ msgstr "Erro de ligação, tente novamente." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't connect." -msgstr "Não consigo conectar." +msgstr "Incapaz de conectar." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't connect to host:" -msgstr "Não consigo ligar ao host:" +msgstr "Incapaz de ligar ao host:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "No response from host:" @@ -5334,11 +5321,11 @@ msgstr "Sem resposta." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't resolve hostname:" -msgstr "Não consigo resolver hostname:" +msgstr "Incapaz de resolver hostname:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't resolve." -msgstr "Não consigo resolver." +msgstr "Incapaz de resolver." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, return code:" @@ -5346,7 +5333,7 @@ msgstr "Falha na solicitação, código de retorno:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Cannot save response to:" -msgstr "Não consigo guardar resposta para:" +msgstr "Incapaz de guardar resposta para:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Write error." @@ -5390,7 +5377,7 @@ msgstr "Falhou a verificação hash SHA-256" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Asset Download Error:" -msgstr "Erro na transferência de Ativo:" +msgstr "Erro na Transferência de Recurso:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Downloading (%s / %s)..." @@ -5426,7 +5413,7 @@ msgstr "Erro na transferência" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Download for this asset is already in progress!" -msgstr "A transferência deste Ativo já está em andamento!" +msgstr "A transferência deste recurso já está em andamento!" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Recently Updated" @@ -5474,11 +5461,11 @@ msgstr "Todos" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Search templates, projects, and demos" -msgstr "" +msgstr "Procurar modelos, projetos e demos" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Search assets (excluding templates, projects, and demos)" -msgstr "" +msgstr "Procurar recursos (excluindo modelos, projetos e demos)" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." @@ -5518,28 +5505,27 @@ msgstr "A Carregar..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Assets ZIP File" -msgstr "Ficheiro ZIP de Ativos" +msgstr "Ficheiro ZIP de Recursos" #: editor/plugins/audio_stream_editor_plugin.cpp msgid "Audio Preview Play/Pause" -msgstr "" +msgstr "Play/Pause Pré-visualização Áudio" #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "" "Can't determine a save path for lightmap images.\n" "Save your scene and try again." msgstr "" -"Não consigo determinar um caminho para guardar imagens lightmap.\n" +"Incapaz de determinar um caminho para guardar imagens lightmap.\n" "Guarde a sua cena e tente novamente." #: editor/plugins/baked_lightmap_editor_plugin.cpp -#, fuzzy msgid "" "No meshes to bake. Make sure they contain an UV2 channel and that the 'Use " "In Baked Light' and 'Generate Lightmap' flags are on." msgstr "" -"Não há malhas para consolidar. Assegure-se que contêm um canal UV2 e que a " -"referência 'Bake Light' flag está on." +"Não há malhas para consolidar. Assegure-se que contêm um canal UV2 e que " +"'Use In Baked Light' e 'Generate Lightmap' estão ativas." #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Failed creating lightmap images, make sure path is writable." @@ -5680,6 +5666,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "Mover CanvasItem \"%s\" para (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "Bloquear Seleção" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Grupos" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -5781,13 +5779,12 @@ msgstr "Mudar âncoras" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "" "Project Camera Override\n" "Overrides the running project's camera with the editor viewport camera." msgstr "" -"Sobreposição de Câmara de Jogo\n" -"Sobrepõe câmara de jogo com câmara viewport do editor." +"Sobreposição de Câmara do Projeto\n" +"Substitui a câmara do projeto pela câmara viewport do editor." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5863,31 +5860,27 @@ msgstr "Modo Seleção" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Drag: Rotate selected node around pivot." -msgstr "Remover nó ou transição selecionado." +msgstr "Arrastar: Roda o nó selecionado à volta do pivô." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Alt+Drag: Move selected node." -msgstr "Alt+Arrastar: Mover" +msgstr "Alt+Arrastar: Mover nó selecionado." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "V: Set selected node's pivot position." -msgstr "Remover nó ou transição selecionado." +msgstr "V: Define posição do pivô do nó selecionado." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Alt+RMB: Show list of all nodes at position clicked, including locked." msgstr "" -"Mostra lista de todos os Objetos na posição clicada\n" -"(o mesmo que Alt+RMB no modo seleção)." +"Alt+RMB: Mostra lista de todos os nós na posição clicada, incluindo os " +"trancados." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "RMB: Add node at position clicked." -msgstr "" +msgstr "RMB: Adicionar nó na posição clicada." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -6125,14 +6118,12 @@ msgid "Clear Pose" msgstr "Limpar Pose" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Add Node Here" -msgstr "Adicionar Nó" +msgstr "Adicionar Nó Aqui" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Instance Scene Here" -msgstr "Cena(s) da Instância" +msgstr "Instância da Cena Aqui" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Multiply grid step by 2" @@ -6148,49 +6139,43 @@ msgstr "Vista Pan" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 3.125%" -msgstr "" +msgstr "Zoom a 3.125%" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 6.25%" -msgstr "" +msgstr "Zoom a 6.25%" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 12.5%" -msgstr "" +msgstr "Zoom a 12.5%" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 25%" -msgstr "Diminuir Zoom" +msgstr "Zoom a 25%" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 50%" -msgstr "Diminuir Zoom" +msgstr "Zoom a 50%" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 100%" -msgstr "Diminuir Zoom" +msgstr "Zoom a 100%" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 200%" -msgstr "Diminuir Zoom" +msgstr "Zoom a 200%" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 400%" -msgstr "Diminuir Zoom" +msgstr "Zoom a 400%" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Zoom to 800%" -msgstr "Diminuir Zoom" +msgstr "Zoom a 800%" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Zoom to 1600%" -msgstr "" +msgstr "Zoom a 1600%" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" @@ -6202,7 +6187,7 @@ msgstr "A adicionar %s..." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Cannot instantiate multiple nodes without root." -msgstr "Não consigo instanciar nós múltiplos sem raiz." +msgstr "Incapaz de instanciar nós múltiplos sem raiz." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp @@ -6216,7 +6201,7 @@ msgstr "Erro a instanciar cena de %s" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Change Default Type" -msgstr "Mudar Predefinição de Tipo" +msgstr "Mudar Tipo Predefinido" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -6428,14 +6413,13 @@ msgstr "Criar Forma Estática Trimesh" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Can't create a single convex collision shape for the scene root." -msgstr "Não consigo criar uma única forma convexa para a raiz da cena." +msgstr "Incapaz de criar uma única forma convexa para a raiz da cena." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Couldn't create a single convex collision shape." msgstr "Não consegui criar uma forma única de colisão convexa." #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Simplified Convex Shape" msgstr "Criar Forma Convexa Simples" @@ -6446,7 +6430,7 @@ msgstr "Criar Forma Convexa Simples" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Can't create multiple convex collision shapes for the scene root." msgstr "" -"Não consigo criar múltiplas formas de colisão convexas para a raiz da cena." +"Incapaz de criar múltiplas formas de colisão convexas para a raiz da cena." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Couldn't create any collision shapes." @@ -6473,9 +6457,8 @@ msgid "No mesh to debug." msgstr "Nenhuma malha para depurar." #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Mesh has no UV in layer %d." -msgstr "O Modelo não tem UV nesta camada" +msgstr "Malha não tem UV na camada %d." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "MeshInstance lacks a Mesh!" @@ -6540,9 +6523,8 @@ msgstr "" "Esta é a mais rápida (mas menos precisa) opção para deteção de colisão." #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Simplified Convex Collision Sibling" -msgstr "Criar Irmãos Únicos de Colisão Convexa" +msgstr "Criar Irmãos de Colisão Convexa Simples" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "" @@ -6556,14 +6538,14 @@ msgid "Create Multiple Convex Collision Siblings" msgstr "Criar Vários Irmãos de Colisão Convexa" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "" "Creates a polygon-based collision shape.\n" "This is a performance middle-ground between a single convex collision and a " "polygon-based collision." msgstr "" "Cria uma forma de colisão baseada em polígonos.\n" -"Esta uma opção de desempenho intermédio entre as duas opções acima." +"Esta uma opção de desempenho intermédio entre uma colisão convexa única e " +"uma colisão baseada em polígonos." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." @@ -6630,7 +6612,13 @@ msgid "Remove Selected Item" msgstr "Remover item selecionado" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +#, fuzzy +msgid "Import from Scene (Ignore Transforms)" +msgstr "Importar da Cena" + +#: editor/plugins/mesh_library_editor_plugin.cpp +#, fuzzy +msgid "Import from Scene (Apply Transforms)" msgstr "Importar da Cena" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7205,24 +7193,30 @@ msgid "ResourcePreloader" msgstr "ResourcePreloader" #: editor/plugins/room_manager_editor_plugin.cpp -#, fuzzy msgid "Flip Portals" -msgstr "Inverter na Horizontal" +msgstr "Inverter Portais" #: editor/plugins/room_manager_editor_plugin.cpp -#, fuzzy msgid "Room Generate Points" -msgstr "Contagem de Pontos gerados:" +msgstr "Quarto Gerar Pontos" #: editor/plugins/room_manager_editor_plugin.cpp -#, fuzzy msgid "Generate Points" -msgstr "Contagem de Pontos gerados:" +msgstr "Gerar Pontos" #: editor/plugins/room_manager_editor_plugin.cpp -#, fuzzy msgid "Flip Portal" -msgstr "Inverter na Horizontal" +msgstr "Inverter Portal" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "Limpar Transformação" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Criar Nó" #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" @@ -7246,7 +7240,7 @@ msgstr "Erro ao escrever TextFile:" #: editor/plugins/script_editor_plugin.cpp msgid "Could not load file at:" -msgstr "Não consigo carregar ficheiro em:" +msgstr "Incapaz de carregar ficheiro em:" #: editor/plugins/script_editor_plugin.cpp msgid "Error saving file!" @@ -7282,7 +7276,7 @@ msgstr "Guardar Ficheiro Como..." #: editor/plugins/script_editor_plugin.cpp msgid "Can't obtain the script for running." -msgstr "Não consigo obter o script para executar." +msgstr "Incapaz de obter o script para executar." #: editor/plugins/script_editor_plugin.cpp msgid "Script failed reloading, check console for errors." @@ -7540,7 +7534,7 @@ msgstr "Só podem ser largados recursos do Sistema de Ficheiros ." #: editor/plugins/script_text_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Can't drop nodes because script '%s' is not used in this scene." -msgstr "Não consigo largar nós porque o script '%s' não é usado neste cena." +msgstr "Incapaz de largar nós porque o script '%s' não é usado neste cena." #: editor/plugins/script_text_editor.cpp msgid "Lookup Symbol" @@ -7724,12 +7718,14 @@ msgid "Skeleton2D" msgstr "Esqueleto2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "Criar Pose de Descanso (a partir de Ossos)" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "Pôr Ossos em Pose de Descanso" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "Pôr Ossos em Pose de Descanso" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "Sobrescrever" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7756,6 +7752,71 @@ msgid "Perspective" msgstr "Perspetiva" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Perspective" +msgstr "Perspetiva" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "Perspetiva" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Left Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Perspective" +msgstr "Perspetiva" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Perspective" +msgstr "Perspetiva" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Perspective" +msgstr "Perspetiva" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "Transformação abortada." @@ -7782,20 +7843,17 @@ msgid "None" msgstr "Nenhum" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Rotate" -msgstr "Modo Rodar" +msgstr "Rodar" #. TRANSLATORS: This refers to the movement that changes the position of an object. #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Translate" -msgstr "Translação:" +msgstr "Translação" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Scale" -msgstr "Escala:" +msgstr "Escala" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scaling: " @@ -7818,52 +7876,44 @@ msgid "Animation Key Inserted." msgstr "Chave de Animação inserida." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Pitch:" -msgstr "Inclinação" +msgstr "Inclinação:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Yaw:" -msgstr "" +msgstr "Rotação:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Size:" -msgstr "Tamanho: " +msgstr "Tamanho:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Objects Drawn:" -msgstr "Objetos desenhados" +msgstr "Objetos Desenhados:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Material Changes:" -msgstr "Mudanças de Material" +msgstr "Mudanças de Material:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Shader Changes:" -msgstr "Alterações do Shader" +msgstr "Mudanças do Shader:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Surface Changes:" -msgstr "Mudanças de superfície" +msgstr "Mudanças da Superfície:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Draw Calls:" -msgstr "Chamadas de desenho" +msgstr "Chamadas de Desenho:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Vertices:" -msgstr "Vértices" +msgstr "Vértices:" #: editor/plugins/spatial_editor_plugin.cpp msgid "FPS: %d (%s ms)" -msgstr "" +msgstr "FPS: %d (%s ms)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Top View." @@ -7874,42 +7924,22 @@ msgid "Bottom View." msgstr "Vista de fundo." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "Fundo" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "Vista de esquerda." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "Esquerda" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "Vista de direita." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "Direita" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "Vista de frente." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "Frente" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "Vista de trás." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "Trás" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "Alinhar Transformação com Vista" @@ -8018,9 +8048,8 @@ msgid "Freelook Slow Modifier" msgstr "Freelook Modificador de Lentidão" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Toggle Camera Preview" -msgstr "Mudar tamanho da Câmara" +msgstr "Alternar Pré-visualização da Câmara" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Rotation Locked" @@ -8042,9 +8071,8 @@ msgstr "" "Não é uma indicação fiável do desempenho do jogo." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Convert Rooms" -msgstr "Converter em %s" +msgstr "Converter Quartos" #: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" @@ -8066,7 +8094,6 @@ msgstr "" "(\"raios X\")." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Snap Nodes to Floor" msgstr "Ajustar Nós ao Fundo" @@ -8180,9 +8207,13 @@ msgid "View Grid" msgstr "Ver grelha" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View Portal Culling" -msgstr "Configuração do Viewport" +msgstr "Ver Culling do Portal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "Ver Culling do Portal" #: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp @@ -8250,8 +8281,9 @@ msgid "Post" msgstr "Pós" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" -msgstr "Bugiganga sem Nome" +#, fuzzy +msgid "Unnamed Gizmo" +msgstr "Projeto sem nome" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Mesh2D" @@ -8291,7 +8323,7 @@ msgstr "Sprite está vazia!" #: editor/plugins/sprite_editor_plugin.cpp msgid "Can't convert a sprite using animation frames to mesh." -msgstr "Não consigo converter sprite com frames de animação para malha." +msgstr "Incapaz de converter sprite com frames de animação para malha." #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't replace by mesh." @@ -8303,7 +8335,7 @@ msgstr "Converter para Mesh2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create polygon." -msgstr "Geometria inválida, não consigo criar polígono." +msgstr "Geometria inválida, incapaz de criar polígono." #: editor/plugins/sprite_editor_plugin.cpp msgid "Convert to Polygon2D" @@ -8311,7 +8343,7 @@ msgstr "Converter para Polygon2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create collision polygon." -msgstr "Geometria inválida, não consigo criar polígono de colisão." +msgstr "Geometria inválida, incapaz de criar polígono de colisão." #: editor/plugins/sprite_editor_plugin.cpp msgid "Create CollisionPolygon2D Sibling" @@ -8319,7 +8351,7 @@ msgstr "Criar Irmão de CollisionPolygon2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create light occluder." -msgstr "Geometria inválida, não consigo criar oclusor de luz." +msgstr "Geometria inválida, incapaz de criar oclusor de luz." #: editor/plugins/sprite_editor_plugin.cpp msgid "Create LightOccluder2D Sibling" @@ -8502,221 +8534,196 @@ msgid "TextureRegion" msgstr "TextureRegion" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Colors" -msgstr "Cor" +msgstr "Cores" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Fonts" -msgstr "Letra" +msgstr "Fontes" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Icons" -msgstr "Ícone" +msgstr "Ícones" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Styleboxes" -msgstr "StyleBox" +msgstr "Caixas de Estilo" #: editor/plugins/theme_editor_plugin.cpp msgid "{num} color(s)" -msgstr "" +msgstr "{num} cor(es)" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "No colors found." -msgstr "Sub-recurso não encontrado." +msgstr "Cores não encontradas." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "{num} constant(s)" -msgstr "Constantes" +msgstr "{num} constante(s)" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "No constants found." -msgstr "Constante Cor." +msgstr "Constantes não encontradas." #: editor/plugins/theme_editor_plugin.cpp msgid "{num} font(s)" -msgstr "" +msgstr "{num} fonte(s)" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "No fonts found." -msgstr "Não encontrado!" +msgstr "Fontes não encontradas." #: editor/plugins/theme_editor_plugin.cpp msgid "{num} icon(s)" -msgstr "" +msgstr "{num} ícone(s)" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "No icons found." -msgstr "Não encontrado!" +msgstr "Ícones não encontrados." #: editor/plugins/theme_editor_plugin.cpp msgid "{num} stylebox(es)" -msgstr "" +msgstr "{num} stylebox(es)" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "No styleboxes found." -msgstr "Sub-recurso não encontrado." +msgstr "Styleboxes não encontradas." #: editor/plugins/theme_editor_plugin.cpp msgid "{num} currently selected" -msgstr "" +msgstr "{num} selecionado atualmente" #: editor/plugins/theme_editor_plugin.cpp msgid "Nothing was selected for the import." -msgstr "" +msgstr "Nada foi selecionado para importação." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Importing Theme Items" -msgstr "Importar tema" +msgstr "A Importar Itens do Tema" #: editor/plugins/theme_editor_plugin.cpp msgid "Importing items {n}/{n}" -msgstr "" +msgstr "A importar itens {n}/{n}" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Updating the editor" -msgstr "Sair do Editor?" +msgstr "A atualizar o editor" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Finalizing" -msgstr "A analisar" +msgstr "A finalizar" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Filter:" -msgstr "Filtros:" +msgstr "Filtro:" #: editor/plugins/theme_editor_plugin.cpp msgid "With Data" -msgstr "" +msgstr "Com Dados" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select by data type:" -msgstr "Selecione um Nó" +msgstr "Selecionar por tipo de dados:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select all visible color items." -msgstr "Selecionar uma separação para a apagar." +msgstr "Selecionar todos os itens de cor visíveis." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible color items and their data." -msgstr "" +msgstr "Selecionar todos os itens cor visíveis e os seus dados." #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all visible color items." -msgstr "" +msgstr "Desselecionar todos os itens cor visíveis." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select all visible constant items." -msgstr "Selecione primeiro um item de configuração!" +msgstr "Selecione todos os itens constantes visíveis." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible constant items and their data." -msgstr "" +msgstr "Selecionar todos os itens constante visíveis e os seus dados." #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all visible constant items." -msgstr "" +msgstr "Desselecionar todos os itens constante visíveis." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select all visible font items." -msgstr "Selecione primeiro um item de configuração!" +msgstr "Selecione todos os itens fonte visíveis." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible font items and their data." -msgstr "" +msgstr "Selecionar todos os itens fonte visíveis e os seus dados." #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all visible font items." -msgstr "" +msgstr "Desselecionar todos os itens fonte visíveis." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select all visible icon items." -msgstr "Selecione primeiro um item de configuração!" +msgstr "Selecione todos os itens ícones visíveis." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select all visible icon items and their data." -msgstr "Selecione primeiro um item de configuração!" +msgstr "Selecione todos os itens ícones visíveis e os seus dados." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Deselect all visible icon items." -msgstr "Selecione primeiro um item de configuração!" +msgstr "Desselecionar todos os itens ícone visíveis." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible stylebox items." -msgstr "" +msgstr "Selecionar todos os itens stylebox visíveis." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible stylebox items and their data." -msgstr "" +msgstr "Selecionar todos os itens stylebox visíveis e os seus dados." #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all visible stylebox items." -msgstr "" +msgstr "Desselecionar todos os itens stylebox visíveis." #: editor/plugins/theme_editor_plugin.cpp msgid "" "Caution: Adding icon data may considerably increase the size of your Theme " "resource." msgstr "" +"Aviso: Adicionar dados de ícone pode aumentar consideravelmente o tamanho do " +"recurso Tema." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Collapse types." -msgstr "Colapsar Tudo" +msgstr "Colapsar tipos." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Expand types." -msgstr "Expandir Tudo" +msgstr "Expandir tipos." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select all Theme items." -msgstr "Selecionar Ficheiro de Modelo" +msgstr "Selecione todos os itens Tema." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select With Data" -msgstr "Selecionar Pontos" +msgstr "Selecionar Com Dados" #: editor/plugins/theme_editor_plugin.cpp msgid "Select all Theme items with item data." -msgstr "" +msgstr "Selecionar todos os itens Tema e os seus dados." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Deselect All" -msgstr "Selecionar Tudo" +msgstr "Desselecionar Tudo" #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all Theme items." -msgstr "" +msgstr "Desselecionar todos os itens Tema." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Import Selected" -msgstr "Importar Cena" +msgstr "Importar Selecionado" #: editor/plugins/theme_editor_plugin.cpp msgid "" @@ -8732,34 +8739,28 @@ msgid "" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Color Items" -msgstr "Remover Todos os Itens" +msgstr "Remover Todos os Itens Cor" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Item" -msgstr "Remover item" +msgstr "Renomear Item" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Constant Items" -msgstr "Remover Todos os Itens" +msgstr "Remover Todos os Itens Constante" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Font Items" -msgstr "Remover Todos os Itens" +msgstr "Remover Todos os Itens Fonte" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Icon Items" -msgstr "Remover Todos os Itens" +msgstr "Remover Todos os Itens Ícone" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All StyleBox Items" -msgstr "Remover Todos os Itens" +msgstr "Remover Todos os Itens StyleBox" #: editor/plugins/theme_editor_plugin.cpp msgid "" @@ -8768,233 +8769,196 @@ msgid "" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Color Item" -msgstr "Adicionar Itens de Classe" +msgstr "Adicionar Item Cor" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Constant Item" -msgstr "Adicionar Itens de Classe" +msgstr "Adicionar Item Constante" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Font Item" -msgstr "Adicionar item" +msgstr "Adicionar Item Fonte" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Icon Item" -msgstr "Adicionar item" +msgstr "Adicionar Item Ícone" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Stylebox Item" -msgstr "Adicionar Todos os Itens" +msgstr "Adicionar Item Stylebox" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Color Item" -msgstr "Remover Itens de Classe" +msgstr "Renomear Item Cor" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Constant Item" -msgstr "Remover Itens de Classe" +msgstr "Renomear Item Constante" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Font Item" -msgstr "Renomear Nó" +msgstr "Renomear Item Fonte" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Icon Item" -msgstr "Renomear Nó" +msgstr "Renomear Item Ícone" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Stylebox Item" -msgstr "Remover item selecionado" +msgstr "Renomear Item Stylebox" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Invalid file, not a Theme resource." -msgstr "Ficheiro inválido, não é um Modelo válido de barramento de áudio." +msgstr "Ficheiro inválido, não é um recurso de Tema." #: editor/plugins/theme_editor_plugin.cpp msgid "Invalid file, same as the edited Theme resource." -msgstr "" +msgstr "Ficheiro inválido, o mesmo que o recurso do Tema editado." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Manage Theme Items" -msgstr "Gerir Modelos" +msgstr "Gerir Itens de Tema" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Edit Items" -msgstr "Item Editável" +msgstr "Editar Itens" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Types:" -msgstr "Tipo:" +msgstr "Tipos:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Type:" -msgstr "Tipo:" +msgstr "Adicionar Tipo:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Item:" -msgstr "Adicionar item" +msgstr "Adicionar Item:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add StyleBox Item" -msgstr "Adicionar Todos os Itens" +msgstr "Adicionar Item StyleBox" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove Items:" -msgstr "Remover item" +msgstr "Remover Itens:" #: editor/plugins/theme_editor_plugin.cpp msgid "Remove Class Items" msgstr "Remover Itens de Classe" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove Custom Items" -msgstr "Remover Itens de Classe" +msgstr "Remover Itens Personalizados" #: editor/plugins/theme_editor_plugin.cpp msgid "Remove All Items" msgstr "Remover Todos os Itens" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Theme Item" -msgstr "Itens do tema GUI" +msgstr "Adicionar Item Tema" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Old Name:" -msgstr "Nome do Nó:" +msgstr "Nome Antigo:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Import Items" -msgstr "Importar tema" +msgstr "Importar Itens" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Default Theme" -msgstr "Predefinição" +msgstr "Tema Predefinido" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Editor Theme" -msgstr "Editar Tema" +msgstr "Editor de Tema" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select Another Theme Resource:" -msgstr "Apagar recurso" +msgstr "Selecionar Outro Recurso Tema:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Another Theme" -msgstr "Importar tema" +msgstr "Outro Tema" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Confirm Item Rename" -msgstr "Anim Renomear Pista" +msgstr "Confirmar Renomear Item" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Cancel Item Rename" -msgstr "Renomear em Massa" +msgstr "Cancelar Renomear Item" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Override Item" -msgstr "Sobrepõe" +msgstr "Sobrepor Item" #: editor/plugins/theme_editor_plugin.cpp msgid "Unpin this StyleBox as a main style." -msgstr "" +msgstr "Desafixar este StyleBox como um estilo principal." #: editor/plugins/theme_editor_plugin.cpp msgid "" "Pin this StyleBox as a main style. Editing its properties will update the " "same properties in all other StyleBoxes of this type." msgstr "" +"Fixar este StyleBox como um estilo principal. Editar as propriedades vai " +"atualizar as mesmas em todos os StyleBoxes deste tipo." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Type" -msgstr "Tipo" +msgstr "Adicionar Tipo" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Item Type" -msgstr "Adicionar item" +msgstr "Adicionar Tipo de Item" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Node Types:" -msgstr "Tipo de nó" +msgstr "Tipos de Nó:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Show Default" -msgstr "Carregar Predefinição" +msgstr "Mostrar Predefinição" #: editor/plugins/theme_editor_plugin.cpp msgid "Show default type items alongside items that have been overridden." msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Override All" -msgstr "Sobrepõe" +msgstr "Sobrepor Tudo" #: editor/plugins/theme_editor_plugin.cpp msgid "Override all default type items." msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Theme:" -msgstr "Tema" +msgstr "Tema:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Manage Items..." -msgstr "Gerir Modelos de Exportação..." +msgstr "Gerir Itens..." #: editor/plugins/theme_editor_plugin.cpp msgid "Add, remove, organize and import Theme items." -msgstr "" +msgstr "Adicionar, remover, organizar e importar itens Tema." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Preview" -msgstr "Pré-visualização" +msgstr "Adicionar Pré-visualização" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Default Preview" -msgstr "Atualizar Pré-visualização" +msgstr "Pré-visualização Predefinida" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select UI Scene:" -msgstr "Selecione uma Fonte Malha:" +msgstr "Selecione Cena UI:" #: editor/plugins/theme_editor_preview.cpp msgid "" @@ -9035,9 +8999,8 @@ msgid "Checked Radio Item" msgstr "Item Rádio Marcado" #: editor/plugins/theme_editor_preview.cpp -#, fuzzy msgid "Named Separator" -msgstr "Sep. Nomeado" +msgstr "Separador Nomeado" #: editor/plugins/theme_editor_preview.cpp msgid "Submenu" @@ -9096,9 +9059,8 @@ msgid "Invalid PackedScene resource, must have a Control node at its root." msgstr "" #: editor/plugins/theme_editor_preview.cpp -#, fuzzy msgid "Invalid file, not a PackedScene resource." -msgstr "Ficheiro inválido, não é um Modelo válido de barramento de áudio." +msgstr "Ficheiro inválido, não é um recurso PackedScene." #: editor/plugins/theme_editor_preview.cpp msgid "Reload the scene to reflect its most actual state." @@ -10495,9 +10457,8 @@ msgid "VisualShader" msgstr "VIsualShader" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Edit Visual Property:" -msgstr "Editar Propriedade Visual" +msgstr "Editar Propriedade Visual:" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Visual Shader Mode Changed" @@ -10624,9 +10585,8 @@ msgid "Script" msgstr "Script" #: editor/project_export.cpp -#, fuzzy msgid "GDScript Export Mode:" -msgstr "Modo Exportação de Script:" +msgstr "Modo de Exportação GDScript:" #: editor/project_export.cpp msgid "Text" @@ -10634,21 +10594,19 @@ msgstr "Texto" #: editor/project_export.cpp msgid "Compiled Bytecode (Faster Loading)" -msgstr "" +msgstr "Bytecode compilado (Carregamento mais Rápido)" #: editor/project_export.cpp msgid "Encrypted (Provide Key Below)" msgstr "Encriptado (Fornecer Chave em Baixo)" #: editor/project_export.cpp -#, fuzzy msgid "Invalid Encryption Key (must be 64 hexadecimal characters long)" -msgstr "Chave de Encriptação Inválida (tem de ter 64 caracteres)" +msgstr "Chave de Encriptação Inválida (tem de ter 64 caracteres hexadecimais)" #: editor/project_export.cpp -#, fuzzy msgid "GDScript Encryption Key (256-bits as hexadecimal):" -msgstr "Chave de Encriptação de Script (Hexadecimal 256-bits):" +msgstr "Chave de Encriptação GDScript (hexadecimal 256-bits):" #: editor/project_export.cpp msgid "Export PCK/Zip" @@ -10722,13 +10680,12 @@ msgid "Imported Project" msgstr "Projeto importado" #: editor/project_manager.cpp -#, fuzzy msgid "Invalid project name." -msgstr "Nome do Projeto Inválido." +msgstr "Nome do projeto inválido." #: editor/project_manager.cpp msgid "Couldn't create folder." -msgstr "Não consigo criar pasta." +msgstr "Incapaz de criar pasta." #: editor/project_manager.cpp msgid "There is already a folder in this path with the specified name." @@ -10752,11 +10709,11 @@ msgstr "" #: editor/project_manager.cpp msgid "Couldn't edit project.godot in project path." -msgstr "Não consigo editar project.godot no caminho do projeto." +msgstr "Incapaz de editar project.godot no caminho do projeto." #: editor/project_manager.cpp msgid "Couldn't create project.godot in project path." -msgstr "Não consigo criar project.godot no caminho do projeto." +msgstr "Incapaz de criar project.godot no caminho do projeto." #: editor/project_manager.cpp msgid "Error opening package file, not in ZIP format." @@ -10870,7 +10827,7 @@ msgstr "Erro: Projeto inexistente no sistema de ficheiros." #: editor/project_manager.cpp msgid "Can't open project at '%s'." -msgstr "Não consigo abrir projeto em '%s'." +msgstr "Incapaz de abrir projeto em '%s'." #: editor/project_manager.cpp msgid "Are you sure to open more than one project?" @@ -10932,7 +10889,7 @@ msgid "" "Please edit the project and set the main scene in the Project Settings under " "the \"Application\" category." msgstr "" -"Não consigo executar o projeto: cena principal não definida.\n" +"Incapaz de executar o projeto: cena principal não definida.\n" "Edite o projeto e defina a cena principal em Configurações do Projeto dentro " "da categoria \"Application\"." @@ -10941,7 +10898,7 @@ msgid "" "Can't run project: Assets need to be imported.\n" "Please edit the project to trigger the initial import." msgstr "" -"Não consigo executar o projeto: Ativos têm de ser importados.\n" +"Incapaz de executar o projeto: Recursos têm de ser importados.\n" "Edite o projeto para desencadear a importação inicial." #: editor/project_manager.cpp @@ -10949,14 +10906,12 @@ msgid "Are you sure to run %d projects at once?" msgstr "Está seguro que quer executar %d projetos em simultâneo?" #: editor/project_manager.cpp -#, fuzzy msgid "Remove %d projects from the list?" -msgstr "Selecionar aparelho da lista" +msgstr "Remover %d projetos da lista?" #: editor/project_manager.cpp -#, fuzzy msgid "Remove this project from the list?" -msgstr "Selecionar aparelho da lista" +msgstr "Remover este projeto da lista?" #: editor/project_manager.cpp msgid "" @@ -10989,9 +10944,8 @@ msgid "Project Manager" msgstr "Gestor de Projetos" #: editor/project_manager.cpp -#, fuzzy msgid "Local Projects" -msgstr "Projetos" +msgstr "Projetos Locais" #: editor/project_manager.cpp msgid "Loading, please wait..." @@ -11002,41 +10956,36 @@ msgid "Last Modified" msgstr "Última modificação" #: editor/project_manager.cpp -#, fuzzy msgid "Edit Project" -msgstr "Exportar Projeto" +msgstr "Editar Projeto" #: editor/project_manager.cpp -#, fuzzy msgid "Run Project" -msgstr "Renomear Projeto" +msgstr "Executar Projeto" #: editor/project_manager.cpp msgid "Scan" -msgstr "Analisar" +msgstr "Pequisar" #: editor/project_manager.cpp -#, fuzzy msgid "Scan Projects" -msgstr "Projetos" +msgstr "Pesquisar Projetos" #: editor/project_manager.cpp msgid "Select a Folder to Scan" -msgstr "Selecione uma pasta para analisar" +msgstr "Selecione uma Pasta para Pesquisar" #: editor/project_manager.cpp msgid "New Project" msgstr "Novo Projeto" #: editor/project_manager.cpp -#, fuzzy msgid "Import Project" -msgstr "Projeto importado" +msgstr "Importar Projeto" #: editor/project_manager.cpp -#, fuzzy msgid "Remove Project" -msgstr "Renomear Projeto" +msgstr "Remover Projeto" #: editor/project_manager.cpp msgid "Remove Missing" @@ -11047,9 +10996,8 @@ msgid "About" msgstr "Sobre" #: editor/project_manager.cpp -#, fuzzy msgid "Asset Library Projects" -msgstr "Biblioteca de Ativos" +msgstr "Projetos Biblioteca de Recursos" #: editor/project_manager.cpp msgid "Restart Now" @@ -11065,7 +11013,7 @@ msgstr "" #: editor/project_manager.cpp msgid "Can't run project" -msgstr "Não consigo executar o Projeto" +msgstr "Incapaz de executar o projeto" #: editor/project_manager.cpp msgid "" @@ -11073,22 +11021,20 @@ msgid "" "Would you like to explore official example projects in the Asset Library?" msgstr "" "Atualmente não tem quaisquer projetos.\n" -"Gostaria de explorar os projetos de exemplo oficiais na Biblioteca de Ativos?" +"Gostaria de explorar os projetos de exemplo oficiais na Biblioteca de " +"Recursos?" #: editor/project_manager.cpp -#, fuzzy msgid "Filter projects" -msgstr "Propriedades do Filtro" +msgstr "Filtrar projetos" #: editor/project_manager.cpp -#, fuzzy msgid "" "This field filters projects by name and last path component.\n" "To filter projects by name and full path, the query must contain at least " "one `/` character." msgstr "" -"A caixa de pesquisa filtra projetos por nome e último componente do " -"caminho.\n" +"Este campo filtra projetos por nome e última componente do caminho.\n" "Para filtrar projetos por nome e caminho completo, a pesquisa tem de conter " "pelo menos um caráter `/`." @@ -11098,7 +11044,7 @@ msgstr "Tecla " #: editor/project_settings_editor.cpp msgid "Physical Key" -msgstr "" +msgstr "Chave Física" #: editor/project_settings_editor.cpp msgid "Joy Button" @@ -11146,7 +11092,7 @@ msgstr "Aparelho" #: editor/project_settings_editor.cpp msgid " (Physical)" -msgstr "" +msgstr " (Físico)" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "Press a Key..." @@ -11289,23 +11235,20 @@ msgid "Override for Feature" msgstr "Sobrepor por Característica" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Add %d Translations" -msgstr "Adicionar tradução" +msgstr "Adicionar %t Traduções" #: editor/project_settings_editor.cpp msgid "Remove Translation" msgstr "Remover tradução" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Translation Resource Remap: Add %d Path(s)" -msgstr "Recurso Remap Adicionar Remap" +msgstr "Remapear Recurso Tradução: Adicionar %d Caminho(s)" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Translation Resource Remap: Add %d Remap(s)" -msgstr "Recurso Remap Adicionar Remap" +msgstr "Remapear Recurso Tradução: Adicionar %d Remap(s)" #: editor/project_settings_editor.cpp msgid "Change Resource Remap Language" @@ -11664,7 +11607,7 @@ msgid "" "Cannot instance the scene '%s' because the current scene exists within one " "of its nodes." msgstr "" -"Não consigo instanciar a cena '%s' porque a cena atual existe dentro de um " +"Incapaz de instanciar a cena '%s' porque a cena atual existe dentro de um " "dos seus nós." #: editor/scene_tree_dock.cpp @@ -11681,7 +11624,7 @@ msgstr "Instanciar Cena Filha" #: editor/scene_tree_dock.cpp msgid "Can't paste root node into the same scene." -msgstr "Não consigo colar o nó raiz na mesma cena." +msgstr "Incapaz de colar o nó raiz na mesma cena." #: editor/scene_tree_dock.cpp msgid "Paste Node(s)" @@ -11710,7 +11653,7 @@ msgstr "Duplicar Nó(s)" #: editor/scene_tree_dock.cpp msgid "Can't reparent nodes in inherited scenes, order of nodes can't change." msgstr "" -"Não consigo reassociar nós em cenas herdadas, a ordem dos nós não pode mudar." +"Incapaz de reassociar nós em cenas herdadas, a ordem dos nós não pode mudar." #: editor/scene_tree_dock.cpp msgid "Node must belong to the edited scene to become root." @@ -11821,11 +11764,11 @@ msgstr "Outro Nó" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes from a foreign scene!" -msgstr "Não consigo operar em nós de uma cena externa!" +msgstr "Incapaz de operar em nós de uma cena externa!" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes the current scene inherits from!" -msgstr "Não consigo operar em nós herdados pela cena atual!" +msgstr "Incapaz de operar em nós herdados pela cena atual!" #: editor/scene_tree_dock.cpp msgid "This operation can't be done on instanced scenes." @@ -11852,7 +11795,7 @@ msgid "" "Couldn't save new scene. Likely dependencies (instances) couldn't be " "satisfied." msgstr "" -"Não consigo guardar nova cena. Provavelmente dependências (instâncias) não " +"Incapaz de guardar nova cena. Provavelmente dependências (instâncias) não " "foram satisfeitas." #: editor/scene_tree_dock.cpp @@ -11885,7 +11828,7 @@ msgid "" "This is probably because this editor was built with all language modules " "disabled." msgstr "" -"Não consigo anexar um script: não há linguagens registadas.\n" +"Incapaz de anexar um script: não há linguagens registadas.\n" "Isto provavelmente acontece porque o editor foi compilado com todos os " "módulos de linguagem desativados." @@ -12101,7 +12044,7 @@ msgstr "Erro ao carregar Modelo '%s'" #: editor/script_create_dialog.cpp msgid "Error - Could not create script in filesystem." -msgstr "Erro - Não consigo criar script no sistema de ficheiros." +msgstr "Erro - Incapaz de criar script no sistema de ficheiros." #: editor/script_create_dialog.cpp msgid "Error loading script from %s" @@ -12247,7 +12190,7 @@ msgstr "Copiar Erro" #: editor/script_editor_debugger.cpp msgid "Open C++ Source on GitHub" -msgstr "" +msgstr "Abrir Código C++ no GitHub" #: editor/script_editor_debugger.cpp msgid "Video RAM" @@ -12426,14 +12369,22 @@ msgid "Change Ray Shape Length" msgstr "Mudar comprimento da forma raio" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Set Room Point Position" -msgstr "Definir posição do Ponto da curva" +msgstr "Definir Posição do Ponto do Quarto" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Set Portal Point Position" -msgstr "Definir posição do Ponto da curva" +msgstr "Definir Posição do Ponto do Portal" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Radius" +msgstr "Mudar Raio da Forma Cilindro" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr "Definir curva na posição" #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" @@ -12530,8 +12481,8 @@ msgstr "Formato de dicionário de instância inválido (falta @path)" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (can't load script at @path)" msgstr "" -"Formato de dicionário de instância inválido (não consigo carregar o script " -"em @path)" +"Formato de dicionário de instância inválido (incapaz de carregar o script em " +"@path)" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (invalid script at @path)" @@ -12546,14 +12497,12 @@ msgid "Object can't provide a length." msgstr "Objeto não fornece um comprimento." #: modules/gltf/editor_scene_exporter_gltf_plugin.cpp -#, fuzzy msgid "Export Mesh GLTF2" -msgstr "Exportar Biblioteca de Malhas" +msgstr "Exportar Malha GLTF2" #: modules/gltf/editor_scene_exporter_gltf_plugin.cpp -#, fuzzy msgid "Export GLTF..." -msgstr "Exportar..." +msgstr "Exportar GLTF..." #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" @@ -12596,9 +12545,8 @@ msgid "GridMap Paint" msgstr "Pintura do GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Selection" -msgstr "Seleção de Preenchimento de GridMap" +msgstr "Seleção de GridMap" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Grid Map" @@ -12720,6 +12668,11 @@ msgstr "A Traçar lightmaps" msgid "Class name can't be a reserved keyword" msgstr "Nome de classe não pode ser uma palavra-chave reservada" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "Preencher Seleção" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "Fim do stack trace de exceção interna" @@ -12850,18 +12803,16 @@ msgid "Add Output Port" msgstr "Adicionar Porta de Saída" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Port Type" -msgstr "Mudar tipo" +msgstr "Mudar Tipo de Porta" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Port Name" -msgstr "Mudar nome de porta de entrada" +msgstr "Mudar Nome da Porta" #: modules/visual_script/visual_script_editor.cpp msgid "Override an existing built-in function." -msgstr "Sobrepõe-se a função incorporada existente." +msgstr "Sobrepõe uma função incorporada existente." #: modules/visual_script/visual_script_editor.cpp msgid "Create a new function." @@ -12972,9 +12923,8 @@ msgid "Add Preload Node" msgstr "Adicionar Nó de Pré-carregamento" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Add Node(s)" -msgstr "Adicionar Nó" +msgstr "Adicionar Nó(s)" #: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" @@ -12985,8 +12935,7 @@ msgid "" "Can't drop properties because script '%s' is not used in this scene.\n" "Drop holding 'Shift' to just copy the signature." msgstr "" -"Não consigo largar propriedades porque o script '%s' não é usado neste " -"cena.\n" +"Incapaz de largar propriedades porque o script '%s' não é usado neste cena.\n" "Largue com 'Shift' para copiar apenas a assinatura." #: modules/visual_script/visual_script_editor.cpp @@ -13039,7 +12988,7 @@ msgstr "Redimensionar Comentário" #: modules/visual_script/visual_script_editor.cpp msgid "Can't copy the function node." -msgstr "Não consigo copiar o nó função." +msgstr "Incapaz de copiar o nó função." #: modules/visual_script/visual_script_editor.cpp msgid "Paste VisualScript Nodes" @@ -13047,11 +12996,11 @@ msgstr "Colar Nós VisualScript" #: modules/visual_script/visual_script_editor.cpp msgid "Can't create function with a function node." -msgstr "Não consigo criar função com um nó função." +msgstr "Incapaz de criar função com um nó função." #: modules/visual_script/visual_script_editor.cpp msgid "Can't create function of nodes from nodes of multiple functions." -msgstr "Não consigo criar função de nós a partir de nós de várias funções." +msgstr "Incapaz de criar função de nós a partir de nós de várias funções." #: modules/visual_script/visual_script_editor.cpp msgid "Select at least one node with sequence port." @@ -13206,75 +13155,69 @@ msgstr "Procurar VisualScript" msgid "Get %s" msgstr "Obter %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "Falta o nome do pacote." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "Os segmentos de pacote devem ser de comprimento diferente de zero." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" "O carácter '%s' não é permitido em nomes de pacotes de aplicações Android." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "Um dígito não pode ser o primeiro carácter num segmento de pacote." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" "O carácter '%s' não pode ser o primeiro carácter num segmento de pacote." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "O pacote deve ter pelo menos um separador '.'." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "Selecionar aparelho da lista" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" -msgstr "" +msgstr "A executar em %s" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Exporting APK..." -msgstr "A Exportar Tudo" +msgstr "A Exportar APK..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Uninstalling..." -msgstr "Desinstalar" +msgstr "A desinstalar..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Installing to device, please wait..." -msgstr "A carregar, espere por favor..." +msgstr "A instalar no dispositivo, espere por favor..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" -msgstr "Não consegui iniciar o subprocesso!" +msgstr "Incapaz de instalar o dispositivo: %s" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Running on device..." -msgstr "A executar Script Customizado..." +msgstr "A executar no dispositivo..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Could not execute on device." -msgstr "Não consegui criar pasta." +msgstr "Incapaz de executar no dispositivo." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "Incapaz de localizar a ferramenta 'apksigner'." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -13282,69 +13225,69 @@ msgstr "" "Modelo de compilação Android não está instalado neste projeto. Instale-o no " "menu Projeto." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" "Keystore de depuração não configurada nas Configurações do Editor e nem na " "predefinição." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" "Lançamento de keystore configurado incorretamente na predefinição exportada." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" "É necessário um caminho válido para o Android SDK no Editor de Configurações." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "Caminho inválido para o Android SDK no Editor de Configurações." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "Diretoria 'platform-tools' em falta!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "Incapaz de encontrar o comando adb das ferramentas Android SDK." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" "Por favor confirme a pasta do Android SDK especificada no Editor de " "Configurações." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "Diretoria 'build-tools' em falta!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "Incapaz de encontrar o comando apksigner das ferramentas Android SDK." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "Chave pública inválida para expansão APK." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "Nome de pacote inválido:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" @@ -13352,39 +13295,25 @@ msgstr "" "Módulo inválido \"GodotPaymentV3\" incluído na configuração do projeto " "\"android/modules\" (alterado em Godot 3.2.2).\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" "\"Usar Compilação Personalizada\" têm de estar ativa para usar os plugins." -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" -"\"Graus de Liberdade\" só é válido quando \"Modo Xr\" é \"Oculus Mobile VR\"." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" "\"Rastreamento de Mão\" só é válido quando \"Modo Xr\" é \"Oculus Mobile VR" "\"." -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" -"\"Consciência do Foco\" só é válido quando \"Modo Xr\" é \"Oculus Mobile VR" -"\"." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" "\"Exportar AAB\" só é válido quando \"Usar Compilação Personalizada\" está " "ativa." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13392,58 +13321,52 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." -msgstr "" +msgstr "A assinar depuração %s..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." -msgstr "" -"A analisar Ficheiros,\n" -"Espere, por favor..." +msgstr "A assinar lançamento %s..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." -msgstr "Não consigo abrir modelo para exportação:" +msgstr "Incapaz de encontrar keystore e exportar." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" -msgstr "" +msgstr "'apksigner' devolvido com erro #%d" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." -msgstr "A adicionar %s..." +msgstr "A verificar %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." -msgstr "" +msgstr "Falhou a verificação 'apksigner' de %s." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" -msgstr "A Exportar Tudo" +msgstr "A exportar para Android" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" "Nome de ficheiro inválido! O Pacote Android App exige a extensão *.aab." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "Expansão APK não compatível com Pacote Android App." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "Nome de ficheiro inválido! APK Android exige a extensão *.apk." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" -msgstr "" +msgstr "Formato de exportação não suportado!\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." @@ -13451,7 +13374,7 @@ msgstr "" "A tentar compilar a partir de um modelo personalizado, mas sem informação de " "versão. Reinstale no menu 'Projeto'." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13463,26 +13386,24 @@ msgstr "" " Versão Godot: %s\n" "Reinstale o modelo de compilação Android no menu 'Projeto'." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" -msgstr "Impossível encontrar project.godot no Caminho do Projeto." +msgstr "Incapaz de exportar ficheiros do projeto para projeto gradle\n" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" -msgstr "Não consigo escrever ficheiro:" +msgstr "Incapaz de escrever ficheiro de pacote de expansão!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "A compilar Projeto Android (gradle)" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." @@ -13491,11 +13412,11 @@ msgstr "" "Em alternativa visite docs.godotengine.org para a documentação sobre " "compilação Android." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "A mover saída" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." @@ -13503,24 +13424,23 @@ msgstr "" "Incapaz de copiar e renomear ficheiro de exportação, verifique diretoria de " "projeto gradle por resultados." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Package not found: %s" -msgstr "Animação não encontrada: '%s'" +msgstr "Pacote não encontrado: '%s'" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." -msgstr "A criar contornos..." +msgstr "A criar APK..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" -msgstr "Não consigo abrir modelo para exportação:" +msgstr "" +"Incapaz de encontrar modelo APK para exportar:\n" +"%s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13528,23 +13448,21 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Adding files..." -msgstr "A adicionar %s..." +msgstr "A adicionar ficheiros..." -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Could not export project files" -msgstr "Não consigo escrever ficheiro:" +msgstr "Incapaz de exportar ficheiros do projeto" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "A alinhar APK..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." -msgstr "" +msgstr "Incapaz de unzipar APK desalinhado temporário." #: platform/iphone/export/export.cpp platform/osx/export/export.cpp msgid "Identifier is missing." @@ -13557,8 +13475,7 @@ msgstr "O carácter \"%s\" não é permitido no Identificador." #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." msgstr "" -"ID da equipa da App Store não especificado - não consigo configurar o " -"projeto." +"ID da equipa da App Store não especificado - incapaz de configurar o projeto." #: platform/iphone/export/export.cpp msgid "Invalid Identifier:" @@ -13582,7 +13499,7 @@ msgstr "Executar HTML exportado no navegador predefinido do sistema." #: platform/javascript/export/export.cpp msgid "Could not open template for export:" -msgstr "Não consigo abrir modelo para exportação:" +msgstr "Incapaz de abrir modelo para exportação:" #: platform/javascript/export/export.cpp msgid "Invalid export template:" @@ -13590,32 +13507,27 @@ msgstr "Modelo de exportação inválido:" #: platform/javascript/export/export.cpp msgid "Could not write file:" -msgstr "Não consigo escrever ficheiro:" +msgstr "Incapaz de escrever ficheiro:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not read file:" -msgstr "Não consigo escrever ficheiro:" +msgstr "Incapaz de ler ficheiro:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not read HTML shell:" -msgstr "Não consigo ler shell HTML personalizado:" +msgstr "Incapaz de ler shell HTML:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Could not create HTTP server directory:" -msgstr "Não consegui criar pasta." +msgstr "Incapaz de criar diretoria do servidor HTTP:" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Error starting HTTP server:" -msgstr "Erro ao guardar cena." +msgstr "Erro ao iniciar servidor HTTP:" #: platform/osx/export/export.cpp -#, fuzzy msgid "Invalid bundle identifier:" -msgstr "Identificador Inválido:" +msgstr "Identificador de pacote inválido:" #: platform/osx/export/export.cpp msgid "Notarization: code signing required." @@ -14082,6 +13994,14 @@ msgstr "" "NavigationMeshInstance tem de ser filho ou neto de um nó Navigation. Apenas " "fornece dados de navegação." +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14170,7 +14090,7 @@ msgstr "" #: scene/3d/room.cpp msgid "A Room cannot have another Room as a child or grandchild." -msgstr "" +msgstr "Um Quarto não pode ter outro Quarto como filho ou neto." #: scene/3d/room.cpp msgid "The RoomManager should not be placed inside a Room." @@ -14408,6 +14328,14 @@ msgstr "Deve usar uma extensão válida." msgid "Enable grid minimap." msgstr "Ativar grelha do minimapa." +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14460,6 +14388,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "O tamanho do viewport tem de ser maior do que 0 para renderizar." +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " @@ -14481,9 +14413,8 @@ msgid "Invalid comparison function for that type." msgstr "Função de comparação inválida para este tipo." #: servers/visual/shader_language.cpp -#, fuzzy msgid "Varying may not be assigned in the '%s' function." -msgstr "Variações só podem ser atribuídas na função vértice." +msgstr "Variações não podem ser atribuídas na função '%s'." #: servers/visual/shader_language.cpp msgid "" @@ -14513,6 +14444,41 @@ msgstr "Atribuição a uniforme." msgid "Constants cannot be modified." msgstr "Constantes não podem ser modificadas." +#~ msgid "Make Rest Pose (From Bones)" +#~ msgstr "Criar Pose de Descanso (a partir de Ossos)" + +#~ msgid "Bottom" +#~ msgstr "Fundo" + +#~ msgid "Left" +#~ msgstr "Esquerda" + +#~ msgid "Right" +#~ msgstr "Direita" + +#~ msgid "Front" +#~ msgstr "Frente" + +#~ msgid "Rear" +#~ msgstr "Trás" + +#~ msgid "Nameless gizmo" +#~ msgstr "Bugiganga sem Nome" + +#~ msgid "" +#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile " +#~ "VR\"." +#~ msgstr "" +#~ "\"Graus de Liberdade\" só é válido quando \"Modo Xr\" é \"Oculus Mobile VR" +#~ "\"." + +#~ msgid "" +#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" +#~ "\"." +#~ msgstr "" +#~ "\"Consciência do Foco\" só é válido quando \"Modo Xr\" é \"Oculus Mobile " +#~ "VR\"." + #~ msgid "Package Contents:" #~ msgstr "Conteúdo do Pacote:" diff --git a/editor/translations/pt_BR.po b/editor/translations/pt_BR.po index b7bb7ce0c4..87c8792cbf 100644 --- a/editor/translations/pt_BR.po +++ b/editor/translations/pt_BR.po @@ -120,12 +120,14 @@ # PauloFRs <paulofr1@hotmail.com>, 2021. # Diego Bloise <diego-dev@outlook.com>, 2021. # Alkoarism <Alkoarism@gmail.com>, 2021. +# リーLee <kaualee304@gmail.com>, 2021. +# William Weber Berrutti <wwberrutti@protonmail.ch>, 2021. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: 2016-05-30\n" -"PO-Revision-Date: 2021-08-06 06:47+0000\n" -"Last-Translator: Alkoarism <Alkoarism@gmail.com>\n" +"PO-Revision-Date: 2021-09-11 20:05+0000\n" +"Last-Translator: William Weber Berrutti <wwberrutti@protonmail.ch>\n" "Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/" "godot-engine/godot/pt_BR/>\n" "Language: pt_BR\n" @@ -133,7 +135,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.8-dev\n" +"X-Generator: Weblate 4.9-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -481,15 +483,13 @@ msgstr "Inserir Anim" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "node '%s'" -msgstr "Não é possível abrir '%s'." +msgstr "nodo '%s'" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "animation" -msgstr "Animação" +msgstr "animação" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." @@ -497,9 +497,8 @@ msgstr "AnimationPlayer não pode animar a si mesmo, apenas outros jogadores." #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "property '%s'" -msgstr "Nenhuma propriedade '%s' existe." +msgstr "propriedade '%s'" #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -1055,7 +1054,6 @@ msgid "Edit..." msgstr "Editar..." #: editor/connections_dialog.cpp -#, fuzzy msgid "Go to Method" msgstr "Ir ao Método" @@ -1137,7 +1135,7 @@ msgstr "" msgid "Dependencies" msgstr "Dependências" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Recurso" @@ -1372,9 +1370,8 @@ msgid "Error opening asset file for \"%s\" (not in ZIP format)." msgstr "Erro ao abrir o pacote \"%s\" (não está em formato ZIP)." #: editor/editor_asset_installer.cpp -#, fuzzy msgid "%s (already exists)" -msgstr "%s (Já existe)" +msgstr "%s (já existe)" #: editor/editor_asset_installer.cpp msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:" @@ -1395,7 +1392,6 @@ msgid "The following files failed extraction from asset \"%s\":" msgstr "Os seguintes arquivos falharam na extração do asset \"% s\":" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "(and %s more files)" msgstr "(e %s mais arquivos)" @@ -1477,9 +1473,8 @@ msgid "Bypass" msgstr "Ignorar" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Bus Options" -msgstr "Opções da pista" +msgstr "Opções do canal" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp #: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp @@ -1645,9 +1640,8 @@ msgid "Can't add autoload:" msgstr "Não pode adicionar autoload:" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "%s is an invalid path. File does not exist." -msgstr "O %s é um caminho inválido. O arquivo não existe." +msgstr "%s é um caminho inválido. O arquivo não existe." #: editor/editor_autoload_settings.cpp msgid "%s is an invalid path. Not in resource path (res://)." @@ -1675,7 +1669,6 @@ msgid "Name" msgstr "Nome" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Global Variable" msgstr "Variável Global" @@ -1802,13 +1795,13 @@ msgstr "" "Habilite 'Importar Pvrtc' em Configurações do Projeto ou desabilite 'Driver " "Reserva Ativado'." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "Modelo customizado de depuração não encontrado." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -1851,12 +1844,10 @@ msgid "Import Dock" msgstr "Importar Dock" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Allows to view and edit 3D scenes." msgstr "Permite visualizar e editar cenas 3D." #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Allows to edit scripts using the integrated script editor." msgstr "Permite editar scripts usando o editor de script integrado." @@ -1869,17 +1860,16 @@ msgid "Allows editing the node hierarchy in the Scene dock." msgstr "Permite editar a hierarquia de nó na doca Cena." #: editor/editor_feature_profile.cpp -#, fuzzy msgid "" "Allows to work with signals and groups of the node selected in the Scene " "dock." -msgstr "Permite trabalhar com sinais e grupos do nó selecionado na doca Cena." +msgstr "" +"Permite trabalhar com sinais e grupos do nó selecionado no painel Cena." #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Allows to browse the local file system via a dedicated dock." msgstr "" -"Permite navegar pelo sistema de arquivos local através de uma doca dedicada." +"Permite navegar pelo sistema de arquivos local através de um painel dedicado." #: editor/editor_feature_profile.cpp msgid "" @@ -1890,9 +1880,8 @@ msgstr "" "Requer a doca FileSystem para funcionar." #: editor/editor_feature_profile.cpp -#, fuzzy msgid "(current)" -msgstr "(Atual)" +msgstr "(atual)" #: editor/editor_feature_profile.cpp msgid "(none)" @@ -1931,14 +1920,12 @@ msgid "Enable Contextual Editor" msgstr "Habilitar Editor Contextual" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Class Properties:" -msgstr "Propriedades de Classe:" +msgstr "Propriedades da Classe:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Main Features:" -msgstr "Características principais:" +msgstr "Características Principais:" #: editor/editor_feature_profile.cpp msgid "Nodes and Classes:" @@ -1968,12 +1955,10 @@ msgid "Current Profile:" msgstr "Perfil Atual:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Create Profile" msgstr "Criar Perfil" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Remove Profile" msgstr "Remover Perfil" @@ -1995,17 +1980,14 @@ msgid "Export" msgstr "Exportação" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Configure Selected Profile:" msgstr "Configurar Perfil Selecionado:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Extra Options:" msgstr "Opções Extra:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Create or import a profile to edit available classes and properties." msgstr "" "Criar ou importar um perfil para editar as classes e propriedades " @@ -2036,7 +2018,6 @@ msgid "Select Current Folder" msgstr "Selecionar a Pasta Atual" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "File exists, overwrite?" msgstr "O arquivo já existe. Sobrescrever?" @@ -2199,7 +2180,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "(Re)Importando Assets" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "Início" @@ -2712,6 +2693,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "Cena atual não salva. Abrir mesmo assim?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "Desfazer" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "Refazer" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "Não foi possível recarregar a cena pois nunca foi salva." @@ -3068,7 +3075,6 @@ msgid "Orphan Resource Explorer..." msgstr "Explorador de Recursos Órfãos..." #: editor/editor_node.cpp -#, fuzzy msgid "Reload Current Project" msgstr "Recarregar o projeto atual" @@ -3230,12 +3236,10 @@ msgid "Help" msgstr "Ajuda" #: editor/editor_node.cpp -#, fuzzy msgid "Online Documentation" msgstr "Documentação Online" #: editor/editor_node.cpp -#, fuzzy msgid "Questions & Answers" msgstr "Perguntas & Respostas" @@ -3244,9 +3248,8 @@ msgid "Report a Bug" msgstr "Reportar bug" #: editor/editor_node.cpp -#, fuzzy msgid "Suggest a Feature" -msgstr "Sugira um recurso" +msgstr "Sugira uma funcionalidade" #: editor/editor_node.cpp msgid "Send Docs Feedback" @@ -3257,9 +3260,8 @@ msgid "Community" msgstr "Comunidade" #: editor/editor_node.cpp -#, fuzzy msgid "About Godot" -msgstr "Sobre Godot" +msgstr "Sobre o Godot" #: editor/editor_node.cpp msgid "Support Godot Development" @@ -3353,7 +3355,6 @@ msgid "Manage Templates" msgstr "Gerenciar Templates" #: editor/editor_node.cpp -#, fuzzy msgid "Install from file" msgstr "Instalar do arquivo" @@ -3408,6 +3409,11 @@ msgid "Merge With Existing" msgstr "Fundir Com Existente" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Alterar Transformação da Animação" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "Abrir e Rodar um Script" @@ -3479,7 +3485,6 @@ msgid "No sub-resources found." msgstr "Nenhum sub-recurso encontrado." #: editor/editor_path.cpp -#, fuzzy msgid "Open a list of sub-resources." msgstr "Abra uma lista de sub-recursos." @@ -3508,12 +3513,10 @@ msgid "Update" msgstr "Atualizar" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Version" msgstr "Versão" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Author" msgstr "Autor" @@ -3663,6 +3666,10 @@ msgstr "" "O recurso selecionado (%s) não corresponde ao tipo esperado para essa " "propriedade (%s)." +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "Tornar Único" @@ -3682,9 +3689,8 @@ msgid "Paste" msgstr "Colar" #: editor/editor_resource_picker.cpp editor/property_editor.cpp -#, fuzzy msgid "Convert to %s" -msgstr "Converter Para %s" +msgstr "Converter para %s" #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "New %s" @@ -3734,11 +3740,10 @@ msgid "Did you forget the '_run' method?" msgstr "Você esqueceu o método '_run'?" #: editor/editor_spin_slider.cpp -#, fuzzy msgid "Hold %s to round to integers. Hold Shift for more precise changes." msgstr "" -"Segure Ctrl para arredondar para números inteiros. Segure Shift para aplicar " -"mudanças mais precisas." +"Segure %s para arredondar para inteiros. Segure Shift para aplicar mudanças " +"mais precisas." #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" @@ -3758,11 +3763,11 @@ msgstr "Importar a Partir do Nó:" #: editor/export_template_manager.cpp msgid "Open the folder containing these templates." -msgstr "" +msgstr "Abrir a pasta contendo esses modelos." #: editor/export_template_manager.cpp msgid "Uninstall these templates." -msgstr "" +msgstr "Desinstalar esses modelos." #: editor/export_template_manager.cpp #, fuzzy @@ -3776,7 +3781,7 @@ msgstr "Reconectando, por favor aguarde." #: editor/export_template_manager.cpp msgid "Starting the download..." -msgstr "" +msgstr "Iniciando o download..." #: editor/export_template_manager.cpp msgid "Error requesting URL:" @@ -3788,9 +3793,8 @@ msgid "Connecting to the mirror..." msgstr "Conectando..." #: editor/export_template_manager.cpp -#, fuzzy msgid "Can't resolve the requested address." -msgstr "Não foi possível resolver o hostname:" +msgstr "Não é possível resolver o endereço solicitado." #: editor/export_template_manager.cpp #, fuzzy @@ -3808,18 +3812,16 @@ msgid "Request failed." msgstr "A solicitação falhou." #: editor/export_template_manager.cpp -#, fuzzy msgid "Request ended up in a redirect loop." -msgstr "A solicitação falhou, muitos redirecionamentos" +msgstr "A solicitação acabou em um loop de redirecionamento." #: editor/export_template_manager.cpp -#, fuzzy msgid "Request failed:" -msgstr "A solicitação falhou." +msgstr "Falha na solicitação:" #: editor/export_template_manager.cpp msgid "Download complete; extracting templates..." -msgstr "" +msgstr "Download completo; extraindo modelos..." #: editor/export_template_manager.cpp msgid "Cannot remove temporary file:" @@ -3846,7 +3848,7 @@ msgstr "" #: editor/export_template_manager.cpp msgid "Best available mirror" -msgstr "" +msgstr "Melhor espelho disponível" #: editor/export_template_manager.cpp msgid "" @@ -3899,24 +3901,24 @@ msgid "SSL Handshake Error" msgstr "Erro SSL Handshake" #: editor/export_template_manager.cpp -#, fuzzy msgid "Can't open the export templates file." -msgstr "Não se pôde abrir zip dos modelos de exportação." +msgstr "Não foi possível abrir o arquivo de modelos de exportação." #: editor/export_template_manager.cpp -#, fuzzy msgid "Invalid version.txt format inside the export templates file: %s." -msgstr "Formato do version.txt inválido dentro de templates: %s." +msgstr "" +"Formato de version.txt inválido dentro do arquivo de modelos de exportação: " +"%s." #: editor/export_template_manager.cpp -#, fuzzy msgid "No version.txt found inside the export templates file." -msgstr "Não foi encontrado um version.txt dentro dos modelos." +msgstr "" +"Não foi possível encontrar um version.txt dentro do arquivo de modelos de " +"exportação." #: editor/export_template_manager.cpp -#, fuzzy msgid "Error creating path for extracting templates:" -msgstr "Erro ao criar caminho para modelos:" +msgstr "Erro ao criar caminho para extrair modelos:" #: editor/export_template_manager.cpp msgid "Extracting Export Templates" @@ -3946,10 +3948,13 @@ msgstr "Versão Atual:" #: editor/export_template_manager.cpp msgid "Export templates are missing. Download them or install from a file." msgstr "" +"Os modelos de exportação estão faltando. Baixe-os ou instale a partir de um " +"arquivo." #: editor/export_template_manager.cpp msgid "Export templates are installed and ready to be used." msgstr "" +"As exportações de modelos estão instaladas e prontas para serem usadas." #: editor/export_template_manager.cpp #, fuzzy @@ -3958,7 +3963,7 @@ msgstr "Abrir um arquivo" #: editor/export_template_manager.cpp msgid "Open the folder containing installed templates for the current version." -msgstr "" +msgstr "Abre a pasta contendo modelos instalados para a versão atual." #: editor/export_template_manager.cpp msgid "Uninstall" @@ -3986,13 +3991,15 @@ msgstr "Copiar Erro" #: editor/export_template_manager.cpp msgid "Download and Install" -msgstr "" +msgstr "Baixar e Instalar" #: editor/export_template_manager.cpp msgid "" "Download and install templates for the current version from the best " "possible mirror." msgstr "" +"Baixa e instala modelos para a versão atual a partir do melhor espelho " +"possível." #: editor/export_template_manager.cpp msgid "Official export templates aren't available for development builds." @@ -4043,6 +4050,8 @@ msgid "" "The templates will continue to download.\n" "You may experience a short editor freeze when they finish." msgstr "" +"Os modelos continuarão sendo baixados.\n" +"Você pode experienciar um pequeno congelamento no editor ao terminar." #: editor/filesystem_dock.cpp msgid "Favorites" @@ -4230,7 +4239,7 @@ msgstr "Renomear..." #: editor/filesystem_dock.cpp msgid "Focus the search box" -msgstr "" +msgstr "Focar a caixa de pesquisa" #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -5598,7 +5607,7 @@ msgstr "Todos" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Search templates, projects, and demos" -msgstr "" +msgstr "Pesquisar modelos, projetos e demonstrações" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Search assets (excluding templates, projects, and demos)" @@ -5646,7 +5655,7 @@ msgstr "Arquivo ZIP de Assets" #: editor/plugins/audio_stream_editor_plugin.cpp msgid "Audio Preview Play/Pause" -msgstr "" +msgstr "Tocar/Pausar Pré-visualização do Áudio" #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "" @@ -5806,6 +5815,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "Mover CanvaItem \"%s\" para (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "Fixar Seleção" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Grupo" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6755,7 +6776,13 @@ msgid "Remove Selected Item" msgstr "Remover Item Selecionado" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +#, fuzzy +msgid "Import from Scene (Ignore Transforms)" +msgstr "Importar da Cena" + +#: editor/plugins/mesh_library_editor_plugin.cpp +#, fuzzy +msgid "Import from Scene (Apply Transforms)" msgstr "Importar da Cena" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7354,6 +7381,16 @@ msgstr "Gerar Contagem de Pontos:" msgid "Flip Portal" msgstr "Inverter Horizontalmente" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "Limpar Transformação" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Criar Nó" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "AnimationTree não tem caminho definido para um AnimationPlayer" @@ -7855,12 +7892,14 @@ msgid "Skeleton2D" msgstr "Esqueleto2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "Faça Resto Pose (De Ossos)" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "Definir os ossos para descansar Pose" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "Definir os ossos para descansar Pose" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "Sobrescrever Cena Existente" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7887,6 +7926,71 @@ msgid "Perspective" msgstr "Perspectiva" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Perspective" +msgstr "Perspectiva" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "Perspectiva" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Left Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Perspective" +msgstr "Perspectiva" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Perspective" +msgstr "Perspectiva" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Orthogonal" +msgstr "Ortogonal" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Perspective" +msgstr "Perspectiva" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "Transformação Abortada." @@ -7924,9 +8028,8 @@ msgid "Translate" msgstr "Translação:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Scale" -msgstr "Escala:" +msgstr "Scale" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scaling: " @@ -7958,9 +8061,8 @@ msgid "Yaw:" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Size:" -msgstr "Tamanho: " +msgstr "Tamanho:" #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy @@ -8005,42 +8107,22 @@ msgid "Bottom View." msgstr "Visão inferior." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "Baixo" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "Visão Esquerda." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "Esquerda" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "Visão Direita." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "Direita" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "Visão Frontal." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "Frente" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "Visão Traseira." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "Traseira" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "Alinhar Transformação com a Vista" @@ -8316,6 +8398,11 @@ msgid "View Portal Culling" msgstr "Configurações da Viewport" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "Configurações da Viewport" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "Configurações..." @@ -8381,8 +8468,9 @@ msgid "Post" msgstr "Pós" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" -msgstr "Coisa sem nome" +#, fuzzy +msgid "Unnamed Gizmo" +msgstr "Projeto Sem Nome" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Mesh2D" @@ -12570,6 +12658,16 @@ msgstr "Definir Posição do Ponto da Curva" msgid "Set Portal Point Position" msgstr "Definir Posição do Ponto da Curva" +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Radius" +msgstr "Alterar o Raio da Forma do Cilindro" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr "Colocar a Curva na Posição" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "Alterar Raio do Cilindro" @@ -12855,6 +12953,11 @@ msgstr "Traçando mapas de luz" msgid "Class name can't be a reserved keyword" msgstr "Nome da classe não pode ser uma palavra reservada" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "Seleção de preenchimento" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "Fim da pilha de rastreamento de exceção interna" @@ -13342,76 +13445,76 @@ msgstr "Buscar VisualScript" msgid "Get %s" msgstr "Receba %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "Nome do pacote está faltando." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "Seguimentos de pacote necessitam ser de tamanho diferente de zero." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" "O caractere '%s' não é permitido em nomes de pacotes de aplicações Android." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" "Um dígito não pode ser o primeiro caractere em um seguimento de pacote." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" "O caractere '%s' não pode ser o primeiro caractere em um segmento de pacote." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "O pacote deve ter pelo menos um separador '.'." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "Selecione um dispositivo da lista" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting APK..." msgstr "Exportando tudo" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Uninstalling..." msgstr "Desinstalar" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Installing to device, please wait..." msgstr "Carregando, por favor aguarde." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not install to device: %s" msgstr "Não foi possível instanciar cena!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Running on device..." msgstr "Rodando Script Personalizado..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not execute on device." msgstr "Não foi possível criar a pasta." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "Não foi possível encontrar a ferramenta 'apksigner'." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -13419,7 +13522,7 @@ msgstr "" "O modelo de compilação do Android não foi instalado no projeto. Instale " "através do menu Projeto." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." @@ -13427,13 +13530,13 @@ msgstr "" "As configurações Debug Keystore, Debug User E Debug Password devem ser " "configuradas OU nenhuma delas." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" "Porta-chaves de depuração não configurado nas Configurações do Editor e nem " "na predefinição." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." @@ -13441,54 +13544,54 @@ msgstr "" "As configurações de Release Keystore, Release User AND Release Password " "devem ser definidas OU nenhuma delas." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" "Keystore de liberação incorretamente configurada na predefinição de " "exportação." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "Um caminho Android SDK é necessário nas Configurações do Editor." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "Caminho do Android SDK está inválido para Configurações do Editor." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "Diretório 'ferramentas-da-plataforma' ausente!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" "Não foi possível encontrar o comando adb nas ferramentas do Android SDK." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" "Por favor, verifique o caminho do Android SDK especificado nas Configurações " "do Editor." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "Diretório 'ferramentas-da-plataforma' está faltando !" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" "Não foi possível encontrar o comando apksigner nas ferramentas de build do " "Android SDK." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "Chave pública inválida para expansão do APK." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "Nome de pacote inválido:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" @@ -13496,40 +13599,25 @@ msgstr "" "Módulo \"GodotPaymentV3\" inválido incluido na configuração de projeto " "\"android/modules\" (alterado em Godot 3.2.2).\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" "\"Usar Compilação Customizada\" precisa estar ativo para ser possível " "utilizar plugins." -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" -"\"Degrees Of Freedom\" só é válido quando o \"Xr Mode\" é \"Oculus Mobile VR" -"\"." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" "\"Hand Tracking\" só é válido quando o \"Xr Mode\" é \"Oculus Mobile VR\"." -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" -"\"Focus Awareness\" só é válido quando o \"Oculus Mobile VR\" está no \"Xr " -"Mode\"." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" "\"Exportar AAB\" só é válido quando \"Usar Compilação Customizada\" está " "habilitado." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13537,57 +13625,56 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Signing release %s..." msgstr "" "Escaneando arquivos,\n" "Por favor aguarde..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not find keystore, unable to export." msgstr "Não foi possível abrir o modelo para exportar:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Verifying %s..." msgstr "Adicionando %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" -msgstr "Exportando tudo" +msgstr "Exportando para Android" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "Nome de arquivo invalido! Android App Bunlde requer a extensão *.aab." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "A expansão APK não é compatível com o Android App Bundle." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "Nome de arquivo inválido! Android APK requer a extensão *.apk." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." @@ -13596,7 +13683,7 @@ msgstr "" "nenhuma informação de versão para ele existe. Por favor, reinstale pelo menu " "'Projeto'." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13608,26 +13695,26 @@ msgstr "" " Versão do Godot: %s\n" "Por favor reinstale o modelo de compilação do Android pelo menu 'Projeto'." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp -#, fuzzy +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" -msgstr "Não foi possível encontrar project.godot no caminho do projeto." +msgstr "" +"Não foi possível exportar os arquivos do projeto ao projeto do gradle\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not write expansion package file!" msgstr "Não foi possível escrever o arquivo:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "Construindo Projeto Android (gradle)" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." @@ -13636,11 +13723,11 @@ msgstr "" "Alternativamente, visite docs.godotengine.org para ver a documentação de " "compilação do Android." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "Movendo saída" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." @@ -13648,24 +13735,24 @@ msgstr "" "Não foi possível copiar e renomear o arquivo de exportação, verifique o " "diretório do projeto gradle por saídas." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "Animação não encontrada: '%s'" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Creating APK..." msgstr "Criando contornos..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" "Could not find template APK to export:\n" "%s" msgstr "Não foi possível abrir o modelo para exportar:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13673,21 +13760,21 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Adding files..." msgstr "Adicionando %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files" msgstr "Não foi possível escrever o arquivo:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -14225,6 +14312,14 @@ msgstr "" "NavigationMeshInstance deve ser filho ou neto de um nó Navigation. Ele " "apenas fornece dados de navegação." +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14552,6 +14647,14 @@ msgstr "Deve usar uma extensão válida." msgid "Enable grid minimap." msgstr "Ativar minimapa de grade." +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14606,6 +14709,10 @@ msgid "Viewport size must be greater than 0 to render anything." msgstr "" "O tamanho da Viewport deve ser maior do que 0 para renderizar qualquer coisa." +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " @@ -14659,6 +14766,41 @@ msgstr "Atribuição à uniforme." msgid "Constants cannot be modified." msgstr "Constantes não podem serem modificadas." +#~ msgid "Make Rest Pose (From Bones)" +#~ msgstr "Faça Resto Pose (De Ossos)" + +#~ msgid "Bottom" +#~ msgstr "Baixo" + +#~ msgid "Left" +#~ msgstr "Esquerda" + +#~ msgid "Right" +#~ msgstr "Direita" + +#~ msgid "Front" +#~ msgstr "Frente" + +#~ msgid "Rear" +#~ msgstr "Traseira" + +#~ msgid "Nameless gizmo" +#~ msgstr "Coisa sem nome" + +#~ msgid "" +#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile " +#~ "VR\"." +#~ msgstr "" +#~ "\"Degrees Of Freedom\" só é válido quando o \"Xr Mode\" é \"Oculus Mobile " +#~ "VR\"." + +#~ msgid "" +#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" +#~ "\"." +#~ msgstr "" +#~ "\"Focus Awareness\" só é válido quando o \"Oculus Mobile VR\" está no " +#~ "\"Xr Mode\"." + #~ msgid "Package Contents:" #~ msgstr "Conteúdo:" @@ -16604,9 +16746,6 @@ msgstr "Constantes não podem serem modificadas." #~ msgid "Images:" #~ msgstr "Imagens:" -#~ msgid "Group" -#~ msgstr "Grupo" - #~ msgid "Sample Conversion Mode: (.wav files):" #~ msgstr "Modo de Conversão de Amostras (arquivos .wav):" @@ -16716,9 +16855,6 @@ msgstr "Constantes não podem serem modificadas." #~ msgid "Deploy File Server Clients" #~ msgstr "Instalar Clientes do Servidor de Arquivos" -#~ msgid "Overwrite Existing Scene" -#~ msgstr "Sobrescrever Cena Existente" - #~ msgid "Overwrite Existing, Keep Materials" #~ msgstr "Sobrescrever Existente, Manter Materiais" diff --git a/editor/translations/ro.po b/editor/translations/ro.po index 2b1626bfe2..ecf041058c 100644 --- a/editor/translations/ro.po +++ b/editor/translations/ro.po @@ -1036,7 +1036,7 @@ msgstr "" msgid "Dependencies" msgstr "Dependențe" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Resursă" @@ -1708,13 +1708,13 @@ msgstr "" "Activați „Import Etc” în Setările de proiect sau dezactivați „Driver " "Fallback Enabled”." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "Fișierul șablon de depanare personalizat nu a fost găsit." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2101,7 +2101,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "(Re)Importând Asset-uri" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "Sus" @@ -2609,6 +2609,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "Scena curentă nu este salvată. Deschizi oricum?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "Revenire" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "Reîntoarcere" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "Nu pot reîncărca o scenă care nu a fost salvată niciodată." @@ -3295,6 +3321,11 @@ msgid "Merge With Existing" msgstr "Contopește Cu Existentul" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Anim Schimbare transformare" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "Deschide și Execută un Script" @@ -3543,6 +3574,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "" @@ -5701,6 +5736,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "Editează ObiectulPânză" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "Selectează" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Grupuri" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6672,7 +6719,13 @@ msgid "Remove Selected Item" msgstr "Elimină Obiectul Selectat" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +#, fuzzy +msgid "Import from Scene (Ignore Transforms)" +msgstr "Importă din Scenă" + +#: editor/plugins/mesh_library_editor_plugin.cpp +#, fuzzy +msgid "Import from Scene (Apply Transforms)" msgstr "Importă din Scenă" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7289,6 +7342,16 @@ msgstr "Număr de Puncte Generate:" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "Anim Schimbare transformare" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Creează Nod" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7810,12 +7873,14 @@ msgid "Skeleton2D" msgstr "Singleton (Unicat)" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "Încărcați Implicit" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "extindere:" #: editor/plugins/skeleton_editor_plugin.cpp #, fuzzy @@ -7844,6 +7909,61 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "Mod Rotație" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7960,42 +8080,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -8265,6 +8365,11 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "Editează Poligon" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "Setări ..." @@ -8330,7 +8435,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -12464,6 +12569,15 @@ msgstr "Setare poziție punct de curbă" msgid "Set Portal Point Position" msgstr "Setare poziție punct de curbă" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr "Setare Curbă În Poziție" + #: modules/csg/csg_gizmos.cpp #, fuzzy msgid "Change Cylinder Radius" @@ -12759,6 +12873,11 @@ msgstr "Se Genereaza Lightmaps" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "Toată selecția" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -13245,165 +13364,154 @@ msgstr "Curăță Scriptul" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "Selectează un dispozitiv din listă" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting APK..." msgstr "Exportare" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Uninstalling..." msgstr "Dezinstalează" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Installing to device, please wait..." msgstr "Se recuperează oglinzile, te rog așteaptă..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not install to device: %s" msgstr "Nu s-a putut porni subprocesul!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Running on device..." msgstr "Se Execută un Script Personalizat..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not execute on device." msgstr "Directorul nu a putut fi creat." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "Nume pachet nevalid:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13411,62 +13519,62 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Signing release %s..." msgstr "" "Se Scanează Fișierele,\n" "Te Rog Așteaptă..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Verifying %s..." msgstr "Se adaugă %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting for Android" msgstr "Exportare" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13474,56 +13582,56 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "Unelte Animație" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Creating APK..." msgstr "Crearea conturilor..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13531,21 +13639,21 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Adding files..." msgstr "Se adaugă %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files" msgstr "Nu s-a putut porni subprocesul!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -14008,6 +14116,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14300,6 +14416,14 @@ msgstr "Trebuie să utilizaţi o extensie valida." msgid "Enable grid minimap." msgstr "Activează minimapa in format grilă." +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14340,6 +14464,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/ru.po b/editor/translations/ru.po index 50d4484e4b..c402e80ff1 100644 --- a/editor/translations/ru.po +++ b/editor/translations/ru.po @@ -102,7 +102,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2021-08-10 21:40+0000\n" +"PO-Revision-Date: 2021-08-14 19:04+0000\n" "Last-Translator: Danil Alexeev <danil@alexeev.xyz>\n" "Language-Team: Russian <https://hosted.weblate.org/projects/godot-engine/" "godot/ru/>\n" @@ -462,15 +462,13 @@ msgstr "Вставить" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "node '%s'" -msgstr "Не удаётся открыть '%s'." +msgstr "узел «%s»" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "animation" -msgstr "Анимация" +msgstr "анимация" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." @@ -478,9 +476,8 @@ msgstr "AnimationPlayer не может анимировать сам себя, #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "property '%s'" -msgstr "Свойство «%s» не существует." +msgstr "свойство «%s»" #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -1118,7 +1115,7 @@ msgstr "" msgid "Dependencies" msgstr "Зависимости" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Ресурс" @@ -1773,13 +1770,13 @@ msgstr "" "Включите «Import Pvrtc» в Настройках проекта или отключите «Driver Fallback " "Enabled»." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "Пользовательский отладочный шаблон не найден." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2162,7 +2159,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "(Ре)Импортировать" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "Верх" @@ -2399,6 +2396,9 @@ msgid "" "Update Continuously is enabled, which can increase power usage. Click to " "disable it." msgstr "" +"Вращается при перерисовке окна редактора.\n" +"Включена опция «Обновлять непрерывно», которая может увеличить " +"энергопотребление. Щёлкните, чтобы отключить её." #: editor/editor_node.cpp msgid "Spins when the editor window redraws." @@ -2676,6 +2676,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "Текущая сцена не сохранена. Открыть в любом случае?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "Отменить" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "Повторить" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "Не возможно загрузить сцену, которая не была сохранена." @@ -3361,6 +3387,11 @@ msgid "Merge With Existing" msgstr "Объединить с существующей" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Изменить положение" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "Открыть и запустить скрипт" @@ -3617,6 +3648,10 @@ msgstr "" "Выбранные ресурсы (%s) не соответствуют типам, ожидаемым для данного " "свойства (%s)." +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "Сделать уникальным" @@ -3909,14 +3944,12 @@ msgid "Download from:" msgstr "Загрузить из:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Open in Web Browser" -msgstr "Запустить в браузере" +msgstr "Открыть в веб-браузере" #: editor/export_template_manager.cpp -#, fuzzy msgid "Copy Mirror URL" -msgstr "Копировать ошибку" +msgstr "Копировать URL зеркала" #: editor/export_template_manager.cpp msgid "Download and Install" @@ -5720,6 +5753,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "Передвинуть CanvasItem «%s» в (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "Заблокировать выбранное" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Группа" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6658,7 +6703,13 @@ msgid "Remove Selected Item" msgstr "Удалить выбранный элемент" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +#, fuzzy +msgid "Import from Scene (Ignore Transforms)" +msgstr "Импортировать из сцены" + +#: editor/plugins/mesh_library_editor_plugin.cpp +#, fuzzy +msgid "Import from Scene (Apply Transforms)" msgstr "Импортировать из сцены" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7249,6 +7300,16 @@ msgstr "Генерировать точки" msgid "Flip Portal" msgstr "Перевернуть портал" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "Очистить преобразование" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Создать узел" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "AnimationTree - не задан путь к AnimationPlayer" @@ -7753,12 +7814,14 @@ msgid "Skeleton2D" msgstr "2D скелет" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "Сделать позу покоя (из костей)" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "Установить кости в позу покоя" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "Установить кости в позу покоя" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "Перезаписать существующую сцену" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7785,6 +7848,71 @@ msgid "Perspective" msgstr "Перспективный" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Orthogonal" +msgstr "Ортогональный" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Perspective" +msgstr "Перспективный" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Orthogonal" +msgstr "Ортогональный" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "Перспективный" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Left Orthogonal" +msgstr "Ортогональный" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Perspective" +msgstr "Перспективный" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Orthogonal" +msgstr "Ортогональный" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Orthogonal" +msgstr "Ортогональный" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Perspective" +msgstr "Перспективный" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Orthogonal" +msgstr "Ортогональный" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Perspective" +msgstr "Перспективный" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "Преобразование прервано." @@ -7892,42 +8020,22 @@ msgid "Bottom View." msgstr "Вид снизу." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "Низ" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "Вид слева." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "Лево" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "Вид справа." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "Право" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "Вид спереди." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "Перед" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "Вид сзади." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "Зад" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "Выровнять трансформации с видом" @@ -8200,6 +8308,11 @@ msgid "View Portal Culling" msgstr "Отображать portal culling" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "Отображать portal culling" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "Настройки..." @@ -8265,8 +8378,9 @@ msgid "Post" msgstr "После" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" -msgstr "Безымянный гизмо" +#, fuzzy +msgid "Unnamed Gizmo" +msgstr "Безымянный проект" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Mesh2D" @@ -8725,6 +8839,9 @@ msgid "" "Select a theme type from the list to edit its items.\n" "You can add a custom type or import a type with its items from another theme." msgstr "" +"Выберите тип темы из списка, чтобы отредактировать его элементы.\n" +"Вы можете добавить пользовательский тип или импортировать тип с его " +"элементами из другой темы." #: editor/plugins/theme_editor_plugin.cpp msgid "Remove All Color Items" @@ -8755,6 +8872,8 @@ msgid "" "This theme type is empty.\n" "Add more items to it manually or by importing from another theme." msgstr "" +"Этот тип темы пуст.\n" +"Добавьте в него элементы вручную или импортировав из другой темы." #: editor/plugins/theme_editor_plugin.cpp msgid "Add Color Item" @@ -12385,14 +12504,22 @@ msgid "Change Ray Shape Length" msgstr "Изменить длину луча" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Set Room Point Position" -msgstr "Установить положение точки кривой" +msgstr "Задать положение точки комнаты" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Set Portal Point Position" -msgstr "Установить положение точки кривой" +msgstr "Задать положение точки портала" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Radius" +msgstr "Изменить радиус цилиндра" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr "Установить позицию входа кривой" #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" @@ -12676,6 +12803,11 @@ msgstr "Построение карт освещения" msgid "Class name can't be a reserved keyword" msgstr "Имя класса не может быть зарезервированным ключевым словом" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "Заполнить выбранное" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "Конец трассировки внутреннего стека исключений" @@ -13159,74 +13291,74 @@ msgstr "Искать VisualScript" msgid "Get %s" msgstr "Получить %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "Отсутствует имя пакета." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "Части пакета не могут быть пустыми." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "Символ «%s» не разрешён в имени пакета Android-приложения." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "Число не может быть первым символом в части пакета." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "Символ «%s» не может стоять первым в сегменте пакета." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "Пакет должен иметь хотя бы один разделитель «.»." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "Выберите устройство из списка" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "Выполняется на %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting APK..." msgstr "Экспорт APK..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Uninstalling..." msgstr "Удаление..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Installing to device, please wait..." msgstr "Установка на устройство, пожалуйста, ждите..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" msgstr "Не удалось установить на устройство: %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "Запуск на устройстве..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not execute on device." msgstr "Не удалось выполнить на устройстве." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "Не удалось найти инструмент «apksigner»." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" "Шаблон сборки Android не установлен в проекте. Установите его в меню проекта." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." @@ -13234,13 +13366,13 @@ msgstr "" "ЛИБО должны быть заданы настройки Debug Keystore, Debug User И Debug " "Password, ЛИБО ни одна из них." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" "Отладочное хранилище ключей не настроено ни в настройках редактора, ни в " "предустановках." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." @@ -13248,50 +13380,50 @@ msgstr "" "ЛИБО должны быть заданы настройки Release Keystore, Release User И Release " "Password, ЛИБО ни одна из них." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" "Хранилище ключей не настроено ни в настройках редактора, ни в предустановках." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" "Требуется указать действительный путь к Android SDK в Настройках редактора." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "Недействительный путь Android SDK в Настройках редактора." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "Директория «platform-tools» отсутствует!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "Не удалось найти команду adb в Android SDK platform-tools." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" "Пожалуйста, проверьте каталог Android SDK, указанный в Настройках редактора." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "Директория «build-tools» отсутствует!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "Не удалось найти команду apksigner в Android SDK build-tools." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "Недействительный публичный ключ для расширения APK." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "Недопустимое имя пакета:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" @@ -13299,39 +13431,24 @@ msgstr "" "Недопустимый модуль «GodotPaymentV3», включенный в настройку проекта " "«android/modules» (изменен в Godot 3.2.2).\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "«Use Custom Build» должен быть включен для использования плагинов." -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" -"«Степени свободы» действительны только тогда, когда «Xr Mode» - это «Oculus " -"Mobile VR»." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" "«Отслеживание рук» действует только тогда, когда «Xr Mode» - это «Oculus " "Mobile VR»." -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" -"«Осведомленность о фокусе» действительна только в том случае, если «Режим " -"Xr» - это «Oculus Mobile VR»." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" "«Export AAB» действителен только при включённой опции «Использовать " "пользовательскую сборку»." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13342,51 +13459,51 @@ msgstr "" "Пожалуйста, проверьте наличие программы в каталоге Android SDK build-tools.\n" "Результат %s не подписан." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "Подписание отладочного %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." msgstr "Подписание релиза %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "Не удалось найти хранилище ключей, невозможно экспортировать." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "«apksigner» завершился с ошибкой #%d" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." msgstr "Проверка %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "Проверка «apksigner» «%s» не удалась." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "Экспорт для Android" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "Неверное имя файла! Android App Bundle требует расширения *.aab." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "APK Expansion несовместимо с Android App Bundle." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "Неверное имя файла! Android APK требует расширения *.apk." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "Неподдерживаемый формат экспорта!\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." @@ -13394,7 +13511,7 @@ msgstr "" "Попытка сборки из пользовательского шаблона, но информации о версии для него " "не существует. Пожалуйста, переустановите из меню «Проект»." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13406,25 +13523,25 @@ msgstr "" " Версия Godot: %s\n" "Пожалуйста, переустановите шаблон сборки Android из меню «Проект»." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" "Невозможно перезаписать файлы res://android/build/res/*.xml с именем проекта" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "Не удалось экспортировать файлы проекта в проект gradle\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "Не удалось записать расширение файла пакета!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "Сборка проекта Android (gradle)" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." @@ -13433,11 +13550,11 @@ msgstr "" "Также посетите docs.godotengine.org для получения документации по сборке " "Android." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "Перемещение выходных данных" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." @@ -13445,15 +13562,15 @@ msgstr "" "Невозможно скопировать и переименовать файл экспорта, проверьте диекторию " "проекта gradle на наличие выходных данных." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package not found: %s" msgstr "Пакет не найден: %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." msgstr "Создание APK..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" @@ -13461,7 +13578,7 @@ msgstr "" "Не удалось найти шаблон APK для экспорта:\n" "%s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13472,19 +13589,19 @@ msgstr "" "Пожалуйста, создайте шаблон со всеми необходимыми библиотеками или снимите " "флажки с отсутствующих архитектур в пресете экспорта." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Adding files..." msgstr "Добавление файлов..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files" msgstr "Не удалось экспортировать файлы проекта" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "Выравнивание APK..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "Не удалось распаковать временный невыровненный APK." @@ -14021,6 +14138,14 @@ msgstr "" "NavigationMeshInstance должен быть дочерним или под-дочерним узлом " "Navigation. Он предоставляет только навигационные данные." +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14156,36 +14281,50 @@ msgid "" "RoomList path is invalid.\n" "Please check the RoomList branch has been assigned in the RoomManager." msgstr "" +"Путь к RoomList недействителен.\n" +"Пожалуйста, проверьте, назначена ли ветка RoomList в RoomManager." #: scene/3d/room_manager.cpp msgid "RoomList contains no Rooms, aborting." -msgstr "" +msgstr "RoomList не содержит комнат, отмена." #: scene/3d/room_manager.cpp msgid "Misnamed nodes detected, check output log for details. Aborting." msgstr "" +"Обнаружены неверно названные узлы, подробности смотрите в журнале вывода. " +"Отмена." #: scene/3d/room_manager.cpp msgid "Portal link room not found, check output log for details." msgstr "" +"Связанная с порталом комната не найдена, подробности смотрите в журнале " +"вывода." #: scene/3d/room_manager.cpp msgid "" "Portal autolink failed, check output log for details.\n" "Check the portal is facing outwards from the source room." msgstr "" +"Сбой автопривязки портала, проверьте журнал вывода для получения подробной " +"информации.\n" +"Проверьте, что портал обращен наружу от исходной комнаты." #: scene/3d/room_manager.cpp msgid "" "Room overlap detected, cameras may work incorrectly in overlapping area.\n" "Check output log for details." msgstr "" +"Обнаружено пересечение комнат, камеры могут работать некорректно в зоне " +"перекрытия.\n" +"Проверьте журнал вывода для получения подробной информации." #: scene/3d/room_manager.cpp msgid "" "Error calculating room bounds.\n" "Ensure all rooms contain geometry or manual bounds." msgstr "" +"Ошибка при вычислении границ комнаты.\n" +"Убедитесь, что все комнаты содержат геометрию или границы заданы вручную." #: scene/3d/soft_body.cpp msgid "This body will be ignored until you set a mesh." @@ -14351,6 +14490,14 @@ msgstr "Нужно использовать доступное расширен msgid "Enable grid minimap." msgstr "Включить миникарту сетки." +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14405,6 +14552,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "Размер окна просмотра должен быть больше 0 для рендеринга." +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " @@ -14461,6 +14612,41 @@ msgstr "Назначить форму." msgid "Constants cannot be modified." msgstr "Константы не могут быть изменены." +#~ msgid "Make Rest Pose (From Bones)" +#~ msgstr "Сделать позу покоя (из костей)" + +#~ msgid "Bottom" +#~ msgstr "Низ" + +#~ msgid "Left" +#~ msgstr "Лево" + +#~ msgid "Right" +#~ msgstr "Право" + +#~ msgid "Front" +#~ msgstr "Перед" + +#~ msgid "Rear" +#~ msgstr "Зад" + +#~ msgid "Nameless gizmo" +#~ msgstr "Безымянный гизмо" + +#~ msgid "" +#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile " +#~ "VR\"." +#~ msgstr "" +#~ "«Степени свободы» действительны только тогда, когда «Xr Mode» - это " +#~ "«Oculus Mobile VR»." + +#~ msgid "" +#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" +#~ "\"." +#~ msgstr "" +#~ "«Осведомленность о фокусе» действительна только в том случае, если «Режим " +#~ "Xr» - это «Oculus Mobile VR»." + #~ msgid "Package Contents:" #~ msgstr "Содержимое пакета:" @@ -16430,9 +16616,6 @@ msgstr "Константы не могут быть изменены." #~ msgid "Images:" #~ msgstr "Изображения:" -#~ msgid "Group" -#~ msgstr "Группа" - #~ msgid "Sample Conversion Mode: (.wav files):" #~ msgstr "Режим преобразования сэмплов (.wav файлы):" @@ -16556,9 +16739,6 @@ msgstr "Константы не могут быть изменены." #~ msgid "Deploy File Server Clients" #~ msgstr "Развернуть файловый сервер для клиентов" -#~ msgid "Overwrite Existing Scene" -#~ msgstr "Перезаписать существующую сцену" - #~ msgid "Overwrite Existing, Keep Materials" #~ msgstr "Перезаписать существующую сцену с сохранением материалов" diff --git a/editor/translations/si.po b/editor/translations/si.po index 595e0041a9..7ff9aee6fb 100644 --- a/editor/translations/si.po +++ b/editor/translations/si.po @@ -1018,7 +1018,7 @@ msgstr "" msgid "Dependencies" msgstr "" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "" @@ -1648,13 +1648,13 @@ msgid "" "Enabled'." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2026,7 +2026,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "" @@ -2505,6 +2505,30 @@ msgid "Current scene not saved. Open anyway?" msgstr "" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Undo: %s" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Redo: %s" +msgstr "" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "" @@ -3130,6 +3154,11 @@ msgid "Merge With Existing" msgstr "" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Anim පරිවර්තනය වෙනස් කරන්න" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "" @@ -3371,6 +3400,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "" @@ -5428,6 +5461,16 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Locked" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Grouped" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6339,7 +6382,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -6923,6 +6970,16 @@ msgstr "" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "Anim පරිවර්තනය වෙනස් කරන්න" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "යතුරු මකා දමන්න" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7418,11 +7475,11 @@ msgid "Skeleton2D" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" +msgid "Reset to Rest Pose" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" +msgid "Overwrite Rest Pose" msgstr "" #: editor/plugins/skeleton_editor_plugin.cpp @@ -7450,6 +7507,60 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7557,42 +7668,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -7854,6 +7945,10 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Occlusion Culling" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "" @@ -7919,7 +8014,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -11862,6 +11957,14 @@ msgstr "" msgid "Set Portal Point Position" msgstr "" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Position" +msgstr "" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12143,6 +12246,10 @@ msgstr "" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Build Solution" +msgstr "" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -12623,159 +12730,148 @@ msgstr "" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Uninstalling..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Installing to device, please wait..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not execute on device." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -12783,57 +12879,57 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -12841,54 +12937,54 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package not found: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -12896,19 +12992,19 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Adding files..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13358,6 +13454,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -13647,6 +13751,14 @@ msgstr "" msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13687,6 +13799,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/sk.po b/editor/translations/sk.po index 54736cff85..2395e28105 100644 --- a/editor/translations/sk.po +++ b/editor/translations/sk.po @@ -1025,7 +1025,7 @@ msgstr "" msgid "Dependencies" msgstr "Závislostí" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Prostriedok" @@ -1691,13 +1691,13 @@ msgstr "" "Povoľte 'Import Etc' v Nastaveniach Projektu, alebo vipnite 'Driver Fallback " "Enabled'." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "Vlastná debug šablóna sa nenašla." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2081,7 +2081,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "(Re)Importovanie Asset-ov" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "Top" @@ -2590,6 +2590,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "Aktuálna scéna sa neuložila. Chcete ju aj tak otvoriť?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "Späť" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "Prerobiť" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "Nemožno načítať scénu, ktorá nikdy nebola uložená." @@ -3274,6 +3300,11 @@ msgid "Merge With Existing" msgstr "Zlúčiť s existujúcim" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Anim Zmeniť Veľkosť" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "Otvoriť a vykonať skript" @@ -3529,6 +3560,10 @@ msgid "" msgstr "" "Vybraný prostriedok (%s) sa nezhoduje žiadnemu typu pre túto vlastnosť (%s)." +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "Spraviť Jedinečným" @@ -5659,6 +5694,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "Presunúť CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "Zamknúť Označené" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Skupiny" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6597,7 +6644,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7199,6 +7250,15 @@ msgstr "Generovaný Bodový Počet:" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Occluder Set Transform" +msgstr "" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Vytvoriť Node" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7716,12 +7776,14 @@ msgid "Skeleton2D" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "Obnoviť na východzie" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "Prepísať" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7748,6 +7810,61 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "Vľavo Dole" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7864,42 +7981,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp #, fuzzy msgid "Align Transform with View" msgstr "Všetky vybrané" @@ -8169,6 +8266,11 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "Signály:" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "" @@ -8234,7 +8336,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -12355,6 +12457,15 @@ msgstr "Všetky vybrané" msgid "Set Portal Point Position" msgstr "Všetky vybrané" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr "Všetky vybrané" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12649,6 +12760,11 @@ msgstr "Generovanie Lightmaps" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "Všetky vybrané" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -13142,166 +13258,155 @@ msgstr "Vložiť" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting APK..." msgstr "Export..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Uninstalling..." msgstr "Odinštalovať" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Installing to device, please wait..." msgstr "Načítavanie zrkadiel, prosím čakajte..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not install to device: %s" msgstr "Subprocess sa nedá spustiť!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Running on device..." msgstr "Spustiť Vlastný Script..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not execute on device." msgstr "Priečinok sa nepodarilo vytvoriť." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Invalid package name:" msgstr "Nesprávna veľkosť písma." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13309,61 +13414,61 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Signing release %s..." msgstr "" "Skenujem Súbory,\n" "Počkajte Prosím..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Verifying %s..." msgstr "Pridávanie %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13371,57 +13476,57 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not write expansion package file!" msgstr "Popis:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "Balíček Obsahu:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Creating APK..." msgstr "Pripájanie..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13429,21 +13534,21 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Adding files..." msgstr "Pridávanie %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files" msgstr "Popis:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13921,6 +14026,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14212,6 +14325,14 @@ msgstr "Musíte použiť platné rozšírenie." msgid "Enable grid minimap." msgstr "Povoliť Prichytávanie" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14252,6 +14373,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/sl.po b/editor/translations/sl.po index 725f88f0ab..d505ee913c 100644 --- a/editor/translations/sl.po +++ b/editor/translations/sl.po @@ -1081,7 +1081,7 @@ msgstr "" msgid "Dependencies" msgstr "Odvisnosti" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Viri" @@ -1741,14 +1741,14 @@ msgid "" "Enabled'." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Custom debug template not found." msgstr "Predloge ni mogoče najti:" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2159,7 +2159,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "Uvoz Dodatkov" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "Vrh" @@ -2685,6 +2685,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "Trenutna scena ni shranjena. Vseeno odprem?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "Razveljavi" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "Ponovi" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "Ni mogoče osvežiti scene, ki ni bila shranjena." @@ -3391,6 +3417,11 @@ msgid "Merge With Existing" msgstr "Spoji z Obstoječim" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Animacija Spremeni transformacijo" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "Odpri & Zaženi Skripto" @@ -3642,6 +3673,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "" @@ -5878,6 +5913,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "Uredi Platno Stvari" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "Izbira Orodja" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Skupine" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6847,7 +6894,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7455,6 +7506,16 @@ msgstr "Ustavi Točko" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "Preoblikovanje" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Izberi Gradnik" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7988,11 +8049,12 @@ msgid "Skeleton2D" msgstr "Posameznik" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "Naložite Prevzeto" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" +msgid "Overwrite Rest Pose" msgstr "" #: editor/plugins/skeleton_editor_plugin.cpp @@ -8022,6 +8084,61 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "Način Vrtenja" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -8137,42 +8254,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -8441,6 +8538,11 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "Uredi Poligon" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy msgid "Settings..." @@ -8507,7 +8609,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -12700,6 +12802,15 @@ msgstr "Nastavi Položaj Krivuljne Točke" msgid "Set Portal Point Position" msgstr "Nastavi Položaj Krivuljne Točke" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr "Nastavi Krivuljo na Položaj" + #: modules/csg/csg_gizmos.cpp #, fuzzy msgid "Change Cylinder Radius" @@ -12997,6 +13108,11 @@ msgstr "Ustvarjanje Svetlobnih Kart" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "Celotna izbira" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -13499,166 +13615,155 @@ msgstr "Odstrani Gradnik VizualnaSkripta" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "Izberite napravo s seznama" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting APK..." msgstr "Izvozi" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Uninstalling..." msgstr "Odstrani" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Installing to device, please wait..." msgstr "Pridobivanje virov, počakajte..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not install to device: %s" msgstr "Nemorem začeti podprocesa!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Running on device..." msgstr "Izvajanje Skripte Po Meri..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not execute on device." msgstr "Mape ni mogoče ustvariti." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Invalid package name:" msgstr "Neveljavno ime." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13666,62 +13771,62 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Signing release %s..." msgstr "" "Pregledovanje Datotek,\n" "Prosimo, Počakajte..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Verifying %s..." msgstr "Nastavitve Zaskočenja" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting for Android" msgstr "Izvozi" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13729,56 +13834,56 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "Animacijska Orodja" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Creating APK..." msgstr "Povezovanje..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13786,21 +13891,21 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Adding files..." msgstr "Filtriraj datoteke..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files" msgstr "Nemorem začeti podprocesa!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -14283,6 +14388,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14582,6 +14695,14 @@ msgstr "Uporabiti moraš valjavno razširitev." msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp #, fuzzy msgid "" @@ -14626,6 +14747,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/sq.po b/editor/translations/sq.po index ded08d5532..2cc63728a3 100644 --- a/editor/translations/sq.po +++ b/editor/translations/sq.po @@ -1020,7 +1020,7 @@ msgstr "" msgid "Dependencies" msgstr "Varësitë" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Resursi" @@ -1697,13 +1697,13 @@ msgstr "" "Lejo 'Import Etc' in Opsionet e Projektit, ose çaktivizo 'Driver Fallback " "Enabled'." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "Shablloni 'Custom debug' nuk u gjet." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2104,7 +2104,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "Duke (Ri)Importuar Asetet" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "Siper" @@ -2626,6 +2626,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "Skena aktuale nuk është ruajtur. Hap gjithsesi?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "Zhbëj" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "Ribëj" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "Nuk mund të ringarkojë një skenë që nuk është ruajtur më parë." @@ -3326,6 +3352,10 @@ msgid "Merge With Existing" msgstr "Bashko Me Ekzistuesin" #: editor/editor_node.cpp +msgid "Apply MeshInstance Transforms" +msgstr "" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "Hap & Fillo një Shkrim" @@ -3582,6 +3612,10 @@ msgstr "" "Resursi i zgjedhur (%s) nuk përputhet me ndonjë tip të pritur për këtë veti " "(%s)." +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "Bëje Unik" @@ -5718,6 +5752,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "Zgjidh" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Grupet" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6637,7 +6683,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7226,6 +7276,16 @@ msgstr "Fut një Pikë" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "Binari i Transformimeve 3D" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Fshi Nyjen" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7734,12 +7794,14 @@ msgid "Skeleton2D" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "Ngarko të Parazgjedhur" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "Mbishkruaj" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7766,6 +7828,60 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7878,42 +7994,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -8179,6 +8275,10 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Occlusion Culling" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy msgid "Settings..." @@ -8245,7 +8345,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -12301,6 +12401,14 @@ msgstr "" msgid "Set Portal Point Position" msgstr "" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Position" +msgstr "" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12590,6 +12698,10 @@ msgstr "Duke Gjeneruar Hartat e Dritës" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Build Solution" +msgstr "" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -13075,165 +13187,154 @@ msgstr "" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "Zgjidh paisjen nga lista" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting APK..." msgstr "Eksporto" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Uninstalling..." msgstr "Çinstalo" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Installing to device, please wait..." msgstr "Duke marrë pasqyrat, ju lutem prisni..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not install to device: %s" msgstr "Nuk mund të fillojë subprocess-in!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Running on device..." msgstr "Duke Ekzekutuar Shkrimin..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not execute on device." msgstr "Nuk mund të krijoj folderin." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13241,61 +13342,61 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Signing release %s..." msgstr "" "Duke Skanuar Skedarët,\n" "Ju Lutem Prisini..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Verifying %s..." msgstr "Duke u lidhur..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13303,56 +13404,56 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "Instaluesi Paketave" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Creating APK..." msgstr "Duke u lidhur..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13360,21 +13461,21 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Adding files..." msgstr "Filtro Skedarët..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files" msgstr "Nuk mund të fillojë subprocess-in!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13832,6 +13933,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14121,6 +14230,14 @@ msgstr "Duhet të perdorësh një shtesë të lejuar." msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14161,6 +14278,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/sr_Cyrl.po b/editor/translations/sr_Cyrl.po index 0a915e03bf..bb56bcbe29 100644 --- a/editor/translations/sr_Cyrl.po +++ b/editor/translations/sr_Cyrl.po @@ -1134,7 +1134,7 @@ msgstr "" msgid "Dependencies" msgstr "Зависности" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Ресурс" @@ -1824,14 +1824,14 @@ msgstr "" "Омогући 'Увоз Etc' у подешавањима пројекта, или онемогући 'Поваратак " "Управљача Омогућен'." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp #, fuzzy msgid "Custom debug template not found." msgstr "Шаблонска датотека није пронађена:\n" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp #, fuzzy @@ -2253,7 +2253,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "(Поновно) Увожење средстава" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "Врх" @@ -2803,6 +2803,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "Тренутна сцена није сачувана. Ипак отвори?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "Опозови" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "Поново уради" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "Не могу поново учитати сцену која није сачувана." @@ -3532,6 +3558,11 @@ msgid "Merge With Existing" msgstr "Споји са постојећим" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Промени положај" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "Отвори и покрени скриптицу" @@ -3812,6 +3843,10 @@ msgstr "" "Одабрани ресурс (%s) не одговара ни једној очекиваној врсти за ову особину " "(%s)." +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp #, fuzzy msgid "Make Unique" @@ -6144,6 +6179,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "Уреди CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "Закључај одабрано" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Групе" + +#: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy msgid "" "Children of containers have their anchors and margins values overridden by " @@ -7190,7 +7237,13 @@ msgid "Remove Selected Item" msgstr "Обриши одабрану ствар" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +#, fuzzy +msgid "Import from Scene (Ignore Transforms)" +msgstr "Увези из сцене" + +#: editor/plugins/mesh_library_editor_plugin.cpp +#, fuzzy +msgid "Import from Scene (Apply Transforms)" msgstr "Увези из сцене" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7834,6 +7887,16 @@ msgstr "Број генерисаних тачака:" msgid "Flip Portal" msgstr "Обрни Хоризонтално" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "Очисти Трансформацију" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Направи чвор" + #: editor/plugins/root_motion_editor_plugin.cpp #, fuzzy msgid "AnimationTree has no path set to an AnimationPlayer" @@ -8399,13 +8462,13 @@ msgstr "Синглетон2Д" #: editor/plugins/skeleton_2d_editor_plugin.cpp #, fuzzy -msgid "Make Rest Pose (From Bones)" -msgstr "Направи Одмор Позу(од Костију)" +msgid "Reset to Rest Pose" +msgstr "Постави Коске у Одмор Позу" #: editor/plugins/skeleton_2d_editor_plugin.cpp #, fuzzy -msgid "Set Bones to Rest Pose" -msgstr "Постави Коске у Одмор Позу" +msgid "Overwrite Rest Pose" +msgstr "Препиши" #: editor/plugins/skeleton_editor_plugin.cpp #, fuzzy @@ -8436,6 +8499,71 @@ msgid "Perspective" msgstr "Перспективна пројекција" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Orthogonal" +msgstr "Ортогонална пројекција" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Perspective" +msgstr "Перспективна пројекција" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Orthogonal" +msgstr "Ортогонална пројекција" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "Перспективна пројекција" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Left Orthogonal" +msgstr "Ортогонална пројекција" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Perspective" +msgstr "Перспективна пројекција" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Orthogonal" +msgstr "Ортогонална пројекција" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Orthogonal" +msgstr "Ортогонална пројекција" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Perspective" +msgstr "Перспективна пројекција" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Orthogonal" +msgstr "Ортогонална пројекција" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Perspective" +msgstr "Перспективна пројекција" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "Трансформација прекинута." @@ -8555,42 +8683,22 @@ msgid "Bottom View." msgstr "Поглед одоздо." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "Доле" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "Леви поглед." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "Лево" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "Десни поглед." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "десно" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "Поглед спреда." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "Испред" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "Бочни поглед." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "Бок" - -#: editor/plugins/spatial_editor_plugin.cpp #, fuzzy msgid "Align Transform with View" msgstr "Поравнавање са погледом" @@ -8873,6 +8981,11 @@ msgid "View Portal Culling" msgstr "Поставке прозора" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "Поставке прозора" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy msgid "Settings..." @@ -8941,8 +9054,8 @@ msgstr "После" #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy -msgid "Nameless gizmo" -msgstr "Безимена ручка" +msgid "Unnamed Gizmo" +msgstr "Неименован Пројекат" #: editor/plugins/sprite_editor_plugin.cpp #, fuzzy @@ -13809,6 +13922,16 @@ msgstr "Постави позицију тачке криве" msgid "Set Portal Point Position" msgstr "Постави позицију тачке криве" +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Radius" +msgstr "Промени Опсег Цилиндар Облика" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr "Постави почетну позицију криве" + #: modules/csg/csg_gizmos.cpp #, fuzzy msgid "Change Cylinder Radius" @@ -14155,6 +14278,11 @@ msgstr "Скована Светла:" msgid "Class name can't be a reserved keyword" msgstr "Има Класе не може бити резервисана кључна реч" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "Испуни одабрано" + #: modules/mono/mono_gd/gd_mono_utils.cpp #, fuzzy msgid "End of inner exception stack trace" @@ -14685,79 +14813,79 @@ msgstr "Потражи VisualScript" msgid "Get %s" msgstr "Повуци %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package name is missing." msgstr "Недостаје име паковања." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package segments must be of non-zero length." msgstr "Одломци паковања не могу бити нулте дужине." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "The character '%s' is not allowed in Android application package names." msgstr "Карактер '%s' није дозвољен у именима паковања Android апликације." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "A digit cannot be the first character in a package segment." msgstr "Цифра не може бити први карактер у одломку паковања." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "The character '%s' cannot be the first character in a package segment." msgstr "Карактер '%s' не може бити први карактер у одломку паковања." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "The package must have at least one '.' separator." msgstr "Паковање мора имати бар један '.' раздвојник." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "Одабери уређај са листе" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting APK..." msgstr "Извоз" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Uninstalling..." msgstr "Деинсталирај" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Installing to device, please wait..." msgstr "Прихватам одредишта, молим сачекајте..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not install to device: %s" msgstr "Не могу покренути подпроцес!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Running on device..." msgstr "Обрађивање скриптице..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not execute on device." msgstr "Неуспех при прављењу директоријума." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" "Android build template not installed in the project. Install it from the " @@ -14766,107 +14894,96 @@ msgstr "" "Android нацрт изградње није инсталиран у пројекат. Инсталирај га из Пројекат " "менија." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" "Сладиште кључева Разгрешеника није подешено у Подешавањима Уредника ни у " "поставкама." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Release keystore incorrectly configured in the export preset." msgstr "" "Сладиште кључева Разгрешеника није подешено у Подешавањима Уредника ни у " "поставкама." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "A valid Android SDK path is required in Editor Settings." msgstr "" "Неважећа Android SDK путања за произвољну изградњу у Подешавањима Уредника." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Invalid Android SDK path in Editor Settings." msgstr "" "Неважећа Android SDK путања за произвољну изградњу у Подешавањима Уредника." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" "Неважећа Android SDK путања за произвољну изградњу у Подешавањима Уредника." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Invalid public key for APK expansion." msgstr "Неважећи јавни кључ за АПК проширење." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Invalid package name:" msgstr "Неважеће име паковања:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -14874,57 +14991,57 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Signing release %s..." msgstr "" "Скенирање датотека,\n" "Молим сачекајте..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not find keystore, unable to export." msgstr "Неуспешно отварање нацрта за извоз:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Verifying %s..." msgstr "Додавање %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting for Android" msgstr "Извоз" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" "Trying to build from a custom built template, but no version info for it " @@ -14933,7 +15050,7 @@ msgstr "" "Покушај изградње за произвољни нацрт изградње, али не постоји инфо о " "верзији. Молимо реинсталирај из \"Пројекат\" менија." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" "Android build version mismatch:\n" @@ -14946,27 +15063,27 @@ msgstr "" " Годот Верзија: %s\n" "Молимо реинсталирајте Android нацрт изградње из \"Пројекат\" менија." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files to gradle project\n" msgstr "Неуспешна измена project.godot-а у путањи пројекта." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not write expansion package file!" msgstr "Неуспело уписивање фајла:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Building Android Project (gradle)" msgstr "Изградња Android Пројекта (gradle)" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" "Building of Android project failed, check output for the error.\n" @@ -14975,34 +15092,34 @@ msgstr "" "Изградња Android пројекта неуспешна, провери излаз за грешке.\n" "Алтернативно посети docs.godotengine.org за Android документацију изградње." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "Анимација није нађена: '%s'" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Creating APK..." msgstr "Прављење контура..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" "Could not find template APK to export:\n" "%s" msgstr "Неуспешно отварање нацрта за извоз:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -15010,21 +15127,21 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Adding files..." msgstr "Додавање %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files" msgstr "Неуспело уписивање фајла:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -15625,6 +15742,14 @@ msgstr "" "НавМрежнаИнстанца мора бити дете или прадете Навигационог чвора. Само " "обезбећује навигационе податке." +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp #, fuzzy msgid "" @@ -15976,6 +16101,14 @@ msgstr "Мора се користити важећа екстензија." msgid "Enable grid minimap." msgstr "Укључи лепљење" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp #, fuzzy msgid "" @@ -16036,6 +16169,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "Величина Viewport-а мора бити већа од 0 да би се нешто исцртало." +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " @@ -16094,6 +16231,29 @@ msgid "Constants cannot be modified." msgstr "Константе није могуће мењати." #, fuzzy +#~ msgid "Make Rest Pose (From Bones)" +#~ msgstr "Направи Одмор Позу(од Костију)" + +#~ msgid "Bottom" +#~ msgstr "Доле" + +#~ msgid "Left" +#~ msgstr "Лево" + +#~ msgid "Right" +#~ msgstr "десно" + +#~ msgid "Front" +#~ msgstr "Испред" + +#~ msgid "Rear" +#~ msgstr "Бок" + +#, fuzzy +#~ msgid "Nameless gizmo" +#~ msgstr "Безимена ручка" + +#, fuzzy #~ msgid "Package Contents:" #~ msgstr "Садржај:" diff --git a/editor/translations/sr_Latn.po b/editor/translations/sr_Latn.po index 76982c0b00..eee30eb977 100644 --- a/editor/translations/sr_Latn.po +++ b/editor/translations/sr_Latn.po @@ -1025,7 +1025,7 @@ msgstr "" msgid "Dependencies" msgstr "" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "" @@ -1655,13 +1655,13 @@ msgid "" "Enabled'." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2036,7 +2036,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "" @@ -2517,6 +2517,30 @@ msgid "Current scene not saved. Open anyway?" msgstr "" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Undo: %s" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Redo: %s" +msgstr "" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "" @@ -3145,6 +3169,11 @@ msgid "Merge With Existing" msgstr "" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Animacija Promjeni Transformaciju" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "" @@ -3388,6 +3417,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "" @@ -5455,6 +5488,17 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Locked" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Obriši Selekciju" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6374,7 +6418,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -6967,6 +7015,16 @@ msgstr "Napravi" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "Animacija Promjeni Transformaciju" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Animacija Obriši Ključeve" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7468,11 +7526,12 @@ msgid "Skeleton2D" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "Napravi" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" +msgid "Overwrite Rest Pose" msgstr "" #: editor/plugins/skeleton_editor_plugin.cpp @@ -7500,6 +7559,60 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7608,42 +7721,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -7906,6 +7999,11 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "Napravi" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "" @@ -7971,7 +8069,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -11967,6 +12065,14 @@ msgstr "" msgid "Set Portal Point Position" msgstr "" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Position" +msgstr "" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12252,6 +12358,11 @@ msgstr "" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "Sve sekcije" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -12734,159 +12845,148 @@ msgstr "" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Uninstalling..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Installing to device, please wait..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not execute on device." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -12894,57 +12994,57 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -12952,54 +13052,54 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package not found: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13007,19 +13107,19 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Adding files..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13469,6 +13569,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -13758,6 +13866,14 @@ msgstr "" msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13798,6 +13914,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/sv.po b/editor/translations/sv.po index 373e3aad36..3b0b8a97dd 100644 --- a/editor/translations/sv.po +++ b/editor/translations/sv.po @@ -1043,7 +1043,7 @@ msgstr "" msgid "Dependencies" msgstr "Beroenden" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Resurs" @@ -1702,13 +1702,13 @@ msgstr "" "Målplattformen kräver 'ETC' texturkomprimering för GLES2.\n" "Aktivera 'Import Etc' i Projektinställningarna." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "Mallfil hittades inte." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2102,7 +2102,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "(Om)Importerar Tillgångar" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "Topp" @@ -2636,6 +2636,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "Nuvarande scen inte sparad. Öppna ändå?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "Ångra" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "Återställ" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "Kan inte ladda om en scen som aldrig har sparats." @@ -3310,6 +3336,11 @@ msgid "Merge With Existing" msgstr "Sammanfoga Med Existerande" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Anim Ändra Transformation" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "Öppna & Kör ett Skript" @@ -3563,6 +3594,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "Gör Unik" @@ -5728,6 +5763,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "Välj" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Grupper" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6684,7 +6731,13 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +#, fuzzy +msgid "Import from Scene (Ignore Transforms)" +msgstr "Importera från Scen" + +#: editor/plugins/mesh_library_editor_plugin.cpp +#, fuzzy +msgid "Import from Scene (Apply Transforms)" msgstr "Importera från Scen" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7285,6 +7338,16 @@ msgstr "Infoga Punkt" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "Transformera" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Skapa Node" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7809,12 +7872,14 @@ msgid "Skeleton2D" msgstr "Singleton" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "Ladda Standard" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "Skriv över" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7843,6 +7908,65 @@ msgid "Perspective" msgstr "Perspektiv" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Perspective" +msgstr "Perspektiv" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "Perspektiv" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Perspective" +msgstr "Perspektiv" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Perspective" +msgstr "Perspektiv" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Perspective" +msgstr "Perspektiv" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7959,42 +8083,22 @@ msgid "Bottom View." msgstr "Vy Underifrån." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "Botten" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "Vy från vänster." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "Vänster" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "Vy från höger." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "Höger" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "Vy Framifrån." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "Framsida" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "Vy Bakifrån." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "Baksida" - -#: editor/plugins/spatial_editor_plugin.cpp #, fuzzy msgid "Align Transform with View" msgstr "Vy från höger" @@ -8264,6 +8368,11 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "Redigera Polygon" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "Inställningar..." @@ -8329,8 +8438,9 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" -msgstr "" +#, fuzzy +msgid "Unnamed Gizmo" +msgstr "Namnlöst Projekt" #: editor/plugins/sprite_editor_plugin.cpp #, fuzzy @@ -12474,6 +12584,14 @@ msgstr "" msgid "Set Portal Point Position" msgstr "" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Position" +msgstr "" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12767,6 +12885,11 @@ msgstr "Genererar Lightmaps" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "Alla urval" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -13249,165 +13372,154 @@ msgstr "Fäst Skript" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Select device from the list" msgstr "Välj enhet från listan" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting APK..." msgstr "Exportera" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Uninstalling..." msgstr "Avinstallera" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Installing to device, please wait..." msgstr "Laddar..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not install to device: %s" msgstr "Kunde inte starta underprocess!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not execute on device." msgstr "Kunde inte skapa mapp." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "Ogiltigt paket namn:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13415,63 +13527,63 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Signing release %s..." msgstr "" "Skannar Filer,\n" "Snälla Vänta..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not find keystore, unable to export." msgstr "Kunde inte öppna mall för export:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Verifying %s..." msgstr "Lägger till %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting for Android" msgstr "Exportera" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13479,58 +13591,58 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not write expansion package file!" msgstr "Kunde inte skriva till filen:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "Animeringsverktyg" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Creating APK..." msgstr "Skapar konturer..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" "Could not find template APK to export:\n" "%s" msgstr "Kunde inte öppna mall för export:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13538,21 +13650,21 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Adding files..." msgstr "Lägger till %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files" msgstr "Kunde inte skriva till filen:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -14035,6 +14147,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14330,6 +14450,14 @@ msgstr "Måste använda en giltigt filändelse." msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14370,6 +14498,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " @@ -14423,6 +14555,21 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#~ msgid "Bottom" +#~ msgstr "Botten" + +#~ msgid "Left" +#~ msgstr "Vänster" + +#~ msgid "Right" +#~ msgstr "Höger" + +#~ msgid "Front" +#~ msgstr "Framsida" + +#~ msgid "Rear" +#~ msgstr "Baksida" + #~ msgid "Package Contents:" #~ msgstr "Paketets Innehåll:" diff --git a/editor/translations/ta.po b/editor/translations/ta.po index 2ad954b971..f0a34987a2 100644 --- a/editor/translations/ta.po +++ b/editor/translations/ta.po @@ -1020,7 +1020,7 @@ msgstr "" msgid "Dependencies" msgstr "" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "" @@ -1650,13 +1650,13 @@ msgid "" "Enabled'." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2029,7 +2029,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "" @@ -2508,6 +2508,30 @@ msgid "Current scene not saved. Open anyway?" msgstr "" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Undo: %s" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Redo: %s" +msgstr "" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "" @@ -3133,6 +3157,11 @@ msgid "Merge With Existing" msgstr "" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "உருமாற்றம் அசைவூட்டு" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "" @@ -3375,6 +3404,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "" @@ -5433,6 +5466,17 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Locked" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "அனைத்து தேர்வுகள்" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6338,7 +6382,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -6924,6 +6972,16 @@ msgstr "" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "உருமாற்றம் அசைவூட்டு" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "அனைத்து தேர்வுகள்" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7419,11 +7477,11 @@ msgid "Skeleton2D" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" +msgid "Reset to Rest Pose" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" +msgid "Overwrite Rest Pose" msgstr "" #: editor/plugins/skeleton_editor_plugin.cpp @@ -7451,6 +7509,60 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7558,42 +7670,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -7855,6 +7947,10 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Occlusion Culling" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "" @@ -7920,7 +8016,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -11867,6 +11963,14 @@ msgstr "" msgid "Set Portal Point Position" msgstr "" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Position" +msgstr "" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12152,6 +12256,11 @@ msgstr "" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "அனைத்து தேர்வுகள்" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -12627,159 +12736,148 @@ msgstr "" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Uninstalling..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Installing to device, please wait..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not execute on device." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -12787,57 +12885,57 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -12845,54 +12943,54 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package not found: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -12900,19 +12998,19 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Adding files..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13362,6 +13460,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -13651,6 +13757,14 @@ msgstr "" msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13691,6 +13805,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/te.po b/editor/translations/te.po index 74998009cd..a77af85920 100644 --- a/editor/translations/te.po +++ b/editor/translations/te.po @@ -994,7 +994,7 @@ msgstr "" msgid "Dependencies" msgstr "" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "" @@ -1623,13 +1623,13 @@ msgid "" "Enabled'." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -1999,7 +1999,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "" @@ -2477,6 +2477,30 @@ msgid "Current scene not saved. Open anyway?" msgstr "" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Undo: %s" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Redo: %s" +msgstr "" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "" @@ -3101,6 +3125,10 @@ msgid "Merge With Existing" msgstr "" #: editor/editor_node.cpp +msgid "Apply MeshInstance Transforms" +msgstr "" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "" @@ -3341,6 +3369,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "" @@ -5381,6 +5413,16 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Locked" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Grouped" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6279,7 +6321,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -6863,6 +6909,14 @@ msgstr "" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Occluder Set Transform" +msgstr "" + +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Center Node" +msgstr "" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7357,11 +7411,11 @@ msgid "Skeleton2D" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" +msgid "Reset to Rest Pose" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" +msgid "Overwrite Rest Pose" msgstr "" #: editor/plugins/skeleton_editor_plugin.cpp @@ -7389,6 +7443,60 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7496,42 +7604,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -7793,6 +7881,10 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Occlusion Culling" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "" @@ -7858,7 +7950,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -11759,6 +11851,14 @@ msgstr "" msgid "Set Portal Point Position" msgstr "" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Position" +msgstr "" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12039,6 +12139,10 @@ msgstr "" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Build Solution" +msgstr "" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -12505,159 +12609,148 @@ msgstr "" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Uninstalling..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Installing to device, please wait..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not execute on device." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -12665,57 +12758,57 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -12723,54 +12816,54 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package not found: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -12778,19 +12871,19 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Adding files..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13240,6 +13333,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -13529,6 +13630,14 @@ msgstr "" msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13569,6 +13678,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/th.po b/editor/translations/th.po index 231051313a..3042188001 100644 --- a/editor/translations/th.po +++ b/editor/translations/th.po @@ -1035,7 +1035,7 @@ msgstr "" msgid "Dependencies" msgstr "การอ้างอิง" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "ทรัพยากร" @@ -1695,13 +1695,13 @@ msgstr "" "แพลตฟอร์มเป้าหมายต้องการการบีบอัดเทกเจอร์ 'PVRTC' สำหรับการกลับมาใช้ GLES2\n" "เปิด 'Import Pvrtc' ในตั้งค่าโปรเจ็คหรือปิด 'Driver Fallback Enabled'" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "ไม่พบเทมเพลตการดีบักแบบกำหนดเอง" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2081,7 +2081,7 @@ msgstr "มีการนำเข้าไฟล์ %s หลายอัน msgid "(Re)Importing Assets" msgstr "กำลังนำเข้าทรัพยากร(อีกครั้ง)" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "บนสุด" @@ -2576,6 +2576,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "ฉากปัจจุบันยังไม่ได้บันทึก จะเปิดไฟล์หรือไม่?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "เลิกทำ" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "ทำซ้ำ" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "ฉากยังไม่ได้บันทึก ไม่สามารถโหลดใหม่ได้" @@ -3245,6 +3271,11 @@ msgid "Merge With Existing" msgstr "รวมกับที่มีอยู่เดิม" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "เคลื่อนย้ายแอนิเมชัน" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "เปิดและรันสคริปต์" @@ -3497,6 +3528,10 @@ msgid "" "property (%s)." msgstr "ทรัพยากรที่เลือก (%s) มีประเทไม่ตรงกับค่าที่ต้องการ (%s)" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "ไม่ใช้ร่วมกับวัตถุอื่น" @@ -5600,6 +5635,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "เลื่อน CanvasItem \"%s\" ไปยัง (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "ล็อกที่เลือก" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "กลุ่ม" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6538,7 +6585,13 @@ msgid "Remove Selected Item" msgstr "ลบไอเทมที่เลือก" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +#, fuzzy +msgid "Import from Scene (Ignore Transforms)" +msgstr "นำเข้าจากฉาก" + +#: editor/plugins/mesh_library_editor_plugin.cpp +#, fuzzy +msgid "Import from Scene (Apply Transforms)" msgstr "นำเข้าจากฉาก" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7130,6 +7183,16 @@ msgstr "จำนวนจุดที่สร้างขึ้น:" msgid "Flip Portal" msgstr "พลิกแนวนอน" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "เคลียร์การแปลง" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "สร้างโหนด" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "AnimationTree ไม่มีที่อยู่ไปยัง AnimationPlayer" @@ -7629,12 +7692,14 @@ msgid "Skeleton2D" msgstr "Skeleton2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "สร้างท่าโพส (จากโครง)" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "ตั้งโครงไปยังท่าโพส" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "ตั้งโครงไปยังท่าโพส" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "เขียนทับ" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7661,6 +7726,71 @@ msgid "Perspective" msgstr "เพอร์สเปกทีฟ" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Orthogonal" +msgstr "ขนาน" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Perspective" +msgstr "เพอร์สเปกทีฟ" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Orthogonal" +msgstr "ขนาน" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "เพอร์สเปกทีฟ" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Left Orthogonal" +msgstr "ขนาน" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Perspective" +msgstr "เพอร์สเปกทีฟ" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Orthogonal" +msgstr "ขนาน" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Orthogonal" +msgstr "ขนาน" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Perspective" +msgstr "เพอร์สเปกทีฟ" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Orthogonal" +msgstr "ขนาน" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Perspective" +msgstr "เพอร์สเปกทีฟ" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "ยกเลิกการเคลื่อนย้าย" @@ -7779,42 +7909,22 @@ msgid "Bottom View." msgstr "มุมล่าง" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "ล่าง" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "มุมซ้าย" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "ซ้าย" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "มุมขวา" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "ขวา" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "มุมหน้า" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "หน้า" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "มุมหลัง" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "หลัง" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "จัดการแปลงให้เข้ากับวิว" @@ -8087,6 +8197,11 @@ msgid "View Portal Culling" msgstr "ตั้งค่ามุมมอง" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "ตั้งค่ามุมมอง" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "ตั้งค่า..." @@ -8152,8 +8267,9 @@ msgid "Post" msgstr "หลัง" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" -msgstr "กิสโมไม่มีชื่อ" +#, fuzzy +msgid "Unnamed Gizmo" +msgstr "โปรเจกต์ไม่มีชื่อ" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Mesh2D" @@ -12275,6 +12391,16 @@ msgstr "กำหนดพิกัดจุดเส้นโค้ง" msgid "Set Portal Point Position" msgstr "กำหนดพิกัดจุดเส้นโค้ง" +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Radius" +msgstr "ปรับรัศมีทรงแคปซูล" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr "กำหนดเส้นโค้งขาเข้า" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "ปรับรัศมีทรงกระบอก" @@ -12558,6 +12684,11 @@ msgstr "กำลังพล็อต lightmaps" msgid "Class name can't be a reserved keyword" msgstr "ชื่อคลาสไม่สามารถมีคีย์เวิร์ดได้" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "เติมส่วนที่เลือก" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "สิ้นสุดสแตคข้อผิดพลาดภายใน" @@ -13030,135 +13161,135 @@ msgstr "ค้นหาโหนด VisualScript" msgid "Get %s" msgstr "รับ %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "ชื่อแพ็คเกจหายไป" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "ส่วนของแพ็คเกจจะต้องมีความยาวไม่เป็นศูนย์" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "ตัวอักษร '%s' ไม่อนุญาตให้ใช้ในชื่อของ Android application package" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "ไม่สามารถใช้ตัวเลขเป็นตัวแรกในส่วนของแพ็คเกจ" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "ตัวอักษร '%s' ไม่สามารถเป็นตัวอักษรตัวแรกในส่วนของแพ็คเกจ" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "แพ็คเกจจำเป็นต้องมี '.' อย่างน้อยหนึ่งตัว" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "เลือกอุปกรณ์จากรายชื่อ" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting APK..." msgstr "ส่งออกทั้งหมด" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Uninstalling..." msgstr "ถอนการติดตั้ง" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Installing to device, please wait..." msgstr "กำลังโหลด โปรดรอ..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not install to device: %s" msgstr "อินสแตนซ์ฉากไม่ได้!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Running on device..." msgstr "กำลังรันสคริปต์..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not execute on device." msgstr "ไม่สามารถสร้างโฟลเดอร์" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "ไม่สามารถหาเครื่องมือ 'apksigner'" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "เทมเพลตการสร้างสำหรับแอนดรอยด์ไม่ถูกติดตั้ง สามารถติดตั้งจากเมนูโปรเจกต์" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "ดีบัก Keystore ไม่ได้ถูกตั้งไว้ในตั้งค่าของตัวแก้ไขหรือในพรีเซ็ต" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "Release keystore กำหนดค่าไว้อย่างไม่ถูกต้องในพรีเซ็ตสำหรับการส่งออก" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "ต้องการที่อยู่ของ Android SDK ที่ถูกต้อง ในการตั้งค่าตัวแก้ไข" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "ที่อยู่ Android SDK ไม่ถูกต้องในการตั้งค่าตัวแก้ไข" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "ไดเร็กทอรี 'platform-tools' หายไป!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "ไม่พบคำสั่ง adb ของ Android SDK platform-tools" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "กรุณาตรวจสอบในตำแหน่งของ Android SDK ที่ระบุไว้ในการตั้งค่าตัวแก้ไข" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "ไดเร็กทอรี 'build-tools' หายไป!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "ไม่พบคำสั่ง apksigner ของ Android SDK build-tools" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "public key ผิดพลาดสำหรับ APK expansion" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "ชื่อแพ็คเกจผิดพลาด:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" @@ -13166,33 +13297,20 @@ msgstr "" "โมดูล \"GodotPaymentV3\" ที่ไม่ถูกต้องได้รวมอยู่ในการตั้งค่าโปรเจกต์ \"android/modules" "\" (เปลี่ยนแปลงใน Godot 3.2.2)\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "\"Use Custom Build\" จำเป็นต้องเปิดการใช้งานหากจะใช้ปลั๊กอิน" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" -"\"Degrees Of Freedom\" จะใช้ได้เฉพาะเมื่อ \"Xr Mode\" เป็น \"Oculus Mobile VR\"" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "\"Hand Tracking\" จะสามารถใช้ได้เมื่อ \"Xr Mode\" เป็น \"Oculus Mobile VR\"" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" -"\"Focus Awareness\" จะสามารถใช้ได้เมื่อ \"Xr Mode\" เป็น \"Oculus Mobile VR\"" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "\"Export AAB\" จะใช้ได้เฉพาะเมื่อเปิดใช้งาน \"Use Custom Build\"" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13200,64 +13318,64 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Signing release %s..." msgstr "" "กำลังสแกนไฟล์,\n" "กรุณารอ..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not find keystore, unable to export." msgstr "เปิดเทมเพลตเพื่อส่งออกไม่ได้:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Verifying %s..." msgstr "กำลังเพิ่ม %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting for Android" msgstr "ส่งออกทั้งหมด" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "ชื่อไฟล์ผิดพลาด! แอนดรอยด์แอปบันเดิลจำเป็นต้องมีนามสกุล *.aab" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "การขยาย APK เข้ากันไม่ได้กับแอนดรอยด์แอปบันเดิล" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "ชื่อไฟล์ผิดพลาด! แอนดรอยด์ APK จำเป็นต้องมีนามสกุล *.apk" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" "พยายามสร้างจากเทมเพลตที่สร้างขึ้นเอง แต่ไม่มีข้อมูลเวอร์ชัน โปรดติดตั้งใหม่จากเมนู \"โปรเจกต์\"" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13269,26 +13387,26 @@ msgstr "" " Godot เวอร์ชัน:% s\n" "โปรดติดตั้งเทมเพลตการสร้างสำหรับแอนดรอยด์ใหม่จากเมนู \"โปรเจกต์\"" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files to gradle project\n" msgstr "ไม่พบไฟล์ project.godot" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not write expansion package file!" msgstr "เขียนไฟล์ไม่ได้:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "กำลังสร้างโปรเจคแอนดรอยด์ (gradle)" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." @@ -13296,35 +13414,35 @@ msgstr "" "การสร้างโปรเจกต์แอนดรอยด์ล้มเหลว ตรวจสอบผลลัพธ์เพื่อหาข้อผิดพลาด\n" "หรือไปที่ docs.godotengine.org สำหรับเอกสารประกอบการสร้างสำหรับแอนดรอยด์" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "กำลังย้ายเอาต์พุต" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" "ไม่สามารถคัดลอกและเปลี่ยนชื่อไฟล์ส่งออก ตรวจสอบไดเร็กทอรีโปรเจ็กต์ gradle สำหรับเอาต์พุต" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "ไม่พบแอนิเมชัน: '%s'" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Creating APK..." msgstr "กำลังสร้างคอนทัวร์..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" "Could not find template APK to export:\n" "%s" msgstr "เปิดเทมเพลตเพื่อส่งออกไม่ได้:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13332,21 +13450,21 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Adding files..." msgstr "กำลังเพิ่ม %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files" msgstr "เขียนไฟล์ไม่ได้:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "จัดเรียง APK..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13843,6 +13961,14 @@ msgstr "" "NavigationMeshInstance ต้องเป็นโหนดลูก/หลานของโหนด Navigation " "โดยจะให้ข้อมูลการนำทางเท่านั้น" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14156,6 +14282,14 @@ msgstr "นามสกุลไฟล์ไม่ถูกต้อง" msgid "Enable grid minimap." msgstr "เปิดเส้นกริดมินิแมพ" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14205,6 +14339,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "ขนาดวิวพอร์ตจะต้องมากกว่า 0 เพื่อที่จะเรนเดอร์ได้" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " @@ -14256,6 +14394,39 @@ msgstr "การกำหนดให้กับยูนิฟอร์ม" msgid "Constants cannot be modified." msgstr "ค่าคงที่ไม่สามารถแก้ไขได้" +#~ msgid "Make Rest Pose (From Bones)" +#~ msgstr "สร้างท่าโพส (จากโครง)" + +#~ msgid "Bottom" +#~ msgstr "ล่าง" + +#~ msgid "Left" +#~ msgstr "ซ้าย" + +#~ msgid "Right" +#~ msgstr "ขวา" + +#~ msgid "Front" +#~ msgstr "หน้า" + +#~ msgid "Rear" +#~ msgstr "หลัง" + +#~ msgid "Nameless gizmo" +#~ msgstr "กิสโมไม่มีชื่อ" + +#~ msgid "" +#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile " +#~ "VR\"." +#~ msgstr "" +#~ "\"Degrees Of Freedom\" จะใช้ได้เฉพาะเมื่อ \"Xr Mode\" เป็น \"Oculus Mobile VR\"" + +#~ msgid "" +#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" +#~ "\"." +#~ msgstr "" +#~ "\"Focus Awareness\" จะสามารถใช้ได้เมื่อ \"Xr Mode\" เป็น \"Oculus Mobile VR\"" + #~ msgid "Package Contents:" #~ msgstr "เนื้อหาแพคเกจ:" diff --git a/editor/translations/tr.po b/editor/translations/tr.po index 69a7ef73a2..e5a65500d1 100644 --- a/editor/translations/tr.po +++ b/editor/translations/tr.po @@ -61,12 +61,13 @@ # ali aydın <alimxaydin@gmail.com>, 2021. # Cannur Daşkıran <canndask@gmail.com>, 2021. # kahveciderin <kahveciderin@gmail.com>, 2021. +# Lucifer25x <umudyt2006@gmail.com>, 2021. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2021-07-13 06:13+0000\n" -"Last-Translator: kahveciderin <kahveciderin@gmail.com>\n" +"PO-Revision-Date: 2021-09-15 00:46+0000\n" +"Last-Translator: Lucifer25x <umudyt2006@gmail.com>\n" "Language-Team: Turkish <https://hosted.weblate.org/projects/godot-engine/" "godot/tr/>\n" "Language: tr\n" @@ -74,7 +75,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.7.2-dev\n" +"X-Generator: Weblate 4.9-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -1020,7 +1021,7 @@ msgstr "\"%s\" için sonuç yok." #: editor/create_dialog.cpp editor/property_selector.cpp msgid "No description available for %s." -msgstr "" +msgstr "%s için açıklama yok." #: editor/create_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp @@ -1080,7 +1081,7 @@ msgstr "" msgid "Dependencies" msgstr "Bağımlılıklar" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Kaynak" @@ -1324,11 +1325,12 @@ msgstr "%s (Zaten Var)" #: editor/editor_asset_installer.cpp msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:" -msgstr "" +msgstr "\"%s\" öğesinin içeriği - %d dosya(lar) projenizle çakışıyor:" #: editor/editor_asset_installer.cpp +#, fuzzy msgid "Contents of asset \"%s\" - No files conflict with your project:" -msgstr "" +msgstr "\"%s\" öğesinin içeriği - Projenizle çakışan dosya yok:" #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" @@ -1597,8 +1599,9 @@ msgid "%s is an invalid path. File does not exist." msgstr "Dosya yok." #: editor/editor_autoload_settings.cpp +#, fuzzy msgid "%s is an invalid path. Not in resource path (res://)." -msgstr "" +msgstr "%s geçersiz bir yol. Kaynak yolunda değil (res://)." #: editor/editor_autoload_settings.cpp msgid "Add AutoLoad" @@ -1748,13 +1751,13 @@ msgstr "" "Proje Ayarlarında 'Import Etc' seçeneğini etkinleştirin veya 'Driver " "Fallback Enabled' seçeneğini devre dışı bırakın." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "Özel hata ayıklama şablonu bulunmadı." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -1798,35 +1801,45 @@ msgstr "Dock İçe Aktar" #: editor/editor_feature_profile.cpp msgid "Allows to view and edit 3D scenes." -msgstr "" +msgstr "3D sahneleri görüntülemeye ve düzenlemeye izin verir." #: editor/editor_feature_profile.cpp msgid "Allows to edit scripts using the integrated script editor." msgstr "" +"Entegre komut dosyası düzenleyicisini kullanarak komut dosyalarını " +"düzenlemeye izin verir." #: editor/editor_feature_profile.cpp +#, fuzzy msgid "Provides built-in access to the Asset Library." -msgstr "" +msgstr "Varlık Kitaplığına yerleşik erişim sağlar." #: editor/editor_feature_profile.cpp msgid "Allows editing the node hierarchy in the Scene dock." -msgstr "" +msgstr "Scene dock'ta düğüm hiyerarşisini düzenlemeye izin verir." #: editor/editor_feature_profile.cpp +#, fuzzy msgid "" "Allows to work with signals and groups of the node selected in the Scene " "dock." msgstr "" +"Scene dock'ta seçilen düğümün sinyalleri ve gruplarıyla çalışmaya izin verir." #: editor/editor_feature_profile.cpp +#, fuzzy msgid "Allows to browse the local file system via a dedicated dock." msgstr "" +"Özel bir dock aracılığıyla yerel dosya sistemine göz atılmasına izin verir." #: editor/editor_feature_profile.cpp +#, fuzzy msgid "" "Allows to configure import settings for individual assets. Requires the " "FileSystem dock to function." msgstr "" +"Bireysel varlıklar için içe aktarma ayarlarını yapılandırmaya izin verir. " +"Çalışması için FileSystem fonksiyonunu gerektirir." #: editor/editor_feature_profile.cpp #, fuzzy @@ -1838,8 +1851,9 @@ msgid "(none)" msgstr "" #: editor/editor_feature_profile.cpp +#, fuzzy msgid "Remove currently selected profile, '%s'? Cannot be undone." -msgstr "" +msgstr "Seçili olan '%s' profili kaldırılsın mı? (Geri alınamayan.)" #: editor/editor_feature_profile.cpp msgid "Profile must be a valid filename and must not contain '.'" @@ -1948,6 +1962,8 @@ msgstr "Doku Seçenekleri" #: editor/editor_feature_profile.cpp msgid "Create or import a profile to edit available classes and properties." msgstr "" +"Kullanılabilir sınıfları ve özellikleri düzenlemek için bir profil oluşturun " +"veya içe aktarın." #: editor/editor_feature_profile.cpp msgid "New profile name:" @@ -2137,7 +2153,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "Varlıklar Yeniden-İçe Aktarılıyor" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "Üst" @@ -2369,11 +2385,15 @@ msgid "New Window" msgstr "Yeni Pencere" #: editor/editor_node.cpp +#, fuzzy msgid "" "Spins when the editor window redraws.\n" "Update Continuously is enabled, which can increase power usage. Click to " "disable it." msgstr "" +"Düzenleyici penceresi yeniden çizildiğinde döner.\n" +"Güç kullanımını artırabilecek Sürekli Güncelle etkindir. Devre dışı bırakmak " +"için tıklayın." #: editor/editor_node.cpp msgid "Spins when the editor window redraws." @@ -2605,10 +2625,13 @@ msgid "Save changes to '%s' before closing?" msgstr "Kapatmadan önce değişklikler buraya '%s' kaydedilsin mi?" #: editor/editor_node.cpp +#, fuzzy msgid "" "The current scene has no root node, but %d modified external resource(s) " "were saved anyway." msgstr "" +"Geçerli sahnenin kök düğümü yok, ancak %d değiştirilmiş harici kaynak(lar) " +"yine de kaydedildi." #: editor/editor_node.cpp #, fuzzy @@ -2646,6 +2669,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "Var olan sahne kaydedilmedi. Yine de açılsın mı?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "Geri al" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "Yeniden yap" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "Hiç kaydedilmemiş bir sahne yeniden yüklenemiyor." @@ -3167,7 +3216,7 @@ msgstr "Klavuzu Aç" #: editor/editor_node.cpp msgid "Questions & Answers" -msgstr "" +msgstr "Sorular & Cevaplar" #: editor/editor_node.cpp msgid "Report a Bug" @@ -3338,6 +3387,11 @@ msgid "Merge With Existing" msgstr "Var Olanla Birleştir" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Animasyon Değişikliği Dönüşümü" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "Aç & Bir Betik Çalıştır" @@ -3595,6 +3649,10 @@ msgstr "" "Seçili kaynak (%s) bu özellik (%s) için beklenen herhangi bir tip ile " "uyuşmuyor." +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "Benzersiz Yap" @@ -3689,11 +3747,11 @@ msgstr "Düğümden İçe Aktar:" #: editor/export_template_manager.cpp msgid "Open the folder containing these templates." -msgstr "" +msgstr "Bu şablonları içeren klasörü açın." #: editor/export_template_manager.cpp msgid "Uninstall these templates." -msgstr "" +msgstr "Bu şablonları kaldırın." #: editor/export_template_manager.cpp #, fuzzy @@ -3707,7 +3765,7 @@ msgstr "Aynalar alınıyor, lütfen bekleyin..." #: editor/export_template_manager.cpp msgid "Starting the download..." -msgstr "" +msgstr "İndirme başlatılıyor..." #: editor/export_template_manager.cpp msgid "Error requesting URL:" @@ -3749,8 +3807,9 @@ msgid "Request failed:" msgstr "İstek başarısız." #: editor/export_template_manager.cpp +#, fuzzy msgid "Download complete; extracting templates..." -msgstr "" +msgstr "İndirme tamamlandı; şablonlar ayıklanıyor..." #: editor/export_template_manager.cpp msgid "Cannot remove temporary file:" @@ -3774,8 +3833,9 @@ msgid "Error parsing JSON with the list of mirrors. Please report this issue!" msgstr "JSON sunucuları listesini alırken hata. Lütfen bu hatayı bildirin!" #: editor/export_template_manager.cpp +#, fuzzy msgid "Best available mirror" -msgstr "" +msgstr "Mevcut en iyi ayna" #: editor/export_template_manager.cpp msgid "" @@ -3873,12 +3933,14 @@ msgid "Current Version:" msgstr "Şu Anki Sürüm:" #: editor/export_template_manager.cpp +#, fuzzy msgid "Export templates are missing. Download them or install from a file." msgstr "" +"Dışa aktarma şablonları eksik. Bunları indirin veya bir dosyadan yükleyin." #: editor/export_template_manager.cpp msgid "Export templates are installed and ready to be used." -msgstr "" +msgstr "Dışa aktarma şablonları yüklenir ve kullanıma hazırdır." #: editor/export_template_manager.cpp #, fuzzy @@ -3887,7 +3949,7 @@ msgstr "Dosya Aç" #: editor/export_template_manager.cpp msgid "Open the folder containing installed templates for the current version." -msgstr "" +msgstr "Geçerli sürüm için yüklü şablonları içeren klasörü açın." #: editor/export_template_manager.cpp msgid "Uninstall" @@ -3915,13 +3977,14 @@ msgstr "Hatayı Kopyala" #: editor/export_template_manager.cpp msgid "Download and Install" -msgstr "" +msgstr "İndir ve Yükle" #: editor/export_template_manager.cpp msgid "" "Download and install templates for the current version from the best " "possible mirror." msgstr "" +"Mevcut sürüm için şablonları mümkün olan en iyi aynadan indirin ve yükleyin." #: editor/export_template_manager.cpp msgid "Official export templates aren't available for development builds." @@ -3972,6 +4035,8 @@ msgid "" "The templates will continue to download.\n" "You may experience a short editor freeze when they finish." msgstr "" +"Şablonlar indirilmeye devam edecek.\n" +"Bitirdiklerinde kısa bir editör donması yaşayabilirsiniz." #: editor/filesystem_dock.cpp msgid "Favorites" @@ -4119,25 +4184,24 @@ msgid "Collapse All" msgstr "Hepsini Daralt" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Sort files" -msgstr "Dosyaları ara" +msgstr "Dosyaları sırala" #: editor/filesystem_dock.cpp msgid "Sort by Name (Ascending)" -msgstr "" +msgstr "Ada Göre Sırala (Artan)" #: editor/filesystem_dock.cpp msgid "Sort by Name (Descending)" -msgstr "" +msgstr "Ada Göre Sırala (Azalan)" #: editor/filesystem_dock.cpp msgid "Sort by Type (Ascending)" -msgstr "" +msgstr "Türe Göre Sırala (Artan)" #: editor/filesystem_dock.cpp msgid "Sort by Type (Descending)" -msgstr "" +msgstr "Türe Göre Sırala (Artan)" #: editor/filesystem_dock.cpp #, fuzzy @@ -4159,7 +4223,7 @@ msgstr "Yeniden Adlandır..." #: editor/filesystem_dock.cpp msgid "Focus the search box" -msgstr "" +msgstr "Arama kutusuna odaklan" #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -4508,9 +4572,8 @@ msgid "Extra resource options." msgstr "Kaynak yolunda değil." #: editor/inspector_dock.cpp -#, fuzzy msgid "Edit Resource from Clipboard" -msgstr "Kaynak Panosunu Düzenle" +msgstr "Panodan Kaynağı Düzenle" #: editor/inspector_dock.cpp msgid "Copy Resource" @@ -4534,9 +4597,8 @@ msgid "History of recently edited objects." msgstr "En son düzenlenen nesnelerin geçmişi." #: editor/inspector_dock.cpp -#, fuzzy msgid "Open documentation for this object." -msgstr "Klavuzu Aç" +msgstr "Bu nesne için belgeleri açın." #: editor/inspector_dock.cpp editor/scene_tree_dock.cpp msgid "Open Documentation" @@ -4547,9 +4609,8 @@ msgid "Filter properties" msgstr "Özellikleri süz" #: editor/inspector_dock.cpp -#, fuzzy msgid "Manage object properties." -msgstr "Nesne özellikleri." +msgstr "Nesne özelliklerini yönetin." #: editor/inspector_dock.cpp msgid "Changes may be lost!" @@ -4793,9 +4854,8 @@ msgid "Blend:" msgstr "Karışma:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Parameter Changed:" -msgstr "Parametre Değişti" +msgstr "Parametre Değiştirildi:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -5524,11 +5584,11 @@ msgstr "Hepsi" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Search templates, projects, and demos" -msgstr "" +msgstr "Şablonları, projeleri ve demoları arayın" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Search assets (excluding templates, projects, and demos)" -msgstr "" +msgstr "Varlıkları arayın (şablonlar, projeler ve demolar hariç)" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." @@ -5572,7 +5632,7 @@ msgstr "Varlıkların ZIP Dosyası" #: editor/plugins/audio_stream_editor_plugin.cpp msgid "Audio Preview Play/Pause" -msgstr "" +msgstr "Ses Önizleme Oynat/Duraklat" #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "" @@ -5730,6 +5790,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "CanvasItem \"%s\" öğesini (%d,%d) konumuna taşı" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "Seçimi Kilitle" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Öbek" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -5918,9 +5990,8 @@ msgid "Drag: Rotate selected node around pivot." msgstr "Seçilen düğüm ya da geçişi sil." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Alt+Drag: Move selected node." -msgstr "Alt+Sürükle: Taşır" +msgstr "Alt+Sürükle: Seçili düğümü taşıyın." #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -5929,15 +6000,14 @@ msgstr "Seçilen düğüm ya da geçişi sil." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Alt+RMB: Show list of all nodes at position clicked, including locked." msgstr "" -"Tıklanan konumdaki tüm nesnelerin bir listesini gösterin\n" -"(Seçme biçiminde Alt + RMB ile özdeş)." +"Alt+RMB: Kilitli dahil olmak üzere tıklanan konumdaki tüm düğümlerin " +"listesini göster." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "RMB: Add node at position clicked." -msgstr "" +msgstr "RMB: Tıklanan konuma düğüm ekleyin." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -6196,16 +6266,19 @@ msgid "Pan View" msgstr "Yatay Kaydırma Görünümü" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy msgid "Zoom to 3.125%" -msgstr "" +msgstr "%3.125'e yakınlaştır" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy msgid "Zoom to 6.25%" -msgstr "" +msgstr "%6,25'e yakınlaştır" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy msgid "Zoom to 12.5%" -msgstr "" +msgstr "%12,5'e yakınlaştır" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -6598,6 +6671,9 @@ msgid "" "This is similar to single collision shape, but can result in a simpler " "geometry in some cases, at the cost of accuracy." msgstr "" +"Basitleştirilmiş bir dışbükey çarpışma şekli oluşturur.\n" +"Bu, tek çarpışma şekline benzer, ancak bazı durumlarda doğruluk pahasına " +"daha basit bir geometriyle sonuçlanabilir." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Multiple Convex Collision Siblings" @@ -6678,7 +6754,13 @@ msgid "Remove Selected Item" msgstr "Seçilen Öğeyi Kaldır" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +#, fuzzy +msgid "Import from Scene (Ignore Transforms)" +msgstr "Sahneden İçe Aktar" + +#: editor/plugins/mesh_library_editor_plugin.cpp +#, fuzzy +msgid "Import from Scene (Apply Transforms)" msgstr "Sahneden İçe Aktar" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7272,6 +7354,16 @@ msgstr "Üretilen Nokta Sayısı:" msgid "Flip Portal" msgstr "Yatay Yansıt" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "Dönüşümü Temizle" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Düğüm Oluştur" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "Animasyon ağacı AnimasyonOynatıcı'ya atanmış yola sahip değil" @@ -7774,12 +7866,14 @@ msgid "Skeleton2D" msgstr "İskelet2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "Dinlenme duruşu oluştur (kemiklerden)" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "Kemikleri Dinlenme Duruşuna ata" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "Kemikleri Dinlenme Duruşuna ata" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "Üzerine Yaz" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7806,6 +7900,71 @@ msgid "Perspective" msgstr "Derinlik" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Orthogonal" +msgstr "Dikey" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Perspective" +msgstr "Derinlik" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Orthogonal" +msgstr "Dikey" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "Derinlik" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Left Orthogonal" +msgstr "Dikey" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Perspective" +msgstr "Derinlik" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Orthogonal" +msgstr "Dikey" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Orthogonal" +msgstr "Dikey" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Perspective" +msgstr "Derinlik" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Orthogonal" +msgstr "Dikey" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Perspective" +msgstr "Derinlik" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "Dönüşüm Durduruldu." @@ -7832,20 +7991,17 @@ msgid "None" msgstr "Düğüm" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Rotate" -msgstr "Ülke" +msgstr "Döndür" #. TRANSLATORS: This refers to the movement that changes the position of an object. #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Translate" -msgstr "Çevir:" +msgstr "Çevir" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Scale" -msgstr "Ölçekle:" +msgstr "Ölçekle" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scaling: " @@ -7868,13 +8024,12 @@ msgid "Animation Key Inserted." msgstr "Animasyon Anahtarı Eklendi." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Pitch:" -msgstr "Perde" +msgstr "Perde:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Yaw:" -msgstr "" +msgstr "Sapma:" #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy @@ -7882,24 +8037,20 @@ msgid "Size:" msgstr "Boyut: " #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Objects Drawn:" -msgstr "Çizilmiş Nesneler" +msgstr "Çizilmiş Nesneler:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Material Changes:" -msgstr "Materyal Değişiklikleri" +msgstr "Materyal Değişiklikleri:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Shader Changes:" -msgstr "Shader Değişiklikleri" +msgstr "Gölgelendirici Değişiklikleri:" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Surface Changes:" -msgstr "Yüzey Değişiklikleri" +msgstr "Yüzey Değişiklikleri:" #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy @@ -7907,13 +8058,13 @@ msgid "Draw Calls:" msgstr "Çizim Çağrıları" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Vertices:" -msgstr "Köşenoktalar" +msgstr "Köşenoktalar:" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy msgid "FPS: %d (%s ms)" -msgstr "" +msgstr "Kare hızı: %d (%s ms)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Top View." @@ -7924,42 +8075,22 @@ msgid "Bottom View." msgstr "Alttan Görünüm." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "Alt" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "Soldan Görünüm." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "Sol" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "Sağdan Görünüm." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "Sağ" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "Önden Görünüm." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "Ön" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "Arkadan Görünüm." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "Arka" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "Dönüşümü Görünümle Eşle" @@ -8132,8 +8263,9 @@ msgid "Use Snap" msgstr "Yapışma Kullan" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy msgid "Converts rooms for portal culling." -msgstr "" +msgstr "Odaları portal ayıklama için dönüştürür." #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" @@ -8234,6 +8366,11 @@ msgid "View Portal Culling" msgstr "Görüntükapısı Ayarları" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "Görüntükapısı Ayarları" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "Ayarlar..." @@ -8299,8 +8436,9 @@ msgid "Post" msgstr "Sonrası" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" -msgstr "İsimsiz Gizmo" +#, fuzzy +msgid "Unnamed Gizmo" +msgstr "Adsız Proje" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Mesh2D" @@ -8552,14 +8690,12 @@ msgid "TextureRegion" msgstr "DokuBölgesi" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Colors" -msgstr "Renk" +msgstr "Renkler" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Fonts" -msgstr "Yazı Tipi" +msgstr "Yazı Tipleri" #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8573,7 +8709,7 @@ msgstr "StilKutusu" #: editor/plugins/theme_editor_plugin.cpp msgid "{num} color(s)" -msgstr "" +msgstr "{num} renk(lar)" #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8595,9 +8731,8 @@ msgid "{num} font(s)" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "No fonts found." -msgstr "Bulunamadı!" +msgstr "Yazı tipi bulunamadı." #: editor/plugins/theme_editor_plugin.cpp msgid "{num} icon(s)" @@ -8613,9 +8748,8 @@ msgid "{num} stylebox(es)" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "No styleboxes found." -msgstr "Alt kaynağı bulunamadı." +msgstr "Stil kutusu bulunamadı." #: editor/plugins/theme_editor_plugin.cpp msgid "{num} currently selected" @@ -8623,7 +8757,7 @@ msgstr "" #: editor/plugins/theme_editor_plugin.cpp msgid "Nothing was selected for the import." -msgstr "" +msgstr "İçe aktarma için hiçbir şey seçilmedi." #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8654,9 +8788,8 @@ msgid "With Data" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select by data type:" -msgstr "Bir Düğüm Seç" +msgstr "Veri türüne göre seçin:" #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8665,11 +8798,11 @@ msgstr "Önce bir ayar öğesi seçin!" #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible color items and their data." -msgstr "" +msgstr "Tüm görünür renk öğelerini ve verilerini seçin." #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all visible color items." -msgstr "" +msgstr "Tüm görünür renk öğelerinin seçimini kaldırın." #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8678,11 +8811,11 @@ msgstr "Önce bir ayar öğesi seçin!" #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible constant items and their data." -msgstr "" +msgstr "Tüm görünür sabit öğeleri ve verilerini seçin." #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all visible constant items." -msgstr "" +msgstr "Tüm görünür sabit öğelerin seçimini kaldırın." #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8691,11 +8824,11 @@ msgstr "Önce bir ayar öğesi seçin!" #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible font items and their data." -msgstr "" +msgstr "Tüm görünür yazı tipi öğelerini ve verilerini seçin." #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all visible font items." -msgstr "" +msgstr "Tüm görünür yazı tipi öğelerinin seçimini kaldırın." #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8714,36 +8847,35 @@ msgstr "Önce bir ayar öğesi seçin!" #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible stylebox items." -msgstr "" +msgstr "Tüm görünür stil kutusu öğelerini seçin." #: editor/plugins/theme_editor_plugin.cpp msgid "Select all visible stylebox items and their data." -msgstr "" +msgstr "Tüm görünür stil kutusu öğelerini ve verilerini seçin." #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all visible stylebox items." -msgstr "" +msgstr "Tüm görünür stil kutusu öğelerinin seçimini kaldırın." #: editor/plugins/theme_editor_plugin.cpp msgid "" "Caution: Adding icon data may considerably increase the size of your Theme " "resource." msgstr "" +"Dikkat: Simge verileri eklemek, Tema kaynağınızın boyutunu önemli ölçüde " +"artırabilir." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Collapse types." -msgstr "Hepsini Daralt" +msgstr "Hepsini Daralt." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Expand types." -msgstr "Hepsini Genişlet" +msgstr "Hepsini Genişlet." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select all Theme items." -msgstr "Şablon Dosyası Seç" +msgstr "Şablon Dosyası Seç." #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8752,16 +8884,15 @@ msgstr "Noktaları Seç" #: editor/plugins/theme_editor_plugin.cpp msgid "Select all Theme items with item data." -msgstr "" +msgstr "Öğe verileriyle tüm Tema öğelerini seçin." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Deselect All" -msgstr "Hepsini Seç" +msgstr "Tüm seçimleri kaldır" #: editor/plugins/theme_editor_plugin.cpp msgid "Deselect all Theme items." -msgstr "" +msgstr "Tüm Tema öğelerinin seçimini kaldırın." #: editor/plugins/theme_editor_plugin.cpp #, fuzzy @@ -8774,287 +8905,255 @@ msgid "" "closing this window.\n" "Close anyway?" msgstr "" +"Öğeleri İçe Aktar sekmesinde bazı öğeler seçilidir. Bu pencere " +"kapatıldığında seçim kaybolacaktır.\n" +"Yine de kapat?" #: editor/plugins/theme_editor_plugin.cpp msgid "" "Select a theme type from the list to edit its items.\n" "You can add a custom type or import a type with its items from another theme." msgstr "" +"Öğelerini düzenlemek için listeden bir tema türü seçin.\n" +"Özel bir tür ekleyebilir veya başka bir temadan öğeleriyle birlikte bir tür " +"içe aktarabilirsiniz." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Color Items" -msgstr "Bütün Öğeleri Kaldır" +msgstr "Tüm Renk Öğelerini Kaldır" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Item" -msgstr "Öğeyi Kaldır" +msgstr "Öğeyi Yeniden Adlandır" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Constant Items" -msgstr "Bütün Öğeleri Kaldır" +msgstr "Tüm Sabit Öğeleri Kaldır" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Font Items" -msgstr "Bütün Öğeleri Kaldır" +msgstr "Tüm Yazı Tipi Öğelerini Kaldır" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All Icon Items" -msgstr "Bütün Öğeleri Kaldır" +msgstr "Tüm Simge Öğelerini Kaldır" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove All StyleBox Items" -msgstr "Bütün Öğeleri Kaldır" +msgstr "Tüm Stil Kutusu Öğelerini Kaldır" #: editor/plugins/theme_editor_plugin.cpp msgid "" "This theme type is empty.\n" "Add more items to it manually or by importing from another theme." msgstr "" +"Bu tema türü boş.\n" +"El ile veya başka bir temadan içe aktararak daha fazla öğe ekleyin." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Color Item" -msgstr "Sınıf Öğeleri Ekle" +msgstr "Renk Öğesi Ekle" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Constant Item" -msgstr "Sınıf Öğeleri Ekle" +msgstr "Sabit Öğe Ekle" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Font Item" -msgstr "Öğe Ekle" +msgstr "Yazı Tipi Öğesi Ekle" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Icon Item" -msgstr "Öğe Ekle" +msgstr "Simge Öğesi Ekle" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Stylebox Item" -msgstr "Tüm Öğeleri Ekle" +msgstr "Stil Kutusu Öğesi Ekle" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Color Item" -msgstr "Sınıf Öğelerini Kaldır" +msgstr "Renk Öğesini Yeniden Adlandır" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Constant Item" -msgstr "Sınıf Öğelerini Kaldır" +msgstr "Sabit Öğeyi Yeniden Adlandır" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Font Item" -msgstr "Düğümü Yeniden Adlandır" +msgstr "Yazı Tipi Öğesini Yeniden Adlandır" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Icon Item" -msgstr "Düğümü Yeniden Adlandır" +msgstr "Simge Öğesini Yeniden Adlandır" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Rename Stylebox Item" -msgstr "Seçilen Öğeyi Kaldır" +msgstr "Stil Kutusu Öğesini Yeniden Adlandır" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Invalid file, not a Theme resource." -msgstr "Geçersiz dosya, bu bir audio bus yerleşim düzeni değil." +msgstr "Geçersiz dosya, Tema kaynağı değil." #: editor/plugins/theme_editor_plugin.cpp msgid "Invalid file, same as the edited Theme resource." -msgstr "" +msgstr "Geçersiz dosya, düzenlenen Tema kaynağıyla aynı." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Manage Theme Items" -msgstr "Şablonlarını Yönet" +msgstr "Tema Öğelerini Yönet" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Edit Items" -msgstr "Düzenlenebilir Öge" +msgstr "Öğeleri Düzenle" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Types:" -msgstr "Tür:" +msgstr "Türler:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Type:" -msgstr "Tür:" +msgstr "Tür Ekle:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Item:" -msgstr "Öğe Ekle" +msgstr "Öğe Ekle:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add StyleBox Item" -msgstr "Tüm Öğeleri Ekle" +msgstr "Stil Kutusu Öğesi Ekle" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove Items:" -msgstr "Öğeyi Kaldır" +msgstr "Öğeleri kaldır:" #: editor/plugins/theme_editor_plugin.cpp msgid "Remove Class Items" msgstr "Sınıf Öğelerini Kaldır" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Remove Custom Items" -msgstr "Sınıf Öğelerini Kaldır" +msgstr "Özel Öğeleri Kaldır" #: editor/plugins/theme_editor_plugin.cpp msgid "Remove All Items" msgstr "Bütün Öğeleri Kaldır" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Theme Item" -msgstr "Grafik Arayüzü Tema Öğeleri" +msgstr "Tema Öğesi Ekle" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Old Name:" -msgstr "Düğüm adı:" +msgstr "Eski ad:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Import Items" -msgstr "Kalıbı İçe Aktar" +msgstr "Öğeleri İçe Aktar" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Default Theme" -msgstr "Varsayılan" +msgstr "Varsayılan tema" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Editor Theme" -msgstr "Tema düzenle" +msgstr "Editör Teması" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select Another Theme Resource:" -msgstr "Kaynağı Sil" +msgstr "Başka Bir Tema Kaynağı Seçin:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Another Theme" -msgstr "Kalıbı İçe Aktar" +msgstr "Başka Bir Tema" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Confirm Item Rename" -msgstr "Animasyon İzini Yeniden Adlandır" +msgstr "Öğeyi Yeniden Adlandırmayı Onayla" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Cancel Item Rename" -msgstr "Tümden Yeniden Adlandır" +msgstr "Öğe Yeniden Adlandırmayı İptal Et" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Override Item" -msgstr "Üzerine Yaz" +msgstr "Öğeyi Geçersiz Kıl" #: editor/plugins/theme_editor_plugin.cpp +#, fuzzy msgid "Unpin this StyleBox as a main style." -msgstr "" +msgstr "Bu Stil Kutusunun ana stil olarak sabitlemesini kaldırın." #: editor/plugins/theme_editor_plugin.cpp msgid "" "Pin this StyleBox as a main style. Editing its properties will update the " "same properties in all other StyleBoxes of this type." msgstr "" +"Bu Stil Kutusunu ana stil olarak sabitleyin. Özelliklerini düzenlemek, bu " +"tipteki diğer tüm StyleBox'larda aynı özellikleri güncelleyecektir." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Type" -msgstr "Tür" +msgstr "Tür Ekle" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Item Type" -msgstr "Öğe Ekle" +msgstr "Öğe Türü Ekle" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Node Types:" -msgstr "Düğüm Türü" +msgstr "Düğüm Türleri:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Show Default" -msgstr "Varsayılanı Yükle" +msgstr "Varsayılanı Göster" #: editor/plugins/theme_editor_plugin.cpp msgid "Show default type items alongside items that have been overridden." -msgstr "" +msgstr "Geçersiz kılınan öğelerin yanında varsayılan tür öğelerini göster." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Override All" -msgstr "Üzerine Yaz" +msgstr "Tümünü Geçersiz Kıl" #: editor/plugins/theme_editor_plugin.cpp msgid "Override all default type items." -msgstr "" +msgstr "Tüm varsayılan tür öğelerini geçersiz kıl." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Theme:" -msgstr "Tema" +msgstr "Tema:" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Manage Items..." -msgstr "Dışa Aktarım Şablonlarını Yönet..." +msgstr "Öğeleri Yönet..." #: editor/plugins/theme_editor_plugin.cpp msgid "Add, remove, organize and import Theme items." -msgstr "" +msgstr "Tema öğeleri ekleyin, kaldırın, düzenleyin ve içe aktarın." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add Preview" -msgstr "Önizleme" +msgstr "Önizleme Ekle" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Default Preview" -msgstr "Önizlemeyi Güncelle" +msgstr "Varsayılan Önizleme" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Select UI Scene:" -msgstr "Bir Kaynak Örüntü Seçin:" +msgstr "UI Sahnesi'ni seçin:" #: editor/plugins/theme_editor_preview.cpp msgid "" "Toggle the control picker, allowing to visually select control types for " "edit." msgstr "" +"Düzenleme için kontrol türlerini görsel olarak seçmeye izin vererek kontrol " +"seçiciyi açın." #: editor/plugins/theme_editor_preview.cpp msgid "Toggle Button" -msgstr "Değiştirme Düğmesi" +msgstr "Geçiş Düğmesi" #: editor/plugins/theme_editor_preview.cpp msgid "Disabled Button" @@ -12484,6 +12583,16 @@ msgstr "Eğri Noktası Konumu Ayarla" msgid "Set Portal Point Position" msgstr "Eğri Noktası Konumu Ayarla" +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Radius" +msgstr "Silindir Şekli Yarıçapını Değiştir" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr "Eğriyi Konumda Ayarla" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "Silindir Yarıçapını Değiştir" @@ -12767,6 +12876,11 @@ msgstr "Işık haritalarını çizme" msgid "Class name can't be a reserved keyword" msgstr "Sınıf ismi ayrılmış anahtar kelime olamaz" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "Seçimi Doldur" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "İç özel durum yığını izlemesinin sonu" @@ -13251,80 +13365,80 @@ msgstr "Görsel Betikte Ara" msgid "Get %s" msgstr "Getir %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "Paket ismi eksik." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "Paket segmentleri sıfır olmayan uzunlukta olmalıdır." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "Android uygulama paketi adlarında '% s' karakterine izin verilmiyor." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "Rakam, paket segmentindeki ilk karakter olamaz." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "'%s' karakteri bir paket segmentindeki ilk karakter olamaz." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "Paket en azından bir tane '.' ayıracına sahip olmalıdır." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "Listeden aygıt seç" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting APK..." msgstr "Tümünü Dışa Aktarma" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Uninstalling..." msgstr "Kaldır" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Installing to device, please wait..." msgstr "Yükleniyor, lütfen bekleyin..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not install to device: %s" msgstr "Sahne Örneklenemedi!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Running on device..." msgstr "Çalışan Özel Betik..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not execute on device." msgstr "Klasör oluşturulamadı." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "'apksigner' aracı bulunamıyor." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" "Android derleme şablonu projede yüklü değil. Proje menüsünden yükleyin." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." @@ -13332,13 +13446,13 @@ msgstr "" "Hata Ayıklama Anahtar Deposu, Hata Ayıklama Kullanıcısı VE Hata Ayıklama " "Şifresi konfigüre edilmelidir VEYA hiçbiri konfigüre edilmemelidir." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" "Anahtar deposunda Hata Ayıklayıcı Ayarları'nda veya ön ayarda " "yapılandırılmamış." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." @@ -13346,50 +13460,50 @@ msgstr "" "Yayınlama Anahtar Deposu, Yayınlama Kullanıcısı be Yayınlama Şifresi " "ayarları konfigüre edilmeli VEYA hiçbiri konfigüre edilmemelidir." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" "Dışa aktarma ön kümesinde yanlış yapılandırılan anahtar deposunu (keystore) " "serbest bırakın." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "Editör Ayarlarında geçerli bir Android SDK yolu gerekli." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "Editör Ayarlarında geçersiz Android SDK yolu." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "Eksik 'platform araçları' dizini!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "Android SDK platform-tools'un adb komutu bulunamıyor." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" "Lütfen Editör Ayarlarında girilen Android SDK klasörünü kontrol ediniz." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "Eksik 'inşa-araçları' dizini!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "Android SDK platform-tools'un apksigner komutu bulunamıyor." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "APK genişletmesi için geçersiz ortak anahtar." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "Geçersiz paket ismi:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" @@ -13397,40 +13511,25 @@ msgstr "" "Geçersiz \"GodotPaymentV3\" modülü \"android/modüller\" proje ayarına dahil " "edildi (Godot 3.2.2'de değiştirildi).\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" "Eklentileri kullanabilmek için \"Özel Derleme Kullan\" seçeneği aktif olmalı." -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" -"\"Özgürlük Derecesi (Degrees Of Freedom)\" sadece \"Xr Modu\" \"Oculus " -"Mobile VR\" olduğunda geçerlidir." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" "\"El Takibi(Hand Tracking)\" sadece \"Xr Modu\" \"Oculus Mobile VR\" " "olduğunda geçerlidir." -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" -"\"Odak Farkındalığı(Focus Awareness)\" yalnızca \"Xr Modu\" \"Oculus Mobil VR" -"\" olduğunda geçerlidir." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" "\"AAB Dışa Aktar\" yalnızca \"Özel Yapı Kullan\" etkinleştirildiğinde " "geçerlidir." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13438,57 +13537,57 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Signing release %s..." msgstr "" "Dosyalar Taranıyor,\n" "Lütfen Bekleyiniz..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not find keystore, unable to export." msgstr "Dışa aktarma için şablon açılamadı:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Verifying %s..." msgstr "Ekliyor %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting for Android" msgstr "Tümünü Dışa Aktarma" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "Geçersiz dosya adı! Android Uygulama Paketi *.aab uzantısı gerektirir." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "APK Genişletme, Android Uygulama Paketi ile uyumlu değildir." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "Geçersiz dosya adı! Android APK, * .apk uzantısını gerektirir." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." @@ -13496,7 +13595,7 @@ msgstr "" "Özel olarak oluşturulmuş bir şablondan oluşturmaya çalışılıyor, ancak bunun " "için sürüm bilgisi yok. Lütfen 'Proje' menüsünden yeniden yükleyin." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13508,26 +13607,26 @@ msgstr "" " Godot Versiyonu: %s\n" "Lütfen 'Proje' menüsünden Android derleme şablonunu yeniden yükleyin." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files to gradle project\n" msgstr "Proje yolunda proje.godot alınamadı." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not write expansion package file!" msgstr "Dosya yazılamadı:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "Android Projesi Oluşturma (gradle)" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." @@ -13537,11 +13636,11 @@ msgstr "" "Alternatif olarak, Android derleme dokümantasyonu için docs.godotengine.org " "adresini ziyaret edin.." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "Çıktı taşınıyor" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." @@ -13549,24 +13648,24 @@ msgstr "" "Dışa aktarma dosyası kopyalanamıyor ve yeniden adlandırılamıyor, çıktılar " "için gradle proje dizinini kontrol edin." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "Animasyon bulunamadı: '%s'" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Creating APK..." msgstr "Konturlar oluşturuluyor..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" "Could not find template APK to export:\n" "%s" msgstr "Dışa aktarma için şablon açılamadı:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13574,21 +13673,21 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Adding files..." msgstr "Ekliyor %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files" msgstr "Dosya yazılamadı:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "APK hizalanıyor ..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -14125,6 +14224,14 @@ msgstr "" "NavigationMeshInstance, bir Navigation düğümünün çocuğu ya da torunu " "olmalıdır. O yalnızca yönlendirme verisi sağlar." +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14453,6 +14560,14 @@ msgstr "Geçerli bir uzantı kullanılmalı." msgid "Enable grid minimap." msgstr "Izgara haritasını etkinleştir." +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14506,6 +14621,10 @@ msgid "Viewport size must be greater than 0 to render anything." msgstr "" "Herhangi bir şeyi işlemek için görüntükapısı boyutu 0'dan büyük olmalıdır." +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " @@ -14559,6 +14678,41 @@ msgstr "uniform için atama." msgid "Constants cannot be modified." msgstr "Sabit değerler değiştirilemez." +#~ msgid "Make Rest Pose (From Bones)" +#~ msgstr "Dinlenme duruşu oluştur (kemiklerden)" + +#~ msgid "Bottom" +#~ msgstr "Alt" + +#~ msgid "Left" +#~ msgstr "Sol" + +#~ msgid "Right" +#~ msgstr "Sağ" + +#~ msgid "Front" +#~ msgstr "Ön" + +#~ msgid "Rear" +#~ msgstr "Arka" + +#~ msgid "Nameless gizmo" +#~ msgstr "İsimsiz Gizmo" + +#~ msgid "" +#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile " +#~ "VR\"." +#~ msgstr "" +#~ "\"Özgürlük Derecesi (Degrees Of Freedom)\" sadece \"Xr Modu\" \"Oculus " +#~ "Mobile VR\" olduğunda geçerlidir." + +#~ msgid "" +#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" +#~ "\"." +#~ msgstr "" +#~ "\"Odak Farkındalığı(Focus Awareness)\" yalnızca \"Xr Modu\" \"Oculus " +#~ "Mobil VR\" olduğunda geçerlidir." + #~ msgid "Package Contents:" #~ msgstr "Paket İçerikleri:" @@ -16496,9 +16650,6 @@ msgstr "Sabit değerler değiştirilemez." #~ msgid "Images:" #~ msgstr "Bedizler:" -#~ msgid "Group" -#~ msgstr "Öbek" - #~ msgid "Sample Conversion Mode: (.wav files):" #~ msgstr "Örnek Dönüşüm Biçimi: (.wav dizeçleri):" diff --git a/editor/translations/tt.po b/editor/translations/tt.po index e7b37069b7..b169cafdc7 100644 --- a/editor/translations/tt.po +++ b/editor/translations/tt.po @@ -994,7 +994,7 @@ msgstr "" msgid "Dependencies" msgstr "" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "" @@ -1623,13 +1623,13 @@ msgid "" "Enabled'." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -1999,7 +1999,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "" @@ -2477,6 +2477,30 @@ msgid "Current scene not saved. Open anyway?" msgstr "" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Undo: %s" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Redo: %s" +msgstr "" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "" @@ -3100,6 +3124,10 @@ msgid "Merge With Existing" msgstr "" #: editor/editor_node.cpp +msgid "Apply MeshInstance Transforms" +msgstr "" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "" @@ -3340,6 +3368,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "" @@ -5380,6 +5412,16 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Locked" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Grouped" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6278,7 +6320,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -6862,6 +6908,14 @@ msgstr "" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Occluder Set Transform" +msgstr "" + +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Center Node" +msgstr "" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7356,11 +7410,11 @@ msgid "Skeleton2D" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" +msgid "Reset to Rest Pose" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" +msgid "Overwrite Rest Pose" msgstr "" #: editor/plugins/skeleton_editor_plugin.cpp @@ -7388,6 +7442,60 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7495,42 +7603,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -7792,6 +7880,10 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Occlusion Culling" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "" @@ -7857,7 +7949,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -11757,6 +11849,14 @@ msgstr "" msgid "Set Portal Point Position" msgstr "" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Position" +msgstr "" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12037,6 +12137,10 @@ msgstr "" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Build Solution" +msgstr "" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -12503,159 +12607,148 @@ msgstr "" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Uninstalling..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Installing to device, please wait..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not execute on device." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -12663,57 +12756,57 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -12721,54 +12814,54 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package not found: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -12776,19 +12869,19 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Adding files..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13238,6 +13331,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -13527,6 +13628,14 @@ msgstr "" msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13567,6 +13676,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/tzm.po b/editor/translations/tzm.po index 8c7d3f272c..b0d9d05525 100644 --- a/editor/translations/tzm.po +++ b/editor/translations/tzm.po @@ -992,7 +992,7 @@ msgstr "" msgid "Dependencies" msgstr "" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "" @@ -1621,13 +1621,13 @@ msgid "" "Enabled'." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -1997,7 +1997,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "" @@ -2475,6 +2475,30 @@ msgid "Current scene not saved. Open anyway?" msgstr "" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Undo: %s" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Redo: %s" +msgstr "" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "" @@ -3098,6 +3122,10 @@ msgid "Merge With Existing" msgstr "" #: editor/editor_node.cpp +msgid "Apply MeshInstance Transforms" +msgstr "" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "" @@ -3338,6 +3366,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "" @@ -5378,6 +5410,16 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Locked" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Grouped" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6276,7 +6318,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -6860,6 +6906,14 @@ msgstr "" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Occluder Set Transform" +msgstr "" + +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Center Node" +msgstr "" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7354,11 +7408,11 @@ msgid "Skeleton2D" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" +msgid "Reset to Rest Pose" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" +msgid "Overwrite Rest Pose" msgstr "" #: editor/plugins/skeleton_editor_plugin.cpp @@ -7386,6 +7440,60 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7493,42 +7601,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -7790,6 +7878,10 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "View Occlusion Culling" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "" @@ -7855,7 +7947,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -11755,6 +11847,14 @@ msgstr "" msgid "Set Portal Point Position" msgstr "" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Position" +msgstr "" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12035,6 +12135,10 @@ msgstr "" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +msgid "Build Solution" +msgstr "" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -12501,159 +12605,148 @@ msgstr "" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Uninstalling..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Installing to device, please wait..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not execute on device." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -12661,57 +12754,57 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -12719,54 +12812,54 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package not found: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -12774,19 +12867,19 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Adding files..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13236,6 +13329,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -13525,6 +13626,14 @@ msgstr "" msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13565,6 +13674,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/uk.po b/editor/translations/uk.po index a889e83e19..fd9f2a1b8a 100644 --- a/editor/translations/uk.po +++ b/editor/translations/uk.po @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: Ukrainian (Godot Engine)\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2021-08-04 12:10+0000\n" +"PO-Revision-Date: 2021-08-12 21:32+0000\n" "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" "Language-Team: Ukrainian <https://hosted.weblate.org/projects/godot-engine/" "godot/uk/>\n" @@ -383,15 +383,13 @@ msgstr "Вставити анімацію" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "node '%s'" -msgstr "Неможливо відкрити '%s'." +msgstr "вузол «%s»" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "animation" -msgstr "Анімація" +msgstr "анімація" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." @@ -399,9 +397,8 @@ msgstr "AnimationPlayer не може анімувати себе, лише ін #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "property '%s'" -msgstr "Властивості «%s» не існує." +msgstr "властивість «%s»" #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -1042,7 +1039,7 @@ msgstr "" msgid "Dependencies" msgstr "Залежності" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Ресурс" @@ -1700,13 +1697,13 @@ msgstr "" "Увімкніть пункт «Імпортувати Pvrtc» у параметрах проєкту або вимкніть пункт " "«Увімкнено резервні драйвери»." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "Нетипового шаблону діагностики не знайдено." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2092,7 +2089,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "Імпортування ресурсів" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "Верхівка" @@ -2329,6 +2326,9 @@ msgid "" "Update Continuously is enabled, which can increase power usage. Click to " "disable it." msgstr "" +"Обертається під час перемальовування вікна редактора.\n" +"Увімкнено неперервне оновлення, яке може призвести до збільшення споживання " +"енергії. Клацніть, щоб вимкнути його." #: editor/editor_node.cpp msgid "Spins when the editor window redraws." @@ -2604,6 +2604,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "Поточна сцена не збережена. Відкрити в будь-якому випадку?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "Скасувати" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "Повернути" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "Неможливо перезавантажити сцену, яку ніколи не зберігали." @@ -3293,6 +3319,11 @@ msgid "Merge With Existing" msgstr "Об'єднати з існуючим" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Змінити перетворення" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "Відкрити і запустити скрипт" @@ -3550,6 +3581,10 @@ msgstr "" "Тип вибраного ресурсу (%s) не відповідає типу, який є очікуваним для цієї " "властивості (%s)." +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "Зробити унікальним" @@ -3845,14 +3880,12 @@ msgid "Download from:" msgstr "Джерело отримання:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Open in Web Browser" -msgstr "Запустити в браузері" +msgstr "Відкрити у браузері" #: editor/export_template_manager.cpp -#, fuzzy msgid "Copy Mirror URL" -msgstr "Помилка копіювання" +msgstr "Копіювати адресу дзеркала" #: editor/export_template_manager.cpp msgid "Download and Install" @@ -5662,6 +5695,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "Пересунути CanvasItem «%s» до (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "Заблокувати позначене" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Групи" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6602,7 +6647,13 @@ msgid "Remove Selected Item" msgstr "Вилучити вибраний елемент" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +#, fuzzy +msgid "Import from Scene (Ignore Transforms)" +msgstr "Імпортувати зі сцени" + +#: editor/plugins/mesh_library_editor_plugin.cpp +#, fuzzy +msgid "Import from Scene (Apply Transforms)" msgstr "Імпортувати зі сцени" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7194,6 +7245,16 @@ msgstr "Створити точки" msgid "Flip Portal" msgstr "Віддзеркалити портал" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "Зняти перетворення" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Створити вузол" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "AnimationTree не містить встановлено шляху до AnimationPlayer" @@ -7700,12 +7761,14 @@ msgid "Skeleton2D" msgstr "Плоский каркас" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "Створити вільну позу (з кісток)" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "Встановити кістки для вільної пози" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "Встановити кістки для вільної пози" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "Перезаписати" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7732,6 +7795,71 @@ msgid "Perspective" msgstr "Перспектива" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Orthogonal" +msgstr "Ортогонально" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Perspective" +msgstr "Перспектива" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Orthogonal" +msgstr "Ортогонально" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "Перспектива" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Left Orthogonal" +msgstr "Ортогонально" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Perspective" +msgstr "Перспектива" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Orthogonal" +msgstr "Ортогонально" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Orthogonal" +msgstr "Ортогонально" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Perspective" +msgstr "Перспектива" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Orthogonal" +msgstr "Ортогонально" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Perspective" +msgstr "Перспектива" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "Перетворення перервано." @@ -7839,42 +7967,22 @@ msgid "Bottom View." msgstr "Вигляд знизу." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "Знизу" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "Вигляд зліва." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "Зліва" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "Вигляд справа." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "Справа" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "Вигляд спереду." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "Спереду" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "Вигляд ззаду." #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "Ззаду" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "Вирівняти перетворення з переглядом" @@ -8146,6 +8254,11 @@ msgid "View Portal Culling" msgstr "Переглянути відбраковування Portal" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "Переглянути відбраковування Portal" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "Параметри…" @@ -8211,8 +8324,9 @@ msgid "Post" msgstr "Після" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" -msgstr "Штука без назви" +#, fuzzy +msgid "Unnamed Gizmo" +msgstr "Проєкт без назви" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Mesh2D" @@ -8671,6 +8785,9 @@ msgid "" "Select a theme type from the list to edit its items.\n" "You can add a custom type or import a type with its items from another theme." msgstr "" +"Виберіть тип теми зі списку, щоб редагувати його записи.\n" +"Ви можете додати нетиповий тип або імпортувати тип із його записами з іншої " +"теми." #: editor/plugins/theme_editor_plugin.cpp msgid "Remove All Color Items" @@ -8701,6 +8818,8 @@ msgid "" "This theme type is empty.\n" "Add more items to it manually or by importing from another theme." msgstr "" +"Цей тип теми є порожнім.\n" +"Додайте до нього записи вручну або імпортуванням з іншої теми." #: editor/plugins/theme_editor_plugin.cpp msgid "Add Color Item" @@ -12338,14 +12457,22 @@ msgid "Change Ray Shape Length" msgstr "Змінити довжину форми променя" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Set Room Point Position" -msgstr "Задати положення точки кривої" +msgstr "Задати положення точки кімнати" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Set Portal Point Position" -msgstr "Задати положення точки кривої" +msgstr "Задати положення точки порталу" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Radius" +msgstr "Змінити радіус форми циліндра" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr "Встановити криву в позиції" #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" @@ -12630,6 +12757,11 @@ msgstr "Креслення карт освітлення" msgid "Class name can't be a reserved keyword" msgstr "Назвою класу не може бути зарезервоване ключове слово" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "Заповнити позначене" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "Кінець трасування стека для внутрішнього виключення" @@ -13113,69 +13245,69 @@ msgstr "Шукати VisualScript" msgid "Get %s" msgstr "Отримати %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "Не вказано назви пакунка." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "Сегменти пакунка повинні мати ненульову довжину." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" "Не можна використовувати у назві пакунка програми на Android символи «%s»." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "Цифра не може бути першим символом у сегменті пакунка." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" "Не можна використовувати символ «%s» як перший символ назви сегмента пакунка." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "У назві пакунка має бути принаймні один роздільник «.»." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "Вибрати пристрій зі списку" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "Запущено на %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting APK..." msgstr "Експортування APK…" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Uninstalling..." msgstr "Вилучення…" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Installing to device, please wait..." msgstr "Встановлення на пристрій. Будь ласка, зачекайте..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" msgstr "Не вдалося встановити на пристрій: %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "Запуск на пристрої…" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not execute on device." msgstr "Не вдалося виконати на пристрої." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "Не вдалося знайти програму apksigner." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." @@ -13183,7 +13315,7 @@ msgstr "" "У проєкті не встановлено шаблон збирання Android. Встановіть його за " "допомогою меню «Проєкт»." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." @@ -13191,13 +13323,13 @@ msgstr "" "Має бути налаштовано діагностику сховища ключів, діагностику користувача АБО " "діагностику пароля АБО не налаштовано діагностику жодного з цих компонентів." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" "Ні у параметрах редактора, ні у шаблоні не налаштовано діагностичне сховище " "ключів." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." @@ -13205,53 +13337,53 @@ msgstr "" "Має бути налаштовано параметри сховища ключів випуску, користувача випуску і " "пароля випуску або не налаштовано жоден з цих параметрів." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" "У шаблоні експортування неправильно налаштовано сховище ключів випуску." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" "У параметрах редактора має бути вказано коректний шлях до SDK для Android." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "Некоректний шлях до SDK для Android у параметрах редактора." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "Не знайдено каталогу «platform-tools»!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" "Не вдалося знайти програми adb із інструментів платформи SDK для Android." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" "Будь ласка, перевірте, чи правильно вказано каталог SDK для Android у " "параметрах редактора." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "Не знайдено каталогу «build-tools»!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" "Не вдалося знайти програми apksigner з інструментів збирання SDK для Android." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "Некоректний відкритий ключ для розгортання APK." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "Некоректна назва пакунка:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" @@ -13259,41 +13391,26 @@ msgstr "" "Некоректний модуль «GodotPaymentV3» включено до параметрів проєкту «android/" "modules» (змінено у Godot 3.2.2).\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" "Щоб можна було користуватися додатками, слід позначити пункт " "«Використовувати нетипову збірку»." -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" -"«.Степені свободи» працюють, лише якщо «Режим Xr» має значення «Oculus " -"Mobile VR»." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" "«Стеженням за руками» можна скористатися, лише якщо «Режим Xr» дорівнює " "«Oculus Mobile VR»." -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" -"«Врахуванням фокуса» можна скористатися, лише якщо «Режим Xr» дорівнює " -"«Oculus Mobile VR»." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" "Пункт «Експортувати AAB» є чинним, лише якщо увімкнено «Використовувати " "нетипове збирання»." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13305,54 +13422,54 @@ msgstr "" "засобів для розробки Android.\n" "Отриманий у результаті %s не підписано." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "Підписування діагностики %s…" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." msgstr "Підписування випуску %s…" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "Не вдалося знайти сховище ключів. Неможливо виконати експортування." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "«apksigner» повернуто повідомлення про помилку із номером %d" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." msgstr "Перевіряємо %s…" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "%s не пройдено перевірку за допомогою «apksigner»." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "Експорт на Android" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" "Некоректна назва файла! Пакет програми Android повинен мати суфікс назви *." "aab." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "Розширення APK є несумісним із Android App Bundle." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" "Некоректна назва файла! Пакунок Android APK повинен мати суфікс назви *.apk." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "Непідтримуваний формат експортування!\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." @@ -13361,7 +13478,7 @@ msgstr "" "виявлено даних щодо версії. Будь ласка, повторно встановіть шаблон за " "допомогою меню «Проєкт»." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13374,25 +13491,25 @@ msgstr "" "Будь ласка, повторно встановіть шаблон для збирання для Android за допомогою " "меню «Проєкт»." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" "Не вдалося перезаписати файли res://android/build/res/*.xml із назвою проєкту" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "Не вдалося експортувати файли проєкту до проєкту gradle\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "Не вдалося записати файл пакунка розширення!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "Збирання проєкту Android (gradle)" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." @@ -13402,11 +13519,11 @@ msgstr "" "Крім того, можете відвідати docs.godotengine.org і ознайомитися із " "документацією щодо збирання для Android." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "Пересування виведених даних" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." @@ -13414,15 +13531,15 @@ msgstr "" "Не вдалося скопіювати і перейменувати файл експортованих даних. Виведені " "дані можна знайти у каталозі проєкту gradle." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package not found: %s" msgstr "Пакунок не знайдено: %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." msgstr "Створення APK…" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" @@ -13430,7 +13547,7 @@ msgstr "" "Не вдалося знайти шаблон APK для експортування:\n" "%s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13441,19 +13558,19 @@ msgstr "" "Будь ласка, створіть шаблон з усіма необхідними бібліотеками або зніміть " "позначку з архітектур із пропущеними бібліотеками у стилі експортування." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Adding files..." msgstr "Додавання файлів…" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files" msgstr "Не вдалося експортувати файли проєкту" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "Вирівнюємо APK..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "Не вдалося розпакувати тимчасовий невирівняний APK." @@ -14000,6 +14117,14 @@ msgstr "" "NavigationMeshInstance має бути дочірнім елементом вузла Navigation або " "елементом ще нижчої підпорядкованості. Він надає лише навігаційні дані." +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14144,36 +14269,50 @@ msgid "" "RoomList path is invalid.\n" "Please check the RoomList branch has been assigned in the RoomManager." msgstr "" +"Шлях RoomList є некоректним.\n" +"Будь ласка, перевірте, що у RoomManager вказано значення гілки RoomList." #: scene/3d/room_manager.cpp msgid "RoomList contains no Rooms, aborting." -msgstr "" +msgstr "RoomList не містить записів кімнат, перериваємо обробку." #: scene/3d/room_manager.cpp msgid "Misnamed nodes detected, check output log for details. Aborting." msgstr "" +"Виявлено вузли із помилковими назвами. Ознайомтеся із записами журналу, щоб " +"дізнатися більше. Перериваємо обробку." #: scene/3d/room_manager.cpp msgid "Portal link room not found, check output log for details." msgstr "" +"Не виявлено кімнати посилання на портал. Ознайомтеся із журналом, щоб " +"дізнатися більше." #: scene/3d/room_manager.cpp msgid "" "Portal autolink failed, check output log for details.\n" "Check the portal is facing outwards from the source room." msgstr "" +"Помилка під час спроби автоматично пов'язати портал. Ознайомтеся із " +"журналом, щоб дізнатися більше.\n" +"Перевірте, чи веде портал назовні щодо початкової кімнати." #: scene/3d/room_manager.cpp msgid "" "Room overlap detected, cameras may work incorrectly in overlapping area.\n" "Check output log for details." msgstr "" +"Виявлено перекриття кімнат. У області перекриття камери можуть працювати із " +"помилками.\n" +"Ознайомтеся із журналом, щоб дізнатися більше." #: scene/3d/room_manager.cpp msgid "" "Error calculating room bounds.\n" "Ensure all rooms contain geometry or manual bounds." msgstr "" +"Помилка під час спроби обчислити межі кімнат.\n" +"Переконайтеся, що для усіх кімнат вказано межі вручну або геометричні межі." #: scene/3d/soft_body.cpp msgid "This body will be ignored until you set a mesh." @@ -14340,6 +14479,14 @@ msgstr "Необхідно використовувати допустиме р msgid "Enable grid minimap." msgstr "Увімкнути мінікарту ґратки." +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14395,6 +14542,10 @@ msgstr "" "Щоб програма могла хоч щось показати, розмір поля перегляду має бути більшим " "за 0." +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " @@ -14453,6 +14604,41 @@ msgstr "Призначення однорідного." msgid "Constants cannot be modified." msgstr "Сталі не можна змінювати." +#~ msgid "Make Rest Pose (From Bones)" +#~ msgstr "Створити вільну позу (з кісток)" + +#~ msgid "Bottom" +#~ msgstr "Знизу" + +#~ msgid "Left" +#~ msgstr "Зліва" + +#~ msgid "Right" +#~ msgstr "Справа" + +#~ msgid "Front" +#~ msgstr "Спереду" + +#~ msgid "Rear" +#~ msgstr "Ззаду" + +#~ msgid "Nameless gizmo" +#~ msgstr "Штука без назви" + +#~ msgid "" +#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile " +#~ "VR\"." +#~ msgstr "" +#~ "«.Степені свободи» працюють, лише якщо «Режим Xr» має значення «Oculus " +#~ "Mobile VR»." + +#~ msgid "" +#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" +#~ "\"." +#~ msgstr "" +#~ "«Врахуванням фокуса» можна скористатися, лише якщо «Режим Xr» дорівнює " +#~ "«Oculus Mobile VR»." + #~ msgid "Package Contents:" #~ msgstr "Вміст пакунка:" diff --git a/editor/translations/ur_PK.po b/editor/translations/ur_PK.po index fb70bc5703..332f5bd681 100644 --- a/editor/translations/ur_PK.po +++ b/editor/translations/ur_PK.po @@ -1014,7 +1014,7 @@ msgstr "" msgid "Dependencies" msgstr "" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "" @@ -1649,13 +1649,13 @@ msgid "" "Enabled'." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2042,7 +2042,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "" @@ -2528,6 +2528,30 @@ msgid "Current scene not saved. Open anyway?" msgstr "" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Undo: %s" +msgstr "" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +msgid "Redo: %s" +msgstr "" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "" @@ -3162,6 +3186,10 @@ msgid "Merge With Existing" msgstr "" #: editor/editor_node.cpp +msgid "Apply MeshInstance Transforms" +msgstr "" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "" @@ -3406,6 +3434,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "" @@ -5510,6 +5542,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr ".تمام کا انتخاب" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr ".تمام کا انتخاب" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6435,7 +6479,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7035,6 +7083,15 @@ msgstr ".تمام کا انتخاب" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Occluder Set Transform" +msgstr "" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr ".اینیمیشن کی کیز کو ڈیلیٹ کرو" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7541,11 +7598,12 @@ msgid "Skeleton2D" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "سب سکریپشن بنائیں" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" +msgid "Overwrite Rest Pose" msgstr "" #: editor/plugins/skeleton_editor_plugin.cpp @@ -7574,6 +7632,60 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -7684,42 +7796,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp #, fuzzy msgid "Align Transform with View" msgstr ".تمام کا انتخاب" @@ -7986,6 +8078,11 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "سب سکریپشن بنائیں" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "" @@ -8051,7 +8148,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -12100,6 +12197,15 @@ msgstr ".تمام کا انتخاب" msgid "Set Portal Point Position" msgstr ".تمام کا انتخاب" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr ".تمام کا انتخاب" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12392,6 +12498,11 @@ msgstr "" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr ".تمام کا انتخاب" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -12880,162 +12991,151 @@ msgstr "سب سکریپشن بنائیں" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting APK..." msgstr ".سپورٹ" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Uninstalling..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Installing to device, please wait..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not install to device: %s" msgstr "سب سکریپشن بنائیں" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not execute on device." msgstr "سب سکریپشن بنائیں" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13043,57 +13143,57 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13101,55 +13201,55 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not write expansion package file!" msgstr "سب سکریپشن بنائیں" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package not found: %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13157,21 +13257,21 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Adding files..." msgstr ".تمام کا انتخاب" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files" msgstr "سب سکریپشن بنائیں" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13624,6 +13724,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -13913,6 +14021,14 @@ msgstr "" msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -13953,6 +14069,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/vi.po b/editor/translations/vi.po index d50d622215..518c301ca6 100644 --- a/editor/translations/vi.po +++ b/editor/translations/vi.po @@ -24,8 +24,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2021-08-02 02:00+0000\n" -"Last-Translator: Rev <revolnoom7801@gmail.com>\n" +"PO-Revision-Date: 2021-09-15 00:46+0000\n" +"Last-Translator: IoeCmcomc <hopdaigia2004@gmail.com>\n" "Language-Team: Vietnamese <https://hosted.weblate.org/projects/godot-engine/" "godot/vi/>\n" "Language: vi\n" @@ -33,7 +33,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.8-dev\n" +"X-Generator: Weblate 4.9-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -383,7 +383,7 @@ msgstr "Chèn Anim" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp msgid "node '%s'" -msgstr "" +msgstr "nút '%s'" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp @@ -605,9 +605,8 @@ msgid "Go to Previous Step" msgstr "Đến Bước trước đó" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Apply Reset" -msgstr "Đặt lại phóng" +msgstr "Áp dụng đặt lại" #: editor/animation_track_editor.cpp msgid "Optimize Animation" @@ -803,8 +802,8 @@ msgid "" "Target method not found. Specify a valid method or attach a script to the " "target node." msgstr "" -"Phương thức không tìm thấy. Chỉ định phương thức hợp lệ hoặc đính kèm tệp " -"lệnh vào nút." +"Phương thức không được tìm thấy. Chỉ định phương thức hợp lệ hoặc đính kèm " +"tệp lệnh vào nút." #: editor/connections_dialog.cpp msgid "Connect to Node:" @@ -921,7 +920,7 @@ msgstr "Hủy kết nối" #: editor/connections_dialog.cpp msgid "Connect a Signal to a Method" -msgstr "Kết nối tín hiệu vào hàm" +msgstr "Kết nối tín hiệu vào một hàm" #: editor/connections_dialog.cpp msgid "Edit Connection:" @@ -952,9 +951,8 @@ msgid "Edit..." msgstr "Chỉnh sửa..." #: editor/connections_dialog.cpp -#, fuzzy msgid "Go to Method" -msgstr "Đến Method" +msgstr "Đi đến phương thức" #: editor/create_dialog.cpp msgid "Change %s Type" @@ -1034,7 +1032,7 @@ msgstr "" msgid "Dependencies" msgstr "Các phụ thuộc" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "Tài nguyên" @@ -1166,7 +1164,7 @@ msgstr "Cảm ơn từ cộng đồng Godot!" #: editor/editor_about.cpp editor/editor_node.cpp editor/project_manager.cpp msgid "Click to copy." -msgstr "" +msgstr "Nháy để sao chép." #: editor/editor_about.cpp msgid "Godot Engine contributors" @@ -1291,9 +1289,8 @@ msgid "The following files failed extraction from asset \"%s\":" msgstr "Không thể lấy các tệp sau khỏi gói:" #: editor/editor_asset_installer.cpp -#, fuzzy msgid "(and %s more files)" -msgstr "Và %s tệp nữa." +msgstr "(và %s tệp nữa)" #: editor/editor_asset_installer.cpp #, fuzzy @@ -1573,9 +1570,8 @@ msgid "Name" msgstr "Tên" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Global Variable" -msgstr "Đổi tên Biến" +msgstr "Biến toàn cục" #: editor/editor_data.cpp msgid "Paste Params" @@ -1697,13 +1693,13 @@ msgstr "" "Chọn kích hoạt 'Nhập PVRTC' trong Cài đặt Dự án, hoặc tắt 'Kích hoạt Driver " "Tương thích Ngược'." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "Không tìm thấy mẫu gỡ lỗi tuỳ chỉnh." -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -1784,7 +1780,7 @@ msgstr "(Hiện tại)" #: editor/editor_feature_profile.cpp msgid "(none)" -msgstr "" +msgstr "(không có)" #: editor/editor_feature_profile.cpp msgid "Remove currently selected profile, '%s'? Cannot be undone." @@ -1819,19 +1815,16 @@ msgid "Enable Contextual Editor" msgstr "Bật trình chỉnh sửa ngữ cảnh" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Class Properties:" -msgstr "Thuộc tính:" +msgstr "Thuộc tính lớp:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Main Features:" -msgstr "Tính năng" +msgstr "Tính năng chính:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Nodes and Classes:" -msgstr "Lớp đã bật:" +msgstr "Các nút và lớp:" #: editor/editor_feature_profile.cpp msgid "File '%s' format is invalid, import aborted." @@ -1857,14 +1850,12 @@ msgid "Current Profile:" msgstr "Hồ sơ hiện tại:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Create Profile" -msgstr "Xoá hồ sơ" +msgstr "Tạo hồ sơ" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Remove Profile" -msgstr "Xóa Ô" +msgstr "Xóa hồ sơ" #: editor/editor_feature_profile.cpp msgid "Available Profiles:" @@ -1884,14 +1875,12 @@ msgid "Export" msgstr "Xuất ra" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Configure Selected Profile:" -msgstr "Hồ sơ hiện tại:" +msgstr "Cấu hình hồ sơ được chọn:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Extra Options:" -msgstr "Tuỳ chọn Lớp:" +msgstr "Tuỳ chọn bổ sung:" #: editor/editor_feature_profile.cpp msgid "Create or import a profile to edit available classes and properties." @@ -1922,9 +1911,8 @@ msgid "Select Current Folder" msgstr "Chọn thư mục hiện tại" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "File exists, overwrite?" -msgstr "Tệp tin tồn tại, ghi đè?" +msgstr "Tệp đã tồn tại, ghi đè chứ?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Select This Folder" @@ -2085,7 +2073,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "Nhập lại tài nguyên" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "Trên đầu" @@ -2124,7 +2112,7 @@ msgstr "mặc định:" #: editor/editor_help.cpp msgid "Methods" -msgstr "Hàm" +msgstr "Phương thức" #: editor/editor_help.cpp msgid "Theme Properties" @@ -2156,7 +2144,7 @@ msgstr "" #: editor/editor_help.cpp msgid "Method Descriptions" -msgstr "Nội dung Hàm" +msgstr "Mô tả phương thức" #: editor/editor_help.cpp msgid "" @@ -2189,7 +2177,7 @@ msgstr "Chỉ tìm Lớp" #: editor/editor_help_search.cpp msgid "Methods Only" -msgstr "Chỉ tìm Hàm" +msgstr "Chỉ tìm phương thức" #: editor/editor_help_search.cpp msgid "Signals Only" @@ -2217,7 +2205,7 @@ msgstr "Lớp" #: editor/editor_help_search.cpp msgid "Method" -msgstr "Hàm" +msgstr "Phương thức" #: editor/editor_help_search.cpp editor/plugins/script_text_editor.cpp msgid "Signal" @@ -2590,6 +2578,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "Cảnh hiện tại chưa lưu. Kệ mở luôn?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "Hoàn tác" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "Làm lại" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "Không thể nạp một cảnh chưa lưu bao giờ." @@ -2938,9 +2952,8 @@ msgid "Orphan Resource Explorer..." msgstr "Tìm kiếm tài nguyên mất gốc..." #: editor/editor_node.cpp -#, fuzzy msgid "Reload Current Project" -msgstr "Đổi tên Dự án" +msgstr "Tải lại dự án hiện tại" #: editor/editor_node.cpp msgid "Quit to Project List" @@ -2998,7 +3011,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Visible Navigation" -msgstr "" +msgstr "Điều hướng nhìn thấy được" #: editor/editor_node.cpp msgid "" @@ -3096,7 +3109,7 @@ msgstr "Mở Hướng dẫn" #: editor/editor_node.cpp msgid "Questions & Answers" -msgstr "" +msgstr "Hỏi đáp" #: editor/editor_node.cpp msgid "Report a Bug" @@ -3115,9 +3128,8 @@ msgid "Community" msgstr "Cộng đồng" #: editor/editor_node.cpp -#, fuzzy msgid "About Godot" -msgstr "Về chúng tôi" +msgstr "Về Godot" #: editor/editor_node.cpp msgid "Support Godot Development" @@ -3211,9 +3223,8 @@ msgid "Manage Templates" msgstr "Quản lý Mẫu xuất bản" #: editor/editor_node.cpp -#, fuzzy msgid "Install from file" -msgstr "Cài đặt từ File" +msgstr "Cài đặt từ tệp" #: editor/editor_node.cpp #, fuzzy @@ -3265,6 +3276,11 @@ msgid "Merge With Existing" msgstr "Hợp nhất với Hiện có" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "Đổi Transform Animation" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "Mở & Chạy mã lệnh" @@ -3365,9 +3381,8 @@ msgid "Update" msgstr "Cập nhật" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Version" -msgstr "Phiên bản:" +msgstr "Phiên bản" #: editor/editor_plugin_settings.cpp #, fuzzy @@ -3385,14 +3400,12 @@ msgid "Measure:" msgstr "Đo đạc:" #: editor/editor_profiler.cpp -#, fuzzy msgid "Frame Time (ms)" -msgstr "Thời gian khung hình (giây)" +msgstr "Thời gian khung hình (ms)" #: editor/editor_profiler.cpp -#, fuzzy msgid "Average Time (ms)" -msgstr "Thời gian trung bình (giây)" +msgstr "Thời gian trung bình (ms)" #: editor/editor_profiler.cpp msgid "Frame %" @@ -3516,6 +3529,10 @@ msgid "" msgstr "" "Kiểu của tài nguyên đã chọn (%s) không dùng được cho thuộc tính này (%s)." +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "Duy nhất" @@ -4211,7 +4228,7 @@ msgstr "Xoá Nhóm" #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" -msgstr "Nhóm (Groups)" +msgstr "Nhóm" #: editor/groups_editor.cpp msgid "Nodes Not in Group" @@ -5623,6 +5640,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "Di chuyển CanvasItem \"%s\" tới (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "Khoá lựa chọn" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Nhóm" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6564,7 +6593,13 @@ msgid "Remove Selected Item" msgstr "Xóa mục đã chọn" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +#, fuzzy +msgid "Import from Scene (Ignore Transforms)" +msgstr "Nhập từ Cảnh" + +#: editor/plugins/mesh_library_editor_plugin.cpp +#, fuzzy +msgid "Import from Scene (Apply Transforms)" msgstr "Nhập từ Cảnh" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7161,6 +7196,16 @@ msgstr "Xóa Point" msgid "Flip Portal" msgstr "Lật Ngang" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "Xóa biến đổi" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "Tạo Nút" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "AnimationTree chưa đặt đường dẫn đến AnimationPlayer nào" @@ -7468,7 +7513,7 @@ msgstr "Dòng" #: editor/plugins/script_text_editor.cpp msgid "Go to Function" -msgstr "Đi tới Hàm" +msgstr "Đi tới hàm" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." @@ -7611,7 +7656,7 @@ msgstr "Xóa hết mọi dấu trang" #: editor/plugins/script_text_editor.cpp msgid "Go to Function..." -msgstr "Đi tới Hàm..." +msgstr "Đi tới hàm..." #: editor/plugins/script_text_editor.cpp msgid "Go to Line..." @@ -7663,12 +7708,14 @@ msgid "Skeleton2D" msgstr "Skeleton2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "Tạo tư thế nghỉ (Từ Xương)" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "Đặt Xương thành Tư thế Nghỉ" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "Đặt Xương thành Tư thế Nghỉ" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "Ghi đè" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7695,6 +7742,71 @@ msgid "Perspective" msgstr "Phối cảnh" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Orthogonal" +msgstr "Vuông góc" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Perspective" +msgstr "Phối cảnh" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Orthogonal" +msgstr "Vuông góc" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "Phối cảnh" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Left Orthogonal" +msgstr "Vuông góc" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Perspective" +msgstr "Phối cảnh" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Orthogonal" +msgstr "Vuông góc" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Orthogonal" +msgstr "Vuông góc" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Perspective" +msgstr "Phối cảnh" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Orthogonal" +msgstr "Vuông góc" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Perspective" +msgstr "Phối cảnh" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "Hủy Biến đổi." @@ -7811,42 +7923,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "Dưới" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "Trái" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "Phải" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "Trước" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -8116,6 +8208,11 @@ msgid "View Portal Culling" msgstr "Cài đặt Cổng xem" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "Cài đặt Cổng xem" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "Cài đặt..." @@ -8181,8 +8278,9 @@ msgid "Post" msgstr "Sau" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" -msgstr "" +#, fuzzy +msgid "Unnamed Gizmo" +msgstr "Dự án không tên" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Mesh2D" @@ -8974,7 +9072,7 @@ msgstr "" #: editor/plugins/theme_editor_preview.cpp msgid "Submenu" -msgstr "Menu phụ" +msgstr "Bảng chọn phụ" #: editor/plugins/theme_editor_preview.cpp msgid "Subitem 1" @@ -9678,18 +9776,16 @@ msgid "Create Shader Node" msgstr "Tạo nút Shader" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Color function." -msgstr "Thêm Hàm" +msgstr "hàm màu" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Color operator." msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Grayscale function." -msgstr "Tạo Function" +msgstr "hàm đen trắng" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Converts HSV vector to RGB equivalent." @@ -12339,6 +12435,16 @@ msgstr "Đặt vị trí điểm uốn" msgid "Set Portal Point Position" msgstr "Đặt vị trí điểm uốn" +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Radius" +msgstr "Chỉnh bán kính hình trụ" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr "Đặt vị trí điểm uốn" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "Thay Đổi Bán Kính Hình Trụ" @@ -12630,6 +12736,11 @@ msgstr "" msgid "Class name can't be a reserved keyword" msgstr "Tên Lớp không được trùng với từ khóa" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "Chọn tất cả" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -13109,138 +13220,138 @@ msgstr "Tìm VisualScript" msgid "Get %s" msgstr "Lấy %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "Thiếu tên gói." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "Các phân đoạn của gói phải có độ dài khác không." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "Không được phép cho kí tự '%s' vào tên gói phần mềm Android." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "Không thể có chữ số làm kí tự đầu tiên trong một phần của gói." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "Kí tự '%s' không thể ở đầu trong một phân đoạn của gói." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "Kí tự phân cách '.' phải xuất hiện ít nhất một lần trong tên gói." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "Chọn thiết bị trong danh sách" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting APK..." msgstr "Xuất tất cả" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Uninstalling..." msgstr "Gỡ cài đặt" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Installing to device, please wait..." msgstr "Đang tải, đợi xíu..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not install to device: %s" msgstr "Không thể bắt đầu quá trình phụ!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Running on device..." msgstr "Chạy Tệp lệnh Tự chọn ..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not execute on device." msgstr "Không thể tạo folder." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "Không tìm thấy công cụ 'apksigner'." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -"Mẫu xuất bản cho Android chưa được cài đặt trong dự án. Cài đặt nó từ menu " -"Dự Án." +"Bản mẫu dựng cho Android chưa được cài đặt trong dự án. Cài đặt nó từ bảng " +"chọn Dự Án." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "Cài đặt Trình biên tập yêu cầu một đường dẫn Android SDK hợp lệ." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "Đường dẫn Android SDK không hợp lệ trong Cài đặt Trình biên tập." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "Thiếu thư mục 'platform-tools'!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "Không tìm thấy lệnh adb trong bộ Android SDK platform-tools." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" "Hãy kiểm tra thư mục Android SDK được cung cấp ở Cài đặt Trình biên tập." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "Thiếu thư mục 'build-tools'!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "Không tìm thấy lệnh apksigner của bộ Android SDK build-tools." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "Khóa công khai của bộ APK mở rộng không hợp lệ." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "Tên gói không hợp lệ:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" @@ -13248,34 +13359,23 @@ msgstr "" "Cài đặt dự án chứa module không hợp lệ \"GodotPaymentV3\" ở mục \"android/" "modules\" (đã thay đổi từ Godot 3.2.2).\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "\"Sử dụng Bản dựng tùy chỉnh\" phải được bật để sử dụng các tiện ích." -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "\"Bậc tự do\" chỉ dùng được khi \"Xr Mode\" là \"Oculus Mobile VR\"." - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" "\"Theo dõi chuyển động tay\" chỉ dùng được khi \"Xr Mode\" là \"Oculus " "Mobile VR\"." -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" "\"Xuất AAB\" chỉ dùng được khi \"Sử dụng Bản dựng tùy chỉnh\" được bật." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13283,97 +13383,97 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Signing release %s..." msgstr "" "Đang quét các tệp tin,\n" "Chờ một chút ..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not find keystore, unable to export." msgstr "Không thể mở bản mẫu để xuất:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Verifying %s..." msgstr "Đang thêm %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting for Android" msgstr "Xuất tất cả" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "Tên tệp không hợp lệ! Android App Bundle cần đuôi *.aab ở cuối." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "APK Expansion not compatible with Android App Bundle." msgstr "Đuôi APK không tương thích với Android App Bundle." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "Tên tệp không hợp lệ! Android APK cần đuôi *.apk ở cuối." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -"Cố gắng xây dựng từ một mẫu xuất bản tùy chỉnh, nhưng không có thông tin " -"phiên bản nào tồn tại. Vui lòng cài đặt lại từ menu 'Dự án'." +"Cố gắng dựng từ một bản mẫu được dựng tùy chỉnh, nhưng không có thông tin " +"phiên bản nào tồn tại. Vui lòng cài đặt lại từ bảng chọn'Dự án'." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" " Godot Version: %s\n" "Please reinstall Android build template from 'Project' menu." msgstr "" -"Phiên bản xây dựng Android không khớp:\n" -" Mẫu xuất bản được cài đặt: %s\n" -" Phiên bản Godot sử dụng: %s\n" -"Vui lòng cài đặt lại mẫu xuất bản Android từ menu 'Dự Án'." +"Phiên bản dựng Android không khớp:\n" +" Bản mẫu được cài đặt: %s\n" +" Phiên bản Godot: %s\n" +"Vui lòng cài đặt lại bản mẫu Android từ bảng chọn 'Dự Án'." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files to gradle project\n" msgstr "Không thể chỉnh sửa 'project.godot' trong đường dẫn dự án." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not write expansion package file!" msgstr "Không viết được file:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "Đang dựng dự án Android (gradle)" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." @@ -13381,11 +13481,11 @@ msgstr "" "Xây dựng dự án Android thất bại, hãy kiểm tra đầu ra để biết lỗi.\n" "Hoặc truy cập 'docs.godotengine.org' để xem cách xây dựng Android." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." @@ -13393,24 +13493,24 @@ msgstr "" "Không thể sao chép và đổi tên tệp xuất, hãy kiểm tra thư mục Gradle của dự " "án để xem kết quả." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "Không tìm thấy Animation: '%s'" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Creating APK..." msgstr "Tạo đường viền ..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" "Could not find template APK to export:\n" "%s" msgstr "Không thể mở bản mẫu để xuất:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13418,21 +13518,21 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Adding files..." msgstr "Đang thêm %s..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files" msgstr "Không viết được file:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13941,6 +14041,14 @@ msgstr "" "NavigationMeshInstance phải là nút con hoặc cháu một nút Navigation. Nó chỉ " "cung cấp dữ liệu điều hướng." +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14237,6 +14345,14 @@ msgstr "Sử dụng phần mở rộng hợp lệ." msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp #, fuzzy msgid "" @@ -14283,6 +14399,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " @@ -14334,6 +14454,27 @@ msgstr "" msgid "Constants cannot be modified." msgstr "Không thể chỉnh sửa hằng số." +#~ msgid "Make Rest Pose (From Bones)" +#~ msgstr "Tạo tư thế nghỉ (Từ Xương)" + +#~ msgid "Bottom" +#~ msgstr "Dưới" + +#~ msgid "Left" +#~ msgstr "Trái" + +#~ msgid "Right" +#~ msgstr "Phải" + +#~ msgid "Front" +#~ msgstr "Trước" + +#~ msgid "" +#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile " +#~ "VR\"." +#~ msgstr "" +#~ "\"Bậc tự do\" chỉ dùng được khi \"Xr Mode\" là \"Oculus Mobile VR\"." + #~ msgid "Package Contents:" #~ msgstr "Trong Gói có:" diff --git a/editor/translations/zh_CN.po b/editor/translations/zh_CN.po index 8284ac605e..e8084b8856 100644 --- a/editor/translations/zh_CN.po +++ b/editor/translations/zh_CN.po @@ -83,7 +83,7 @@ msgid "" msgstr "" "Project-Id-Version: Chinese (Simplified) (Godot Engine)\n" "POT-Creation-Date: 2018-01-20 12:15+0200\n" -"PO-Revision-Date: 2021-08-12 14:48+0000\n" +"PO-Revision-Date: 2021-09-06 16:32+0000\n" "Last-Translator: Haoyu Qiu <timothyqiu32@gmail.com>\n" "Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/" "godot-engine/godot/zh_Hans/>\n" @@ -92,7 +92,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.8-dev\n" +"X-Generator: Weblate 4.8.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -440,13 +440,11 @@ msgstr "插入动画" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "node '%s'" -msgstr "无法打开 \"%s\"。" +msgstr "节点“%s”" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "animation" msgstr "动画" @@ -456,9 +454,8 @@ msgstr "AnimationPlayer 不能动画化自己,只可动画化其它 Player。" #. TRANSLATORS: This describes the target of new animation track, will be inserted into another string. #: editor/animation_track_editor.cpp -#, fuzzy msgid "property '%s'" -msgstr "不存在属性“%s”。" +msgstr "属性“%s”" #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -1086,7 +1083,7 @@ msgstr "" msgid "Dependencies" msgstr "依赖" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "资源" @@ -1730,13 +1727,13 @@ msgstr "" "目标平台需要 “PVRTC” 纹理压缩,以便驱动程序回退到 GLES2。\n" "在项目设置中启用 “Import Pvrtc”,或禁用 “Driver Fallback Enabled”。" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "找不到自定义调试模板。" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2086,11 +2083,11 @@ msgstr "目录与文件:" #: editor/editor_file_dialog.cpp editor/plugins/sprite_editor_plugin.cpp #: editor/plugins/style_box_editor_plugin.cpp editor/rename_dialog.cpp msgid "Preview:" -msgstr "预览:" +msgstr "预览:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" -msgstr "文件:" +msgstr "文件:" #: editor/editor_file_system.cpp msgid "ScanSources" @@ -2106,13 +2103,13 @@ msgstr "文件 %s 有不同类型的多个导入器,已中止导入" msgid "(Re)Importing Assets" msgstr "正在导入或重新导入素材" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "顶部" #: editor/editor_help.cpp msgid "Class:" -msgstr "类:" +msgstr "类:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp #: editor/script_create_dialog.cpp @@ -2258,7 +2255,7 @@ msgstr "主题属性" #: editor/editor_inspector.cpp editor/project_settings_editor.cpp msgid "Property:" -msgstr "属性:" +msgstr "属性:" #: editor/editor_inspector.cpp editor/scene_tree_dock.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -2343,6 +2340,8 @@ msgid "" "Update Continuously is enabled, which can increase power usage. Click to " "disable it." msgstr "" +"编辑器窗口重绘时旋转。\n" +"已启用连续更新,会提升耗电量。点击禁用。" #: editor/editor_node.cpp msgid "Spins when the editor window redraws." @@ -2603,6 +2602,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "当前场景尚未保存。是否仍要打开?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "撤销" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "重做" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "无法重新加载从未保存过的场景。" @@ -2716,7 +2741,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Scene '%s' has broken dependencies:" -msgstr "场景 “%s” 的依赖已被破坏:" +msgstr "场景 “%s” 的依赖已被破坏:" #: editor/editor_node.cpp msgid "Clear Recent Scenes" @@ -3260,6 +3285,11 @@ msgid "Merge With Existing" msgstr "与现有合并" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "修改动画变换" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "打开并运行脚本" @@ -3511,6 +3541,10 @@ msgid "" "property (%s)." msgstr "所选资源(%s)与该属性(%s)所需的类型都不匹配。" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "唯一化" @@ -3796,14 +3830,12 @@ msgid "Download from:" msgstr "下载:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Open in Web Browser" -msgstr "在浏览器中运行" +msgstr "在浏览器中打开" #: editor/export_template_manager.cpp -#, fuzzy msgid "Copy Mirror URL" -msgstr "复制错误信息" +msgstr "复制镜像 URL" #: editor/export_template_manager.cpp msgid "Download and Install" @@ -4266,7 +4298,7 @@ msgstr "执行自定义脚本..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" -msgstr "无法载入后导入脚本:" +msgstr "无法载入后导入脚本:" #: editor/import/resource_importer_scene.cpp msgid "Invalid/broken script for post-import (check console):" @@ -4764,7 +4796,7 @@ msgstr "打开/关闭自动播放" #: editor/plugins/animation_player_editor_plugin.cpp msgid "New Animation Name:" -msgstr "新动画名称:" +msgstr "新动画名称:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "New Anim" @@ -4772,7 +4804,7 @@ msgstr "新建动画" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Change Animation Name:" -msgstr "重命名动画:" +msgstr "重命名动画:" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp @@ -4948,7 +4980,7 @@ msgstr "创建新动画" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation Name:" -msgstr "动画名称:" +msgstr "动画名称:" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp @@ -4963,7 +4995,7 @@ msgstr "混合时间:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Next (Auto Queue):" -msgstr "接下来(自动队列):" +msgstr "接下来(自动队列):" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Cross-Animation Blend Times" @@ -5071,7 +5103,7 @@ msgstr "动画树" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "New name:" -msgstr "新名称:" +msgstr "新名称:" #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/plugins/multimesh_editor_plugin.cpp @@ -5096,15 +5128,15 @@ msgstr "混合 (Mix)" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Auto Restart:" -msgstr "自动重新开始:" +msgstr "自动重新开始:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Restart (s):" -msgstr "重新开始(秒):" +msgstr "重新开始(秒):" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Random Restart (s):" -msgstr "随机开始(秒):" +msgstr "随机开始(秒):" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Start!" @@ -5113,7 +5145,7 @@ msgstr "开始!" #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/plugins/multimesh_editor_plugin.cpp msgid "Amount:" -msgstr "数量:" +msgstr "数量:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" @@ -5207,7 +5239,7 @@ msgstr "筛选..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Contents:" -msgstr "内容:" +msgstr "内容:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "View Files" @@ -5283,11 +5315,11 @@ msgstr "文件哈希值错误,该文件可能被篡改。" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Expected:" -msgstr "预计:" +msgstr "预期:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Got:" -msgstr "获得:" +msgstr "获得:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Failed SHA-256 hash check" @@ -5579,6 +5611,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "移动 CanvasItem “%s” 至 (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "锁定所选项" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "分组" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -5735,7 +5779,7 @@ msgstr "添加 IK 链" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Clear IK Chain" -msgstr "清除IK链" +msgstr "清除 IK 链" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -6146,7 +6190,7 @@ msgstr "粒子" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generated Point Count:" -msgstr "生成顶点计数:" +msgstr "生成顶点计数:" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp @@ -6502,7 +6546,13 @@ msgid "Remove Selected Item" msgstr "移除选中项目" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +#, fuzzy +msgid "Import from Scene (Ignore Transforms)" +msgstr "从场景中导入" + +#: editor/plugins/mesh_library_editor_plugin.cpp +#, fuzzy +msgid "Import from Scene (Apply Transforms)" msgstr "从场景中导入" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7074,7 +7124,7 @@ msgstr "预加载资源" #: editor/plugins/room_manager_editor_plugin.cpp msgid "Flip Portals" -msgstr "翻转门户" +msgstr "翻转入口" #: editor/plugins/room_manager_editor_plugin.cpp msgid "Room Generate Points" @@ -7086,7 +7136,17 @@ msgstr "生成点" #: editor/plugins/room_manager_editor_plugin.cpp msgid "Flip Portal" -msgstr "翻转门户" +msgstr "翻转入口" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "清除变换" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "创建节点" #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" @@ -7179,12 +7239,12 @@ msgstr "主题另存为..." #: editor/plugins/script_editor_plugin.cpp msgid "%s Class Reference" -msgstr "%s 类引用" +msgstr "%s 类参考手册" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp msgid "Find Next" -msgstr "查找下一项" +msgstr "查找下一个" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -7430,7 +7490,7 @@ msgstr "首字母大写" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Syntax Highlighter" -msgstr "语法高亮显示" +msgstr "语法高亮器" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp @@ -7486,7 +7546,7 @@ msgstr "展开所有行" #: editor/plugins/script_text_editor.cpp msgid "Complete Symbol" -msgstr "符号自动补全" +msgstr "补全符号" #: editor/plugins/script_text_editor.cpp msgid "Evaluate Selection" @@ -7586,12 +7646,14 @@ msgid "Skeleton2D" msgstr "2D 骨骼节点" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "制作放松姿势(从骨骼)" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "将骨骼重置为放松姿势" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "将骨骼重置为放松姿势" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "覆盖" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7618,6 +7680,71 @@ msgid "Perspective" msgstr "透视" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Orthogonal" +msgstr "正交" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Perspective" +msgstr "透视" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Orthogonal" +msgstr "正交" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "透视" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Left Orthogonal" +msgstr "正交" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Perspective" +msgstr "透视" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Orthogonal" +msgstr "正交" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Orthogonal" +msgstr "正交" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Perspective" +msgstr "透视" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Orthogonal" +msgstr "正交" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Perspective" +msgstr "透视" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "已忽略变换。" @@ -7725,42 +7852,22 @@ msgid "Bottom View." msgstr "底视图。" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "底部" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "左视图。" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "左方" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "右视图。" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "右方" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "前视图。" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "前面" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "后视图。" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "后方" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "将变换与视图对齐" @@ -7929,7 +8036,7 @@ msgstr "使用吸附" #: editor/plugins/spatial_editor_plugin.cpp msgid "Converts rooms for portal culling." -msgstr "为门户剔除转换房间。" +msgstr "为入口剔除转换房间。" #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" @@ -8026,7 +8133,12 @@ msgstr "显示网格" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Portal Culling" -msgstr "显示门户剔除" +msgstr "显示入口剔除" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "显示入口剔除" #: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp @@ -8043,7 +8155,7 @@ msgstr "平移吸附:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotate Snap (deg.):" -msgstr "旋转吸附(度):" +msgstr "旋转吸附(角度):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Scale Snap (%):" @@ -8059,11 +8171,11 @@ msgstr "透视视角(角度):" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Z-Near:" -msgstr "查看 Z-Near:" +msgstr "视图 Z-Near:" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Z-Far:" -msgstr "查看 Z-Far:" +msgstr "视图 Z-Far:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Change" @@ -8094,8 +8206,9 @@ msgid "Post" msgstr "后置" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" -msgstr "无名控制器" +#, fuzzy +msgid "Unnamed Gizmo" +msgstr "未命名项目" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Mesh2D" @@ -8135,7 +8248,7 @@ msgstr "Sprite 是空的!" #: editor/plugins/sprite_editor_plugin.cpp msgid "Can't convert a sprite using animation frames to mesh." -msgstr "无法将使用动画帧将精灵转换为网格。" +msgstr "无法将使用动画帧的精灵转换为网格。" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't replace by mesh." @@ -8549,6 +8662,8 @@ msgid "" "Select a theme type from the list to edit its items.\n" "You can add a custom type or import a type with its items from another theme." msgstr "" +"从列表中选择一个主题类型以编辑其项目。\n" +"你可以添加一个自定义类型,或者从其它主题中导入一个类型及其项目。" #: editor/plugins/theme_editor_plugin.cpp msgid "Remove All Color Items" @@ -8579,6 +8694,8 @@ msgid "" "This theme type is empty.\n" "Add more items to it manually or by importing from another theme." msgstr "" +"该主题类型为空。\n" +"请手动添加或者从其它主题导入更多项目。" #: editor/plugins/theme_editor_plugin.cpp msgid "Add Color Item" @@ -9458,7 +9575,7 @@ msgstr "调整 VisualShader 节点大小" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Set Uniform Name" -msgstr "设置统一名称" +msgstr "设置 Uniform 名称" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Set Input Default Port" @@ -9579,7 +9696,7 @@ msgstr "颜色常量。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Color uniform." -msgstr "颜色统一。" +msgstr "颜色 Uniform。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the %s comparison between two parameters." @@ -9653,7 +9770,7 @@ msgstr "布尔常量。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Boolean uniform." -msgstr "布尔统一。" +msgstr "布尔 Uniform。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for all shader modes." @@ -9930,7 +10047,7 @@ msgstr "标量常数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Scalar uniform." -msgstr "标量一致。" +msgstr "标量 Uniform。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Perform the cubic texture lookup." @@ -9942,15 +10059,15 @@ msgstr "执行纹理查找。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Cubic texture uniform lookup." -msgstr "立方纹理均匀查找。" +msgstr "立方纹理 Uniform 查找。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "2D texture uniform lookup." -msgstr "2D 纹理均匀查找。" +msgstr "2D 纹理 Uniform 查找。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "2D texture uniform lookup with triplanar." -msgstr "2D 纹理均匀查找与三平面。" +msgstr "2D 纹理 Uniform 查找与三平面。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Transform function." @@ -10006,7 +10123,7 @@ msgstr "变换常数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Transform uniform." -msgstr "变换统一。" +msgstr "变换 Uniform。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vector function." @@ -10152,7 +10269,7 @@ msgstr "向量常数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vector uniform." -msgstr "向量一致。" +msgstr "向量 Uniform。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -10181,7 +10298,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "A reference to an existing uniform." -msgstr "至现有一致的引用。" +msgstr "对现有 Uniform 的引用。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -10261,7 +10378,7 @@ msgid "" "This might be due to a configuration issue in the export preset or your " "export settings." msgstr "" -"无法为平台 “%s” 导出项目。\n" +"无法为平台 “%s” 导出项目。\n" "原因可能是导出预设或导出设置内的配置有问题。" #: editor/project_export.cpp @@ -12114,14 +12231,22 @@ msgid "Change Ray Shape Length" msgstr "修改射线形状长度" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Set Room Point Position" -msgstr "设置曲线的顶点坐标" +msgstr "设置房间点位置" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Set Portal Point Position" -msgstr "设置曲线的顶点坐标" +msgstr "设置入口点位置" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Radius" +msgstr "修改圆柱体半径" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr "设置曲线内控点位置" #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" @@ -12241,11 +12366,11 @@ msgstr "导出 GLTF..." #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Plane" -msgstr "下一个平面" +msgstr "下一平面" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Previous Plane" -msgstr "上一个平面" +msgstr "上一平面" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Plane:" @@ -12257,7 +12382,7 @@ msgstr "下一层" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Previous Floor" -msgstr "上一个层" +msgstr "上一层" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Floor:" @@ -12369,7 +12494,7 @@ msgstr "筛选网格" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Give a MeshLibrary resource to this GridMap to use its meshes." -msgstr "向此 GridMap 提供网格库资源以使用其网格。" +msgstr "向此 GridMap 提供 MeshLibrary 资源以使用其网格。" #: modules/lightmapper_cpu/lightmapper_cpu.cpp msgid "Begin Bake" @@ -12403,6 +12528,11 @@ msgstr "绘制光照图" msgid "Class name can't be a reserved keyword" msgstr "类名不能是保留关键字" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "填充选中项" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "内部异常堆栈追朔结束" @@ -12873,130 +13003,130 @@ msgstr "搜索可视化脚本节点" msgid "Get %s" msgstr "获取 %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "包名缺失。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "包段的长度必须为非零。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "Android 应用程序包名称中不允许使用字符 “%s”。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "包段中的第一个字符不能是数字。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "包段中的第一个字符不能是 “%s”。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "包必须至少有一个 “.” 分隔符。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "从列表中选择设备" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "正运行于 %d" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting APK..." msgstr "正在导出 APK……" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Uninstalling..." msgstr "正在卸载……" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Installing to device, please wait..." msgstr "正在安装到设备,请稍候……" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not install to device: %s" msgstr "无法安装到设备:%s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on device..." msgstr "正在设备上运行……" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not execute on device." msgstr "无法在设备上运行。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "找不到“apksigner”工具。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "未在项目中安装 Android 构建模板。从项目菜单安装它。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "Debug Keystore、Debug User、Debug Password 必须全部填写或者全部留空。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "未在编辑器设置或预设中配置调试密钥库。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" "Release Keystore、Release User、Release Password 必须全部填写或者全部留空。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "用于发布的密钥存储在导出预设中未被正确设置。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "编辑器设置中需要有效的Android SDK路径。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "编辑器设置中的Android SDK路径无效。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "缺失“platform-tools”目录!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "找不到Android SDK平台工具的adb命令。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "请签入编辑器设置中指定的Android SDK目录。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "缺失“build-tools”目录!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "找不到Android SDK生成工具的apksigner命令。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "APK 扩展的公钥无效。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "无效的包名称:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" @@ -13004,32 +13134,20 @@ msgstr "" "“android/modules” 项目设置(变更于Godot 3.2.2)中包含了无效模组 " "“GodotPaymentV3”。\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "必须启用 “使用自定义构建” 才能使用插件。" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" -"“Degrees Of Freedom” 只有在当 “Xr Mode” 是 “Oculus Mobile VR” 时才有效。" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "“Hand Tracking” 只有在当 “Xr Mode” 是 “Oculus Mobile VR” 时才有效。" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "“Focus Awareness” 只有在当 “Xr Mode” 是 “Oculus Mobile VR” 时才有效。" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "“Export AAB” 只有在当启用 “Use Custom Build” 时才有效。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13040,58 +13158,58 @@ msgstr "" "请检查 Android SDK 的 build-tools 目录中是否有此命令。\n" "生成的 %s 未签名。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "正在签名调试 %s……" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing release %s..." msgstr "正在签名发布 %s……" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not find keystore, unable to export." msgstr "找不到密钥库,无法导出。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "“apksigner”返回错误 #%d" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Verifying %s..." msgstr "正在校验 %s……" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "“apksigner”校验 %s 失败。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Exporting for Android" msgstr "正在为 Android 导出" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "无效文件名!Android App Bundle 必须有 *.aab 扩展。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "APK Expansion 与 Android App Bundle 不兼容。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "无效文件名!Android APK 必须有 *.apk 扩展。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "不支持的导出格式!\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" "尝试从自定义构建的模板构建,但是不存在其版本信息。请从“项目”菜单中重新安装。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13103,24 +13221,24 @@ msgstr "" " Godot 版本:%s\n" "请从“项目”菜单中重新安装 Android 构建模板。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "无法使用项目名称覆盖 res://android/build/res/*.xml 文件" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "无法将项目文件导出至 gradle 项目\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not write expansion package file!" msgstr "无法写入扩展包文件!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "构建 Android 项目 (Gradle)" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." @@ -13128,25 +13246,25 @@ msgstr "" "Android 项目构建失败,请检查输出中显示的错误。\n" "也可以访问 docs.godotengine.org 查看 Android 构建文档。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "移动输出" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "无法复制与更名导出文件,请在 Gradle 项目文件夹内确认输出。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package not found: %s" msgstr "包不存在:%s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Creating APK..." msgstr "正在创建 APK……" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Could not find template APK to export:\n" "%s" @@ -13154,7 +13272,7 @@ msgstr "" "找不到导出模板 APK:\n" "%s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13164,19 +13282,19 @@ msgstr "" "导出模板缺失所选架构的库:%s。\n" "请使用全部所需的库构建模板,或者在导出预设中取消对缺失架构的选择。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Adding files..." msgstr "正在添加文件……" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files" msgstr "无法导出项目文件" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "正在对齐 APK……" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "无法解压未对齐的临时 APK。" @@ -13670,6 +13788,14 @@ msgstr "" "NavigationMeshInstance 类型节点必须作为 Navigation 节点的子节点或子孙节点才能" "提供导航数据。" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -13802,36 +13928,44 @@ msgid "" "RoomList path is invalid.\n" "Please check the RoomList branch has been assigned in the RoomManager." msgstr "" +"RoomList 路径无效。\n" +"请检查 RoomList 分支是否已被指定给 RoomManager。" #: scene/3d/room_manager.cpp msgid "RoomList contains no Rooms, aborting." -msgstr "" +msgstr "RoomList 中不包含 Room,正在中止。" #: scene/3d/room_manager.cpp msgid "Misnamed nodes detected, check output log for details. Aborting." -msgstr "" +msgstr "检测到错误命名的节点,详情请检查日志输出。正在中止。" #: scene/3d/room_manager.cpp msgid "Portal link room not found, check output log for details." -msgstr "" +msgstr "未找到入口所连接的房间,详情请检查日志输出。" #: scene/3d/room_manager.cpp msgid "" "Portal autolink failed, check output log for details.\n" "Check the portal is facing outwards from the source room." msgstr "" +"入口自动连接失败,详情请检查输出日志。\n" +"请检查该入口是否朝向其所在房间的外部。" #: scene/3d/room_manager.cpp msgid "" "Room overlap detected, cameras may work incorrectly in overlapping area.\n" "Check output log for details." msgstr "" +"检测到重叠的房间,摄像机在重叠区域可能无法正常工作。\n" +"详情请检查日志输出。" #: scene/3d/room_manager.cpp msgid "" "Error calculating room bounds.\n" "Ensure all rooms contain geometry or manual bounds." msgstr "" +"计算房间边界时出错。\n" +"请确保所有房间都包含几何结构,或者包含手动边界。" #: scene/3d/soft_body.cpp msgid "This body will be ignored until you set a mesh." @@ -13990,6 +14124,14 @@ msgstr "必须使用有效的扩展名。" msgid "Enable grid minimap." msgstr "启用网格小地图。" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14040,6 +14182,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "Viewport 大小大于 0 时才能进行渲染。" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " @@ -14084,12 +14230,45 @@ msgstr "对函数的赋值。" #: servers/visual/shader_language.cpp msgid "Assignment to uniform." -msgstr "对统一的赋值。" +msgstr "对 Uniform 的赋值。" #: servers/visual/shader_language.cpp msgid "Constants cannot be modified." msgstr "不允许修改常量。" +#~ msgid "Make Rest Pose (From Bones)" +#~ msgstr "制作放松姿势(从骨骼)" + +#~ msgid "Bottom" +#~ msgstr "底部" + +#~ msgid "Left" +#~ msgstr "左方" + +#~ msgid "Right" +#~ msgstr "右方" + +#~ msgid "Front" +#~ msgstr "前面" + +#~ msgid "Rear" +#~ msgstr "后方" + +#~ msgid "Nameless gizmo" +#~ msgstr "无名控制器" + +#~ msgid "" +#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile " +#~ "VR\"." +#~ msgstr "" +#~ "“Degrees Of Freedom” 只有在当 “Xr Mode” 是 “Oculus Mobile VR” 时才有效。" + +#~ msgid "" +#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" +#~ "\"." +#~ msgstr "" +#~ "“Focus Awareness” 只有在当 “Xr Mode” 是 “Oculus Mobile VR” 时才有效。" + #~ msgid "Package Contents:" #~ msgstr "包内容:" @@ -16047,9 +16226,6 @@ msgstr "不允许修改常量。" #~ msgid "Images:" #~ msgstr "图片:" -#~ msgid "Group" -#~ msgstr "分组" - #~ msgid "Sample Conversion Mode: (.wav files):" #~ msgstr "音效转换方式(.wav文件):" diff --git a/editor/translations/zh_HK.po b/editor/translations/zh_HK.po index e5327f79d9..b9461bffd0 100644 --- a/editor/translations/zh_HK.po +++ b/editor/translations/zh_HK.po @@ -1067,7 +1067,7 @@ msgstr "" msgid "Dependencies" msgstr "" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "資源" @@ -1731,13 +1731,13 @@ msgid "" "Enabled'." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2143,7 +2143,7 @@ msgstr "" msgid "(Re)Importing Assets" msgstr "導入中:" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp #, fuzzy msgid "Top" msgstr "最頂" @@ -2646,6 +2646,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "未儲存當前場景。仍要開啟?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "復原" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "重製" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "不能重新載入從未儲存的場景。" @@ -3328,6 +3354,11 @@ msgid "Merge With Existing" msgstr "" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "動畫變化過渡" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "" @@ -3584,6 +3615,10 @@ msgid "" "property (%s)." msgstr "" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "" @@ -5809,6 +5844,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "所有選項" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "Groups" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6762,7 +6809,11 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +msgid "Import from Scene (Ignore Transforms)" +msgstr "" + +#: editor/plugins/mesh_library_editor_plugin.cpp +msgid "Import from Scene (Apply Transforms)" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7367,6 +7418,15 @@ msgstr "刪除" msgid "Flip Portal" msgstr "" +#: editor/plugins/room_manager_editor_plugin.cpp +msgid "Occluder Set Transform" +msgstr "" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "不選" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "" @@ -7910,12 +7970,14 @@ msgid "Skeleton2D" msgstr "" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "預設" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "覆蓋" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7944,6 +8006,61 @@ msgid "Perspective" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Top Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Bottom Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Left Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Right Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Orthogonal" +msgstr "右𨫡" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Front Perspective" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Orthogonal" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Rear Perspective" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "" @@ -8058,42 +8175,22 @@ msgid "Bottom View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "" @@ -8367,6 +8464,11 @@ msgid "View Portal Culling" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "插件" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp #, fuzzy msgid "Settings..." @@ -8433,7 +8535,7 @@ msgid "Post" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" +msgid "Unnamed Gizmo" msgstr "" #: editor/plugins/sprite_editor_plugin.cpp @@ -12639,6 +12741,15 @@ msgstr "只限選中" msgid "Set Portal Point Position" msgstr "只限選中" +#: editor/spatial_editor_gizmos.cpp +msgid "Set Occluder Sphere Radius" +msgstr "" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr "只限選中" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "" @@ -12940,6 +13051,11 @@ msgstr "光照圖生成中" msgid "Class name can't be a reserved keyword" msgstr "" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "所有選項" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "" @@ -13442,166 +13558,155 @@ msgstr "貼上" msgid "Get %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "從列表選取設備" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting APK..." msgstr "匯出" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Uninstalling..." msgstr "解除安裝" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Installing to device, please wait..." msgstr "接收 mirrors中, 請稍侯..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not install to device: %s" msgstr "無法新增資料夾" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Running on device..." msgstr "正在運行自定義腳本..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not execute on device." msgstr "無法新增資料夾" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Invalid package name:" msgstr "無效名稱" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13609,61 +13714,61 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Signing release %s..." msgstr "正在掃描檔案, 請稍候..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not find keystore, unable to export." msgstr "無法新增資料夾" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Verifying %s..." msgstr "設定" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting for Android" msgstr "匯出" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13671,58 +13776,58 @@ msgid "" "Please reinstall Android build template from 'Project' menu." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not export project files to gradle project\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not write expansion package file!" msgstr "無法新增資料夾" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "時長(秒)。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Creating APK..." msgstr "連接中..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" "Could not find template APK to export:\n" "%s" msgstr "無法新增資料夾" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13730,21 +13835,21 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Adding files..." msgstr "篩選檔案..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files" msgstr "無法新增資料夾" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -14212,6 +14317,14 @@ msgid "" "It only provides navigation data." msgstr "" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14505,6 +14618,14 @@ msgstr "請用有效的副檔名。" msgid "Enable grid minimap." msgstr "" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14546,6 +14667,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "viewport大小必須大於0以渲染任何東西。" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " diff --git a/editor/translations/zh_TW.po b/editor/translations/zh_TW.po index 4fc48abd03..db1603cc9b 100644 --- a/editor/translations/zh_TW.po +++ b/editor/translations/zh_TW.po @@ -1036,7 +1036,7 @@ msgstr "" msgid "Dependencies" msgstr "相依性" -#: editor/dependency_editor.cpp +#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp msgid "Resource" msgstr "資源" @@ -1695,13 +1695,13 @@ msgstr "" "目標平台上的 GLES2 回退驅動器功能必須使用「PVRTC」紋理壓縮。\n" "請在專案設定中啟用「Import Pvrtc」或是禁用「Driver Fallback Enabled」。" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." msgstr "找不到自定義偵錯樣板。" -#: editor/editor_export.cpp platform/android/export/export.cpp +#: editor/editor_export.cpp platform/android/export/export_plugin.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." @@ -2081,7 +2081,7 @@ msgstr "由於有多個匯入器對檔案 %s 提供了不同的型別,已中 msgid "(Re)Importing Assets" msgstr "(重新)匯入素材" -#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp +#: editor/editor_help.cpp msgid "Top" msgstr "頂端" @@ -2577,6 +2577,32 @@ msgid "Current scene not saved. Open anyway?" msgstr "尚未保存目前場景。仍然要開啟嗎?" #: editor/editor_node.cpp +msgid "Can't undo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to undo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Undo: %s" +msgstr "復原" + +#: editor/editor_node.cpp +msgid "Can't redo while mouse buttons are pressed." +msgstr "" + +#: editor/editor_node.cpp +msgid "Nothing to redo." +msgstr "" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Redo: %s" +msgstr "取消復原" + +#: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." msgstr "無法重新載入從未保存過的場景。" @@ -3238,6 +3264,11 @@ msgid "Merge With Existing" msgstr "與現有的合併" #: editor/editor_node.cpp +#, fuzzy +msgid "Apply MeshInstance Transforms" +msgstr "更改動畫變換" + +#: editor/editor_node.cpp msgid "Open & Run a Script" msgstr "開啟並執行腳本" @@ -3490,6 +3521,10 @@ msgid "" "property (%s)." msgstr "所選資源(%s)不符合任該屬性(%s)的任何型別。" +#: editor/editor_resource_picker.cpp +msgid "Quick Load" +msgstr "" + #: editor/editor_resource_picker.cpp editor/property_editor.cpp msgid "Make Unique" msgstr "獨立化" @@ -5592,6 +5627,18 @@ msgid "Move CanvasItem \"%s\" to (%d, %d)" msgstr "移動 CanvasItem「%s」至 (%d, %d)" #: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Locked" +msgstr "鎖定所選" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Grouped" +msgstr "群組" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." @@ -6530,7 +6577,13 @@ msgid "Remove Selected Item" msgstr "移除所選項目" #: editor/plugins/mesh_library_editor_plugin.cpp -msgid "Import from Scene" +#, fuzzy +msgid "Import from Scene (Ignore Transforms)" +msgstr "自場景匯入" + +#: editor/plugins/mesh_library_editor_plugin.cpp +#, fuzzy +msgid "Import from Scene (Apply Transforms)" msgstr "自場景匯入" #: editor/plugins/mesh_library_editor_plugin.cpp @@ -7120,6 +7173,16 @@ msgstr "已產生的頂點數量:" msgid "Flip Portal" msgstr "水平翻轉" +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Occluder Set Transform" +msgstr "清除變換" + +#: editor/plugins/room_manager_editor_plugin.cpp +#, fuzzy +msgid "Center Node" +msgstr "建立節點" + #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" msgstr "AnimationTree 未設定至 AnimationPlayer 的路徑" @@ -7618,12 +7681,14 @@ msgid "Skeleton2D" msgstr "Sekeleton2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Make Rest Pose (From Bones)" -msgstr "製作靜止姿勢(自骨骼)" +#, fuzzy +msgid "Reset to Rest Pose" +msgstr "設定骨骼為靜止姿勢" #: editor/plugins/skeleton_2d_editor_plugin.cpp -msgid "Set Bones to Rest Pose" -msgstr "設定骨骼為靜止姿勢" +#, fuzzy +msgid "Overwrite Rest Pose" +msgstr "複寫" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -7650,6 +7715,71 @@ msgid "Perspective" msgstr "透視" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Orthogonal" +msgstr "正交" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Top Perspective" +msgstr "透視" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Orthogonal" +msgstr "正交" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Bottom Perspective" +msgstr "透視" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Left Orthogonal" +msgstr "正交" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Perspective" +msgstr "透視" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Right Orthogonal" +msgstr "正交" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Orthogonal" +msgstr "正交" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Front Perspective" +msgstr "透視" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Orthogonal" +msgstr "正交" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Rear Perspective" +msgstr "透視" + +#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [auto]" +msgstr "" + +#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled. +#: editor/plugins/spatial_editor_plugin.cpp +msgid " [portals active]" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Aborted." msgstr "已中止變換。" @@ -7768,42 +7898,22 @@ msgid "Bottom View." msgstr "仰視圖。" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Bottom" -msgstr "底部" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Left View." msgstr "左視圖。" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Left" -msgstr "左" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Right View." msgstr "右視圖。" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Right" -msgstr "右" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Front View." msgstr "前視圖。" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Front" -msgstr "正面" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View." msgstr "後視圖。" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Rear" -msgstr "後" - -#: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" msgstr "將變換與視圖對齊" @@ -8076,6 +8186,11 @@ msgid "View Portal Culling" msgstr "檢視區設定" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "View Occlusion Culling" +msgstr "檢視區設定" + +#: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Settings..." msgstr "設定..." @@ -8141,8 +8256,9 @@ msgid "Post" msgstr "後置" #: editor/plugins/spatial_editor_plugin.cpp -msgid "Nameless gizmo" -msgstr "未命名的 Gizmo" +#, fuzzy +msgid "Unnamed Gizmo" +msgstr "未命名專案" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Mesh2D" @@ -12252,6 +12368,16 @@ msgstr "設定曲線控制點位置" msgid "Set Portal Point Position" msgstr "設定曲線控制點位置" +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Radius" +msgstr "更改圓柱形半徑" + +#: editor/spatial_editor_gizmos.cpp +#, fuzzy +msgid "Set Occluder Sphere Position" +msgstr "設定曲線內控制點位置" + #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" msgstr "更改圓柱體半徑" @@ -12535,6 +12661,11 @@ msgstr "正在繪製光照" msgid "Class name can't be a reserved keyword" msgstr "類別名稱不能為保留關鍵字" +#: modules/mono/csharp_script.cpp +#, fuzzy +msgid "Build Solution" +msgstr "填充所選" + #: modules/mono/mono_gd/gd_mono_utils.cpp msgid "End of inner exception stack trace" msgstr "內部異常堆疊回溯結束" @@ -13007,135 +13138,135 @@ msgstr "搜尋視覺腳本 (VisualScript)" msgid "Get %s" msgstr "取得 %s" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package name is missing." msgstr "缺少套件名稱。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Package segments must be of non-zero length." msgstr "套件片段 (Segment) 的長度不可為 0。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' is not allowed in Android application package names." msgstr "Android 應用程式套件名稱不可使用字元「%s」。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A digit cannot be the first character in a package segment." msgstr "套件片段 (Segment) 的第一個字元不可為數字。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "套件片段 (Segment) 的第一個字元不可為「%s」。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "The package must have at least one '.' separator." msgstr "套件必須至少有一個「.」分隔字元。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Select device from the list" msgstr "自清單中選擇裝置" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Running on %s" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting APK..." msgstr "全部匯出" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Uninstalling..." msgstr "取消安裝" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Installing to device, please wait..." msgstr "載入中,請稍後..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not install to device: %s" msgstr "無法啟動子處理程序!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Running on device..." msgstr "正在執行自定腳本..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not execute on device." msgstr "無法新增資料夾。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find the 'apksigner' tool." msgstr "找不到「apksigner」工具。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build template not installed in the project. Install it from the " "Project menu." msgstr "尚未於專案中安裝 Android 建置樣板。請先於專案目錄中進行安裝。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Debug Keystore, Debug User AND Debug Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "尚未於編輯器設定或預設設定中設定金鑰儲存區 (Keystore)。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Either Release Keystore, Release User AND Release Password settings must be " "configured OR none of them." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Release keystore incorrectly configured in the export preset." msgstr "發行金鑰儲存區中不正確之組態設定至匯出預設設定。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "A valid Android SDK path is required in Editor Settings." msgstr "必須於 [編輯器設定] 中提供一個有效的 Android SDK 路徑。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid Android SDK path in Editor Settings." msgstr "[編輯器設定] 中所指定的 Android SDK 路徑無效。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'platform-tools' directory!" msgstr "缺少「platform-tools」資料夾!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK platform-tools' adb command." msgstr "找不到 Android SDK platform-tools 的 adb 指令。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Please check in the Android SDK directory specified in Editor Settings." msgstr "請檢查 [編輯器設定] 中所指定的 Android SDK 資料夾。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Missing 'build-tools' directory!" msgstr "缺少「build-tools」資料夾!" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unable to find Android SDK build-tools' apksigner command." msgstr "找不到 Android SDK build-tools 的 apksigner 指令。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid public key for APK expansion." msgstr "無效的 APK Expansion 公鑰。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid package name:" msgstr "無效的套件名稱:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Invalid \"GodotPaymentV3\" module included in the \"android/modules\" " "project setting (changed in Godot 3.2.2).\n" @@ -13143,37 +13274,22 @@ msgstr "" "「andoird/modules」專案設定中包含了無效的「GodotPaymentV3」模組(更改於 " "Godot 3.2.2)。\n" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Use Custom Build\" must be enabled to use the plugins." msgstr "「使用自定建置」必須啟用以使用本外掛。" -#: platform/android/export/export.cpp -msgid "" -"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" -"\"." -msgstr "" -"「Degrees Of Freedom」(自由角度)僅可在「Xr Mode」(XR 模式)設為「Oculus " -"Mobile VR」時可用。" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." msgstr "" "「Hand Tracking」(手部追蹤)僅可在「Xr Mode」(XR 模式)設為「Oculus Mobile " "VR」時可用。" -#: platform/android/export/export.cpp -msgid "" -"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"." -msgstr "" -"「Focus Awareness」(提高關注度)僅可在「Xr Mode」(XR 模式)設為「Oculus " -"Mobile VR」時可用。" - -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled." msgstr "「Export AAB」僅於「Use Custom Build」啟用時可用。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "'apksigner' could not be found.\n" "Please check the command is available in the Android SDK build-tools " @@ -13181,64 +13297,64 @@ msgid "" "The resulting %s is unsigned." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Signing debug %s..." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Signing release %s..." msgstr "" "正在掃描檔案,\n" "請稍後..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not find keystore, unable to export." msgstr "無法開啟樣板以輸出:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' returned with error #%d" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Verifying %s..." msgstr "正在新增 %s…" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "'apksigner' verification of %s failed." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Exporting for Android" msgstr "全部匯出" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android App Bundle requires the *.aab extension." msgstr "無效的檔案名稱!Android App Bundle 必須要有 *.aab 副檔名。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "APK Expansion not compatible with Android App Bundle." msgstr "APK Expansion 與 Android App Bundle 不相容。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Invalid filename! Android APK requires the *.apk extension." msgstr "無效的檔案名稱!Android APK 必須要有 *.apk 副檔名。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Unsupported export format!\n" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" "嘗試自自定建置樣板進行建置,但無版本資訊可用。請自「專案」選單中重新安裝。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Android build version mismatch:\n" " Template installed: %s\n" @@ -13250,26 +13366,26 @@ msgstr "" " Godot 版本:%s\n" "請自「專案」目錄中重新安裝 Android 建置樣板。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to overwrite res://android/build/res/*.xml files with project name" msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files to gradle project\n" msgstr "無法在專案路徑中編輯 project.godot。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not write expansion package file!" msgstr "無法寫入檔案:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Building Android Project (gradle)" msgstr "建置 Android 專案(Gradle)" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." @@ -13277,34 +13393,34 @@ msgstr "" "建置 Android 專案失敗,請檢查輸出以確認錯誤。\n" "也可以瀏覽 docs.godotengine.org 以瀏覽 Android 建置說明文件。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Moving output" msgstr "移動輸出" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Unable to copy and rename export file, check gradle project directory for " "outputs." msgstr "無法複製並更名匯出的檔案,請於 Gradle 專案資料夾內確認輸出。" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Package not found: %s" msgstr "未找到動畫:「%s」" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Creating APK..." msgstr "正在建立輪廓..." -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "" "Could not find template APK to export:\n" "%s" msgstr "無法開啟樣板以輸出:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "" "Missing libraries in the export template for the selected architectures: " "%s.\n" @@ -13312,21 +13428,21 @@ msgid "" "architectures in the export preset." msgstr "" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Adding files..." msgstr "正在新增 %s…" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp #, fuzzy msgid "Could not export project files" msgstr "無法寫入檔案:" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Aligning APK..." msgstr "正在對齊 APK…" -#: platform/android/export/export.cpp +#: platform/android/export/export_plugin.cpp msgid "Could not unzip temporary unaligned APK." msgstr "" @@ -13822,6 +13938,14 @@ msgstr "" "NavigationMeshInstance 必須為 Navigation 節點的子節點或次級子節點。其僅提供導" "航資料。" +#: scene/3d/occluder.cpp +msgid "No shape is set." +msgstr "" + +#: scene/3d/occluder.cpp +msgid "Only uniform scales are supported." +msgstr "" + #: scene/3d/particles.cpp msgid "" "GPU-based particles are not supported by the GLES2 video driver.\n" @@ -14139,6 +14263,14 @@ msgstr "必須使用有效的副檔名。" msgid "Enable grid minimap." msgstr "啟用網格迷你地圖。" +#: scene/gui/nine_patch_rect.cpp +msgid "" +"The Tile and Tile Fit options for Axis Stretch properties are only effective " +"when using the GLES3 rendering backend.\n" +"The GLES2 backend is currently in use, so these modes will act like Stretch " +"instead." +msgstr "" + #: scene/gui/popup.cpp msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " @@ -14189,6 +14321,10 @@ msgstr "" msgid "Viewport size must be greater than 0 to render anything." msgstr "Viewport 大小必須大於 0 才可進行算繪。" +#: scene/resources/occluder_shape.cpp +msgid "OccluderShapeSphere Set Spheres" +msgstr "" + #: scene/resources/visual_shader_nodes.cpp msgid "" "The sampler port is connected but not used. Consider changing the source to " @@ -14240,6 +14376,41 @@ msgstr "指派至均勻。" msgid "Constants cannot be modified." msgstr "不可修改常數。" +#~ msgid "Make Rest Pose (From Bones)" +#~ msgstr "製作靜止姿勢(自骨骼)" + +#~ msgid "Bottom" +#~ msgstr "底部" + +#~ msgid "Left" +#~ msgstr "左" + +#~ msgid "Right" +#~ msgstr "右" + +#~ msgid "Front" +#~ msgstr "正面" + +#~ msgid "Rear" +#~ msgstr "後" + +#~ msgid "Nameless gizmo" +#~ msgstr "未命名的 Gizmo" + +#~ msgid "" +#~ "\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile " +#~ "VR\"." +#~ msgstr "" +#~ "「Degrees Of Freedom」(自由角度)僅可在「Xr Mode」(XR 模式)設為" +#~ "「Oculus Mobile VR」時可用。" + +#~ msgid "" +#~ "\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR" +#~ "\"." +#~ msgstr "" +#~ "「Focus Awareness」(提高關注度)僅可在「Xr Mode」(XR 模式)設為「Oculus " +#~ "Mobile VR」時可用。" + #~ msgid "Package Contents:" #~ msgstr "套件內容:" diff --git a/main/main.cpp b/main/main.cpp index 5513e571d6..fc24010e7b 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -455,10 +455,10 @@ void Main::test_cleanup() { ResourceLoader::remove_custom_loaders(); ResourceSaver::remove_custom_savers(); + unregister_driver_types(); #ifdef TOOLS_ENABLED EditorNode::unregister_editor_types(); #endif - unregister_driver_types(); unregister_module_types(); unregister_platform_apis(); unregister_scene_types(); @@ -1090,7 +1090,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph editor = false; #else const String error_msg = "Error: Couldn't load project data at path \"" + project_path + "\". Is the .pck file missing?\nIf you've renamed the executable, the associated .pck file should also be renamed to match the executable's name (without the extension).\n"; - OS::get_singleton()->print("%s", error_msg.ascii().get_data()); + OS::get_singleton()->print("%s", error_msg.utf8().get_data()); OS::get_singleton()->alert(error_msg); goto error; @@ -1184,7 +1184,9 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph #ifdef TOOLS_ENABLED if (!editor && !project_manager) { #endif - OS::get_singleton()->print("Error: Can't run project: no main scene defined.\n"); + const String error_msg = "Error: Can't run project: no main scene defined in the project.\n"; + OS::get_singleton()->print("%s", error_msg.utf8().get_data()); + OS::get_singleton()->alert(error_msg); goto error; #ifdef TOOLS_ENABLED } diff --git a/misc/dist/document_icons/shader.svg b/misc/dist/document_icons/shader.svg new file mode 100644 index 0000000000..30515cde3d --- /dev/null +++ b/misc/dist/document_icons/shader.svg @@ -0,0 +1 @@ +<svg height="1024" width="1024" xmlns="http://www.w3.org/2000/svg"><path d="M812.681 293.783c-23.575-32.543-141.93-39.865-197.505-34.983 2.17-68.048 31.457-117.656-37.966-177.026M161.89 49.151H464c77.128-2.02 126.554 37.835 178.444 84.881l123.665 109.83c63.819 56.94 89.13 110.625 96 188.174v542.886H161.89z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round" stroke-width="19.603"/><text style="font-weight:800;font-size:16px;font-family:Montserrat;letter-spacing:0;word-spacing:0;fill:#333f67" x="249.582" y="878.644"><tspan font-size="112" x="249.582" y="878.644">SHADER</tspan></text><path d="M640.44 348.066c-10.54 0-21.102 4.097-29.145 12.276l-35.64 36.254-47.725 48.529h-.004l-47.676 48.53-33.98 34.546 13.744 13.98h89.002l47.675-48.529 47.723-48.527h.006l25.12-25.543c6.375-6.486 10.147-14.571 11.468-22.986h-.002c2.01-12.81-1.762-26.38-11.469-36.254-8.042-8.18-18.558-12.276-29.098-12.276zM460.013 542.184l44.502 45.257 44.5-45.257h-89.002zm-46.848 13.834c-9.932.124-18.509 4.228-24.668 11.236-5.21 5.927-8.55 14.024-9.668 23.459-.254 2.153-.52 4.295-.52 6.588 0 33.842-55.28 6.971-28.53 41.94h117.626c6.64-15.57 5.836-33.447-2.13-48.528h-.003c-2.48-4.695-5.392-9.213-9.289-13.176-13.348-13.578-26.713-20.143-38.48-21.326h-.002a38.536 38.536 0 0 0-4.336-.193zm-63.387 83.224c4.467 5.84 10.605 12.952 20.33 22.844 21.446 21.814 64.428 16.264 85.875-5.547 5.035-5.12 8.751-11.034 11.422-17.297H349.78z" style="fill:#478cbf;fill-opacity:1"/></svg> diff --git a/misc/dist/document_icons/shader_extra_small.svg b/misc/dist/document_icons/shader_extra_small.svg new file mode 100644 index 0000000000..b9c9cd4811 --- /dev/null +++ b/misc/dist/document_icons/shader_extra_small.svg @@ -0,0 +1 @@ +<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg"><path d="M12.698 4.59c-.368-.508-2.218-.623-3.086-.546.034-1.064.492-1.839-.593-2.766m-6.49-.51H7.25c1.205-.032 1.977.591 2.788 1.326L11.97 3.81c.998.89 1.393 1.729 1.5 2.94v8.483H2.53z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round"/><path d="M10.77 5.465a.88.88 0 0 0-.627.264l-.77.78-1.03 1.048-1.027 1.047-.734.744.299.3h1.918l1.027-1.044 1.03-1.047.54-.551a.902.902 0 0 0 .249-.496.91.91 0 0 0-.249-.781.877.877 0 0 0-.626-.264zM8.799 9.648 6.88 9.65l.959.975.959-.977zm-2.975.301a.715.715 0 0 0-.486.24.922.922 0 0 0-.21.506h.003c-.006.046-.014.093-.014.143 0 .73-1.19.15-.613.904.096.126.227.28.437.492.462.47 1.39.351 1.852-.119a1.21 1.21 0 0 0 .246-.373 1.22 1.22 0 0 0-.047-1.047 1.19 1.19 0 0 0-.199-.283c-.288-.293-.576-.436-.83-.46a.715.715 0 0 0-.139-.003z" style="fill:#478cbf;fill-opacity:1"/></svg> diff --git a/misc/dist/document_icons/shader_small.svg b/misc/dist/document_icons/shader_small.svg new file mode 100644 index 0000000000..e20bca9fdf --- /dev/null +++ b/misc/dist/document_icons/shader_small.svg @@ -0,0 +1 @@ +<svg width="32" height="32" xmlns="http://www.w3.org/2000/svg"><path d="M25.396 9.18c-.736-1.016-4.435-1.245-6.172-1.093.068-2.126.983-3.676-1.186-5.532M5.059 1.536H14.5c2.41-.063 3.955 1.182 5.576 2.652l3.865 3.433c1.994 1.779 2.785 3.457 3 5.88v16.965H5.059z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round"/><path d="M21.295 11.242c-.434 0-.871.17-1.201.506l-1.471 1.494-1.965 2h-.002l-1.963 2-1.4 1.426.566.574 1.834 1.867 1.834-1.867 1.963-2 1.967-2 1.037-1.05a1.73 1.73 0 0 0 .473-.95 1.74 1.74 0 0 0-.475-1.494 1.676 1.676 0 0 0-1.197-.506zm-9.453 8.572a1.367 1.367 0 0 0-.932.463c-.215.244-.35.577-.396.965-.01.09-.024.179-.024.274 0 1.395-2.277.285-1.174 1.726.184.241.436.536.836.944.884.899 2.657.668 3.541-.23.207-.21.36-.455.47-.714a2.33 2.33 0 0 0-.089-2 2.273 2.273 0 0 0-.383-.543c-.55-.56-1.099-.829-1.584-.877a1.367 1.367 0 0 0-.265-.008z" style="fill:#478cbf;fill-opacity:1"/></svg> diff --git a/misc/dist/osx_tools.app/Contents/Info.plist b/misc/dist/osx_tools.app/Contents/Info.plist index 8e70d4c203..923bc7312a 100644 --- a/misc/dist/osx_tools.app/Contents/Info.plist +++ b/misc/dist/osx_tools.app/Contents/Info.plist @@ -84,7 +84,7 @@ <key>UTTypeReferenceURL</key> <string></string> <key>UTTypeDescription</key> - <string>Godot Scene</string> + <string>Godot Engine scene</string> <key>UTTypeIconFile</key> <string>Scene.icns</string> <key>UTTypeConformsTo</key> @@ -97,6 +97,7 @@ <array> <string>scn</string> <string>tscn</string> + <string>escn</string> </array> <key>public.mime-type</key> <string>application/x-godot-scene</string> @@ -108,7 +109,7 @@ <key>UTTypeReferenceURL</key> <string></string> <key>UTTypeDescription</key> - <string>Godot Script</string> + <string>GDScript script</string> <key>UTTypeIconFile</key> <string>GDScript.icns</string> <key>UTTypeConformsTo</key> @@ -122,7 +123,7 @@ <string>gd</string> </array> <key>public.mime-type</key> - <string>text/x-gdscript</string> + <string>application/x-gdscript</string> </dict> </dict> <dict> @@ -131,7 +132,7 @@ <key>UTTypeReferenceURL</key> <string></string> <key>UTTypeDescription</key> - <string>Godot Resource</string> + <string>Godot Engine resource</string> <key>UTTypeIconFile</key> <string>Resource.icns</string> <key>UTTypeConformsTo</key> @@ -151,11 +152,34 @@ </dict> <dict> <key>UTTypeIdentifier</key> + <string>public.gdshader</string> + <key>UTTypeReferenceURL</key> + <string></string> + <key>UTTypeDescription</key> + <string>Godot Engine shader</string> + <key>UTTypeIconFile</key> + <string>Shader.icns</string> + <key>UTTypeConformsTo</key> + <array> + <string>public.script</string> + </array> + <key>UTTypeTagSpecification</key> + <dict> + <key>public.filename-extension</key> + <array> + <string>gdshader</string> + </array> + <key>public.mime-type</key> + <string>application/x-godot-shader</string> + </dict> + </dict> + <dict> + <key>UTTypeIdentifier</key> <string>public.godot</string> <key>UTTypeReferenceURL</key> <string></string> <key>UTTypeDescription</key> - <string>Godot Project</string> + <string>Godot Engine project</string> <key>UTTypeIconFile</key> <string>Project.icns</string> <key>UTTypeConformsTo</key> @@ -169,7 +193,7 @@ <string>godot</string> </array> <key>public.mime-type</key> - <string>text/x-godot-project</string> + <string>application/x-godot-project</string> </dict> </dict> </array> diff --git a/misc/dist/osx_tools.app/Contents/Resources/Shader.icns b/misc/dist/osx_tools.app/Contents/Resources/Shader.icns Binary files differnew file mode 100644 index 0000000000..a76e648a1a --- /dev/null +++ b/misc/dist/osx_tools.app/Contents/Resources/Shader.icns diff --git a/modules/csg/doc_classes/CSGBox3D.xml b/modules/csg/doc_classes/CSGBox3D.xml index 5bb1c4e75b..d64e58ae4d 100644 --- a/modules/csg/doc_classes/CSGBox3D.xml +++ b/modules/csg/doc_classes/CSGBox3D.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="material" type="Material" setter="set_material" getter="get_material"> The material used to render the box. @@ -18,6 +16,4 @@ The box's width, height and depth. </member> </members> - <constants> - </constants> </class> diff --git a/modules/csg/doc_classes/CSGCombiner3D.xml b/modules/csg/doc_classes/CSGCombiner3D.xml index b55111eee4..422c5d35b7 100644 --- a/modules/csg/doc_classes/CSGCombiner3D.xml +++ b/modules/csg/doc_classes/CSGCombiner3D.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/modules/csg/doc_classes/CSGCylinder3D.xml b/modules/csg/doc_classes/CSGCylinder3D.xml index bfd2a5d5f2..40e989bfb3 100644 --- a/modules/csg/doc_classes/CSGCylinder3D.xml +++ b/modules/csg/doc_classes/CSGCylinder3D.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="cone" type="bool" setter="set_cone" getter="is_cone" default="false"> If [code]true[/code] a cone is created, the [member radius] will only apply to one side. @@ -30,6 +28,4 @@ If [code]true[/code] the normals of the cylinder are set to give a smooth effect making the cylinder seem rounded. If [code]false[/code] the cylinder will have a flat shaded look. </member> </members> - <constants> - </constants> </class> diff --git a/modules/csg/doc_classes/CSGMesh3D.xml b/modules/csg/doc_classes/CSGMesh3D.xml index 5fa8427843..2810343139 100644 --- a/modules/csg/doc_classes/CSGMesh3D.xml +++ b/modules/csg/doc_classes/CSGMesh3D.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="material" type="Material" setter="set_material" getter="get_material"> The [Material] used in drawing the CSG shape. @@ -19,6 +17,4 @@ [b]Note:[/b] When using an [ArrayMesh], avoid meshes with vertex normals unless a flat shader is required. By default, CSGMesh will ignore the mesh's vertex normals and use a smooth shader calculated using the faces' normals. If a flat shader is required, ensure that all faces' vertex normals are parallel. </member> </members> - <constants> - </constants> </class> diff --git a/modules/csg/doc_classes/CSGPolygon3D.xml b/modules/csg/doc_classes/CSGPolygon3D.xml index 5309cde956..5d56e56de9 100644 --- a/modules/csg/doc_classes/CSGPolygon3D.xml +++ b/modules/csg/doc_classes/CSGPolygon3D.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="depth" type="float" setter="set_depth" getter="get_depth" default="1.0"> When [member mode] is [constant MODE_DEPTH], the depth of the extrusion. diff --git a/modules/csg/doc_classes/CSGPrimitive3D.xml b/modules/csg/doc_classes/CSGPrimitive3D.xml index 31b7360fac..8f4c8b9451 100644 --- a/modules/csg/doc_classes/CSGPrimitive3D.xml +++ b/modules/csg/doc_classes/CSGPrimitive3D.xml @@ -8,13 +8,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="invert_faces" type="bool" setter="set_invert_faces" getter="is_inverting_faces" default="false"> Invert the faces of the mesh. </member> </members> - <constants> - </constants> </class> diff --git a/modules/csg/doc_classes/CSGSphere3D.xml b/modules/csg/doc_classes/CSGSphere3D.xml index 4d5b3be099..b8dfb4cf5f 100644 --- a/modules/csg/doc_classes/CSGSphere3D.xml +++ b/modules/csg/doc_classes/CSGSphere3D.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="material" type="Material" setter="set_material" getter="get_material"> The material used to render the sphere. @@ -27,6 +25,4 @@ If [code]true[/code] the normals of the sphere are set to give a smooth effect making the sphere seem rounded. If [code]false[/code] the sphere will have a flat shaded look. </member> </members> - <constants> - </constants> </class> diff --git a/modules/csg/doc_classes/CSGTorus3D.xml b/modules/csg/doc_classes/CSGTorus3D.xml index abe3eab913..91ee63a4c9 100644 --- a/modules/csg/doc_classes/CSGTorus3D.xml +++ b/modules/csg/doc_classes/CSGTorus3D.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="inner_radius" type="float" setter="set_inner_radius" getter="get_inner_radius" default="2.0"> The inner radius of the torus. @@ -30,6 +28,4 @@ If [code]true[/code] the normals of the torus are set to give a smooth effect making the torus seem rounded. If [code]false[/code] the torus will have a flat shaded look. </member> </members> - <constants> - </constants> </class> diff --git a/modules/enet/doc_classes/ENetMultiplayerPeer.xml b/modules/enet/doc_classes/ENetMultiplayerPeer.xml index 43e1d40e47..456b390dbb 100644 --- a/modules/enet/doc_classes/ENetMultiplayerPeer.xml +++ b/modules/enet/doc_classes/ENetMultiplayerPeer.xml @@ -83,6 +83,4 @@ </member> <member name="transfer_mode" type="int" setter="set_transfer_mode" getter="get_transfer_mode" override="true" enum="TransferMode" default="2" /> </members> - <constants> - </constants> </class> diff --git a/modules/fbx/doc_classes/EditorSceneImporterFBX.xml b/modules/fbx/doc_classes/EditorSceneImporterFBX.xml index da1a68c27c..6f83871772 100644 --- a/modules/fbx/doc_classes/EditorSceneImporterFBX.xml +++ b/modules/fbx/doc_classes/EditorSceneImporterFBX.xml @@ -29,8 +29,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/modules/gdnative/doc_classes/GDNative.xml b/modules/gdnative/doc_classes/GDNative.xml index e4c5d34a2c..4bc149b119 100644 --- a/modules/gdnative/doc_classes/GDNative.xml +++ b/modules/gdnative/doc_classes/GDNative.xml @@ -30,6 +30,4 @@ <member name="library" type="GDNativeLibrary" setter="set_library" getter="get_library"> </member> </members> - <constants> - </constants> </class> diff --git a/modules/gdnative/doc_classes/GDNativeLibrary.xml b/modules/gdnative/doc_classes/GDNativeLibrary.xml index 94eae3cd06..3654870b09 100644 --- a/modules/gdnative/doc_classes/GDNativeLibrary.xml +++ b/modules/gdnative/doc_classes/GDNativeLibrary.xml @@ -45,6 +45,4 @@ On platforms that require statically linking libraries (currently only iOS), each library must have a different [code]symbol_prefix[/code]. </member> </members> - <constants> - </constants> </class> diff --git a/modules/gdnative/doc_classes/MultiplayerPeerGDNative.xml b/modules/gdnative/doc_classes/MultiplayerPeerGDNative.xml index b88f5e7e1e..40f3121525 100644 --- a/modules/gdnative/doc_classes/MultiplayerPeerGDNative.xml +++ b/modules/gdnative/doc_classes/MultiplayerPeerGDNative.xml @@ -6,8 +6,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/modules/gdnative/doc_classes/NativeScript.xml b/modules/gdnative/doc_classes/NativeScript.xml index 397d12a3a9..9d34e89f02 100644 --- a/modules/gdnative/doc_classes/NativeScript.xml +++ b/modules/gdnative/doc_classes/NativeScript.xml @@ -52,6 +52,4 @@ <member name="script_class_name" type="String" setter="set_script_class_name" getter="get_script_class_name" default=""""> </member> </members> - <constants> - </constants> </class> diff --git a/modules/gdnative/doc_classes/PacketPeerGDNative.xml b/modules/gdnative/doc_classes/PacketPeerGDNative.xml index ea9869cc58..32863f8422 100644 --- a/modules/gdnative/doc_classes/PacketPeerGDNative.xml +++ b/modules/gdnative/doc_classes/PacketPeerGDNative.xml @@ -6,8 +6,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/modules/gdnative/doc_classes/PluginScript.xml b/modules/gdnative/doc_classes/PluginScript.xml index 8e28187482..ec80ade394 100644 --- a/modules/gdnative/doc_classes/PluginScript.xml +++ b/modules/gdnative/doc_classes/PluginScript.xml @@ -14,6 +14,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/modules/gdnative/doc_classes/StreamPeerGDNative.xml b/modules/gdnative/doc_classes/StreamPeerGDNative.xml index de76277fff..a505de2106 100644 --- a/modules/gdnative/doc_classes/StreamPeerGDNative.xml +++ b/modules/gdnative/doc_classes/StreamPeerGDNative.xml @@ -6,8 +6,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/modules/gdnative/doc_classes/VideoStreamGDNative.xml b/modules/gdnative/doc_classes/VideoStreamGDNative.xml index 8b1a3210df..dc64e8fc18 100644 --- a/modules/gdnative/doc_classes/VideoStreamGDNative.xml +++ b/modules/gdnative/doc_classes/VideoStreamGDNative.xml @@ -24,6 +24,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/modules/gdnative/doc_classes/WebRTCDataChannelGDNative.xml b/modules/gdnative/doc_classes/WebRTCDataChannelGDNative.xml index f32a4f0a23..ddf354763c 100644 --- a/modules/gdnative/doc_classes/WebRTCDataChannelGDNative.xml +++ b/modules/gdnative/doc_classes/WebRTCDataChannelGDNative.xml @@ -6,8 +6,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/modules/gdnative/doc_classes/WebRTCPeerConnectionGDNative.xml b/modules/gdnative/doc_classes/WebRTCPeerConnectionGDNative.xml index 82f8633bb6..821779a0ff 100644 --- a/modules/gdnative/doc_classes/WebRTCPeerConnectionGDNative.xml +++ b/modules/gdnative/doc_classes/WebRTCPeerConnectionGDNative.xml @@ -6,8 +6,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/modules/gdscript/doc_classes/GDScript.xml b/modules/gdscript/doc_classes/GDScript.xml index 72738f027a..d45202bd40 100644 --- a/modules/gdscript/doc_classes/GDScript.xml +++ b/modules/gdscript/doc_classes/GDScript.xml @@ -30,6 +30,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/modules/gdscript/editor/gdscript_highlighter.cpp b/modules/gdscript/editor/gdscript_highlighter.cpp index ab441d194a..6529154e5c 100644 --- a/modules/gdscript/editor/gdscript_highlighter.cpp +++ b/modules/gdscript/editor/gdscript_highlighter.cpp @@ -467,7 +467,7 @@ void GDScriptSyntaxHighlighter::_update_cache() { List<StringName> global_classes; ScriptServer::get_global_class_list(&global_classes); for (const StringName &E : global_classes) { - keywords[String(E)] = usertype_color; + keywords[E] = usertype_color; } /* Autoloads. */ @@ -486,7 +486,7 @@ void GDScriptSyntaxHighlighter::_update_cache() { List<String> core_types; gdscript->get_core_type_words(&core_types); for (const String &E : core_types) { - keywords[E] = basetype_color; + keywords[StringName(E)] = basetype_color; } /* Reserved words. */ @@ -496,9 +496,9 @@ void GDScriptSyntaxHighlighter::_update_cache() { gdscript->get_reserved_words(&keyword_list); for (const String &E : keyword_list) { if (gdscript->is_control_flow_keyword(E)) { - keywords[E] = control_flow_keyword_color; + keywords[StringName(E)] = control_flow_keyword_color; } else { - keywords[E] = keyword_color; + keywords[StringName(E)] = keyword_color; } } diff --git a/modules/gdscript/editor/gdscript_highlighter.h b/modules/gdscript/editor/gdscript_highlighter.h index fabd64dab8..07f21b34ae 100644 --- a/modules/gdscript/editor/gdscript_highlighter.h +++ b/modules/gdscript/editor/gdscript_highlighter.h @@ -47,8 +47,8 @@ private: Vector<ColorRegion> color_regions; Map<int, int> color_region_cache; - Dictionary keywords; - Dictionary member_keywords; + HashMap<StringName, Color> keywords; + HashMap<StringName, Color> member_keywords; enum Type { NONE, diff --git a/modules/gdscript/gdscript_analyzer.cpp b/modules/gdscript/gdscript_analyzer.cpp index ceb6d5a5f0..23e88ae059 100644 --- a/modules/gdscript/gdscript_analyzer.cpp +++ b/modules/gdscript/gdscript_analyzer.cpp @@ -1754,7 +1754,6 @@ void GDScriptAnalyzer::reduce_assignment(GDScriptParser::AssignmentNode *p_assig } else { // TODO: Warning in this case. mark_node_unsafe(p_assignment); - p_assignment->use_conversion_assign = true; } } } else { diff --git a/modules/gdscript/gdscript_editor.cpp b/modules/gdscript/gdscript_editor.cpp index f79e5726ce..2f8a054b2a 100644 --- a/modules/gdscript/gdscript_editor.cpp +++ b/modules/gdscript/gdscript_editor.cpp @@ -781,6 +781,9 @@ static void _find_identifiers_in_class(const GDScriptParser::ClassNode *p_class, if (p_only_functions) { continue; } + if (r_result.has(member.constant->identifier->name)) { + continue; + } option = ScriptCodeCompletionOption(member.constant->identifier->name, ScriptCodeCompletionOption::KIND_CONSTANT); if (member.constant->initializer) { option.default_value = member.constant->initializer->reduced_value; diff --git a/modules/gdscript/gdscript_parser.cpp b/modules/gdscript/gdscript_parser.cpp index c901d9f68f..025accf4ba 100644 --- a/modules/gdscript/gdscript_parser.cpp +++ b/modules/gdscript/gdscript_parser.cpp @@ -579,7 +579,7 @@ void GDScriptParser::parse_program() { } } - parse_class_body(); + parse_class_body(true); #ifdef TOOLS_ENABLED for (Map<int, GDScriptTokenizer::CommentData>::Element *E = tokenizer.get_comments().front(); E; E = E->next()) { @@ -615,9 +615,10 @@ GDScriptParser::ClassNode *GDScriptParser::parse_class() { } consume(GDScriptTokenizer::Token::COLON, R"(Expected ":" after class declaration.)"); - consume(GDScriptTokenizer::Token::NEWLINE, R"(Expected newline after class declaration.)"); - if (!consume(GDScriptTokenizer::Token::INDENT, R"(Expected indented block after class declaration.)")) { + bool multiline = match(GDScriptTokenizer::Token::NEWLINE); + + if (multiline && !consume(GDScriptTokenizer::Token::INDENT, R"(Expected indented block after class declaration.)")) { current_class = previous_class; return n_class; } @@ -630,9 +631,11 @@ GDScriptParser::ClassNode *GDScriptParser::parse_class() { end_statement("superclass"); } - parse_class_body(); + parse_class_body(multiline); - consume(GDScriptTokenizer::Token::DEDENT, R"(Missing unindent at the end of the class body.)"); + if (multiline) { + consume(GDScriptTokenizer::Token::DEDENT, R"(Missing unindent at the end of the class body.)"); + } current_class = previous_class; return n_class; @@ -747,7 +750,7 @@ void GDScriptParser::parse_class_member(T *(GDScriptParser::*p_parse_function)() } } -void GDScriptParser::parse_class_body() { +void GDScriptParser::parse_class_body(bool p_is_multiline) { bool class_end = false; while (!class_end && !is_at_end()) { switch (current.type) { @@ -793,6 +796,9 @@ void GDScriptParser::parse_class_body() { if (panic_mode) { synchronize(); } + if (!p_is_multiline) { + class_end = true; + } } } @@ -1053,7 +1059,9 @@ GDScriptParser::SignalNode *GDScriptParser::parse_signal() { SignalNode *signal = alloc_node<SignalNode>(); signal->identifier = parse_identifier(); - if (match(GDScriptTokenizer::Token::PARENTHESIS_OPEN)) { + if (check(GDScriptTokenizer::Token::PARENTHESIS_OPEN)) { + push_multiline(true); + advance(); do { if (check(GDScriptTokenizer::Token::PARENTHESIS_CLOSE)) { // Allow for trailing comma. @@ -1076,6 +1084,7 @@ GDScriptParser::SignalNode *GDScriptParser::parse_signal() { } } while (match(GDScriptTokenizer::Token::COMMA) && !is_at_end()); + pop_multiline(); consume(GDScriptTokenizer::Token::PARENTHESIS_CLOSE, R"*(Expected closing ")" after signal parameters.)*"); } @@ -1358,6 +1367,9 @@ GDScriptParser::SuiteNode *GDScriptParser::parse_suite(const String &p_context, int error_count = 0; do { + if (!multiline && previous.type == GDScriptTokenizer::Token::SEMICOLON && check(GDScriptTokenizer::Token::NEWLINE)) { + break; + } Node *statement = parse_statement(); if (statement == nullptr) { if (error_count++ > 100) { @@ -1398,7 +1410,7 @@ GDScriptParser::SuiteNode *GDScriptParser::parse_suite(const String &p_context, break; } - } while (multiline && !check(GDScriptTokenizer::Token::DEDENT) && !lambda_ended && !is_at_end()); + } while ((multiline || previous.type == GDScriptTokenizer::Token::SEMICOLON) && !check(GDScriptTokenizer::Token::DEDENT) && !lambda_ended && !is_at_end()); if (multiline) { if (!lambda_ended) { @@ -2810,6 +2822,11 @@ GDScriptParser::ExpressionNode *GDScriptParser::parse_lambda(ExpressionNode *p_p return lambda; } +GDScriptParser::ExpressionNode *GDScriptParser::parse_yield(ExpressionNode *p_previous_operand, bool p_can_assign) { + push_error(R"("yield" was removed in Godot 4.0. Use "await" instead.)"); + return nullptr; +} + GDScriptParser::ExpressionNode *GDScriptParser::parse_invalid_token(ExpressionNode *p_previous_operand, bool p_can_assign) { // Just for better error messages. GDScriptTokenizer::Token::Type invalid = previous.type; @@ -3166,7 +3183,7 @@ GDScriptParser::ParseRule *GDScriptParser::get_rule(GDScriptTokenizer::Token::Ty { nullptr, nullptr, PREC_NONE }, // TRAIT, { nullptr, nullptr, PREC_NONE }, // VAR, { nullptr, nullptr, PREC_NONE }, // VOID, - { nullptr, nullptr, PREC_NONE }, // YIELD, + { &GDScriptParser::parse_yield, nullptr, PREC_NONE }, // YIELD, // Punctuation { &GDScriptParser::parse_array, &GDScriptParser::parse_subscript, PREC_SUBSCRIPT }, // BRACKET_OPEN, { nullptr, nullptr, PREC_NONE }, // BRACKET_CLOSE, diff --git a/modules/gdscript/gdscript_parser.h b/modules/gdscript/gdscript_parser.h index a641c1052d..593fb0cc5e 100644 --- a/modules/gdscript/gdscript_parser.h +++ b/modules/gdscript/gdscript_parser.h @@ -1324,7 +1324,7 @@ private: ClassNode *parse_class(); void parse_class_name(); void parse_extends(); - void parse_class_body(); + void parse_class_body(bool p_is_multiline); template <class T> void parse_class_member(T *(GDScriptParser::*p_parse_function)(), AnnotationInfo::TargetKind p_target, const String &p_member_kind); SignalNode *parse_signal(); @@ -1388,6 +1388,7 @@ private: ExpressionNode *parse_attribute(ExpressionNode *p_previous_operand, bool p_can_assign); ExpressionNode *parse_subscript(ExpressionNode *p_previous_operand, bool p_can_assign); ExpressionNode *parse_lambda(ExpressionNode *p_previous_operand, bool p_can_assign); + ExpressionNode *parse_yield(ExpressionNode *p_previous_operand, bool p_can_assign); ExpressionNode *parse_invalid_token(ExpressionNode *p_previous_operand, bool p_can_assign); TypeNode *parse_type(bool p_allow_void = false); #ifdef TOOLS_ENABLED diff --git a/modules/gdscript/language_server/gdscript_language_server.cpp b/modules/gdscript/language_server/gdscript_language_server.cpp index c47164d95b..41a2f9e4ad 100644 --- a/modules/gdscript/language_server/gdscript_language_server.cpp +++ b/modules/gdscript/language_server/gdscript_language_server.cpp @@ -36,6 +36,7 @@ #include "editor/editor_node.h" GDScriptLanguageServer::GDScriptLanguageServer() { + _EDITOR_DEF("network/language_server/remote_host", host); _EDITOR_DEF("network/language_server/remote_port", port); _EDITOR_DEF("network/language_server/enable_smart_resolve", true); _EDITOR_DEF("network/language_server/show_native_symbols_in_editor", false); @@ -56,9 +57,10 @@ void GDScriptLanguageServer::_notification(int p_what) { } } break; case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: { + String host = String(_EDITOR_GET("network/language_server/remote_host")); int port = (int)_EDITOR_GET("network/language_server/remote_port"); bool use_thread = (bool)_EDITOR_GET("network/language_server/use_thread"); - if (port != this->port || use_thread != this->use_thread) { + if (host != this->host || port != this->port || use_thread != this->use_thread) { this->stop(); this->start(); } @@ -76,9 +78,10 @@ void GDScriptLanguageServer::thread_main(void *p_userdata) { } void GDScriptLanguageServer::start() { + host = String(_EDITOR_GET("network/language_server/remote_host")); port = (int)_EDITOR_GET("network/language_server/remote_port"); use_thread = (bool)_EDITOR_GET("network/language_server/use_thread"); - if (protocol.start(port, IPAddress("127.0.0.1")) == OK) { + if (protocol.start(port, IPAddress(host)) == OK) { EditorNode::get_log()->add_message("--- GDScript language server started ---", EditorLog::MSG_TYPE_EDITOR); if (use_thread) { thread_running = true; diff --git a/modules/gdscript/language_server/gdscript_language_server.h b/modules/gdscript/language_server/gdscript_language_server.h index 29c5ddd70e..85a44a8cc1 100644 --- a/modules/gdscript/language_server/gdscript_language_server.h +++ b/modules/gdscript/language_server/gdscript_language_server.h @@ -44,6 +44,7 @@ class GDScriptLanguageServer : public EditorPlugin { bool thread_running = false; bool started = false; bool use_thread = false; + String host = "127.0.0.1"; int port = 6008; static void thread_main(void *p_userdata); diff --git a/modules/gdscript/tests/scripts/analyzer/errors/bitwise_float_right_operand.gd b/modules/gdscript/tests/scripts/analyzer/errors/bitwise_float_right_operand.gd index 4502960105..0a4f647f57 100644 --- a/modules/gdscript/tests/scripts/analyzer/errors/bitwise_float_right_operand.gd +++ b/modules/gdscript/tests/scripts/analyzer/errors/bitwise_float_right_operand.gd @@ -1,3 +1,3 @@ func test(): # Error here. - print(2 << 4.4) + print(2 >> 4.4) diff --git a/modules/gdscript/tests/scripts/analyzer/errors/bitwise_float_right_operand.out b/modules/gdscript/tests/scripts/analyzer/errors/bitwise_float_right_operand.out index 1879fc1adf..1edbf47ec0 100644 --- a/modules/gdscript/tests/scripts/analyzer/errors/bitwise_float_right_operand.out +++ b/modules/gdscript/tests/scripts/analyzer/errors/bitwise_float_right_operand.out @@ -1,2 +1,2 @@ GDTEST_ANALYZER_ERROR -Invalid operands to operator <<, int and float. +Invalid operands to operator >>, int and float. diff --git a/modules/gdscript/tests/scripts/analyzer/features/static_method_builtin_type.gd b/modules/gdscript/tests/scripts/analyzer/features/static_method_builtin_type.gd new file mode 100644 index 0000000000..569f95850f --- /dev/null +++ b/modules/gdscript/tests/scripts/analyzer/features/static_method_builtin_type.gd @@ -0,0 +1,2 @@ +func test(): + print(Color.html_is_valid("00ffff")) diff --git a/modules/gdscript/tests/scripts/analyzer/features/static_method_builtin_type.out b/modules/gdscript/tests/scripts/analyzer/features/static_method_builtin_type.out new file mode 100644 index 0000000000..55482c2b52 --- /dev/null +++ b/modules/gdscript/tests/scripts/analyzer/features/static_method_builtin_type.out @@ -0,0 +1,2 @@ +GDTEST_OK +true diff --git a/modules/gdscript/tests/scripts/parser/errors/brace_syntax.gd b/modules/gdscript/tests/scripts/parser/errors/brace_syntax.gd new file mode 100644 index 0000000000..ab66537c93 --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/errors/brace_syntax.gd @@ -0,0 +1,3 @@ +func test() { + print("Hello world!"); +} diff --git a/modules/gdscript/tests/scripts/parser/errors/brace_syntax.out b/modules/gdscript/tests/scripts/parser/errors/brace_syntax.out new file mode 100644 index 0000000000..2f37a740ab --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/errors/brace_syntax.out @@ -0,0 +1,2 @@ +GDTEST_PARSER_ERROR +Expected ":" after function declaration. diff --git a/modules/gdscript/tests/scripts/parser/errors/invalid_escape_sequence.gd b/modules/gdscript/tests/scripts/parser/errors/invalid_escape_sequence.gd new file mode 100644 index 0000000000..3b52f6e324 --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/errors/invalid_escape_sequence.gd @@ -0,0 +1,2 @@ +func test(): + var escape = "invalid escape \h <- here" diff --git a/modules/gdscript/tests/scripts/parser/errors/invalid_escape_sequence.out b/modules/gdscript/tests/scripts/parser/errors/invalid_escape_sequence.out new file mode 100644 index 0000000000..32b4d004db --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/errors/invalid_escape_sequence.out @@ -0,0 +1,2 @@ +GDTEST_PARSER_ERROR +Invalid escape in string. diff --git a/modules/gdscript/tests/scripts/parser/errors/invalid_ternary_operator.gd b/modules/gdscript/tests/scripts/parser/errors/invalid_ternary_operator.gd new file mode 100644 index 0000000000..c835ce15e1 --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/errors/invalid_ternary_operator.gd @@ -0,0 +1,5 @@ +func test(): + var amount = 50 + # C-style ternary operator is invalid in GDScript. + # The valid syntax is `"yes" if amount < 60 else "no"`, like in Python. + var ternary = amount < 60 ? "yes" : "no" diff --git a/modules/gdscript/tests/scripts/parser/errors/invalid_ternary_operator.out b/modules/gdscript/tests/scripts/parser/errors/invalid_ternary_operator.out new file mode 100644 index 0000000000..ac82d691b7 --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/errors/invalid_ternary_operator.out @@ -0,0 +1,2 @@ +GDTEST_PARSER_ERROR +Unexpected "?" in source. If you want a ternary operator, use "truthy_value if true_condition else falsy_value". diff --git a/modules/gdscript/tests/scripts/parser/errors/vcs_conflict_marker.gd b/modules/gdscript/tests/scripts/parser/errors/vcs_conflict_marker.gd new file mode 100644 index 0000000000..8850892f2d --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/errors/vcs_conflict_marker.gd @@ -0,0 +1,13 @@ +# The VCS conflict marker has only 6 `=` signs instead of 7 to prevent editors like +# Visual Studio Code from recognizing it as an actual VCS conflict marker. +# Nonetheless, the GDScript parser is still expected to find and report the VCS +# conflict marker error correctly. + +<<<<<<< HEAD +Hello world +====== +Goodbye +>>>>>>> 77976da35a11db4580b80ae27e8d65caf5208086 + +func test(): + pass diff --git a/modules/gdscript/tests/scripts/parser/errors/vcs_conflict_marker.out b/modules/gdscript/tests/scripts/parser/errors/vcs_conflict_marker.out new file mode 100644 index 0000000000..df9dab2223 --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/errors/vcs_conflict_marker.out @@ -0,0 +1,2 @@ +GDTEST_PARSER_ERROR +Unexpected "VCS conflict marker" in class body. diff --git a/modules/gdscript/tests/scripts/parser/errors/yield_instead_of_await.gd b/modules/gdscript/tests/scripts/parser/errors/yield_instead_of_await.gd new file mode 100644 index 0000000000..7862eff6ec --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/errors/yield_instead_of_await.gd @@ -0,0 +1,6 @@ +#GDTEST_PARSER_ERROR + +signal event + +func test(): + yield("event") diff --git a/modules/gdscript/tests/scripts/parser/errors/yield_instead_of_await.out b/modules/gdscript/tests/scripts/parser/errors/yield_instead_of_await.out new file mode 100644 index 0000000000..36cb699e92 --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/errors/yield_instead_of_await.out @@ -0,0 +1,2 @@ +GDTEST_PARSER_ERROR +"yield" was removed in Godot 4.0. Use "await" instead. diff --git a/modules/gdscript/tests/scripts/parser/features/export_variable.gd b/modules/gdscript/tests/scripts/parser/features/export_variable.gd index 51e7d4a8ed..1e072728fc 100644 --- a/modules/gdscript/tests/scripts/parser/features/export_variable.gd +++ b/modules/gdscript/tests/scripts/parser/features/export_variable.gd @@ -3,9 +3,16 @@ @export_range(0, 100, 1) var example_range_step = 101 @export_range(0, 100, 1, "or_greater") var example_range_step_or_greater = 102 +@export var color: Color +@export_color_no_alpha var color_no_alpha: Color +@export_node_path(Sprite2D, Sprite3D, Control, Node) var nodepath := ^"hello" + func test(): print(example) print(example_range) print(example_range_step) print(example_range_step_or_greater) + print(color) + print(color_no_alpha) + print(nodepath) diff --git a/modules/gdscript/tests/scripts/parser/features/export_variable.out b/modules/gdscript/tests/scripts/parser/features/export_variable.out index b455196359..bae35e75c6 100644 --- a/modules/gdscript/tests/scripts/parser/features/export_variable.out +++ b/modules/gdscript/tests/scripts/parser/features/export_variable.out @@ -3,3 +3,6 @@ GDTEST_OK 100 101 102 +(0, 0, 0, 1) +(0, 0, 0, 1) +hello diff --git a/modules/gdscript/tests/scripts/parser/features/function_default_parameter_type_inference.gd b/modules/gdscript/tests/scripts/parser/features/function_default_parameter_type_inference.gd new file mode 100644 index 0000000000..f5098b00ae --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/features/function_default_parameter_type_inference.gd @@ -0,0 +1,5 @@ +func example(_number: int, _number2: int = 5, number3 := 10): + return number3 + +func test(): + print(example(3)) diff --git a/modules/gdscript/tests/scripts/parser/features/function_default_parameter_type_inference.out b/modules/gdscript/tests/scripts/parser/features/function_default_parameter_type_inference.out new file mode 100644 index 0000000000..404cd41fe5 --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/features/function_default_parameter_type_inference.out @@ -0,0 +1,2 @@ +GDTEST_OK +10 diff --git a/modules/gdscript/tests/scripts/parser/features/function_many_parameters.gd b/modules/gdscript/tests/scripts/parser/features/function_many_parameters.gd new file mode 100644 index 0000000000..01edb37cec --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/features/function_many_parameters.gd @@ -0,0 +1,5 @@ +func example(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22, arg23, arg24, arg25, arg26, arg27, arg28, arg29, arg30, arg31, arg32, arg33, arg34, arg35, arg36, arg37, arg38, arg39, arg40, arg41, arg42, arg43, arg44, arg45, arg46, arg47, arg48 = false, arg49 = true, arg50 = null): + print(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22, arg23, arg24, arg25, arg26, arg27, arg28, arg29, arg30, arg31, arg32, arg33, arg34, arg35, arg36, arg37, arg38, arg39, arg40, arg41, arg42, arg43, arg44, arg45, arg46, arg47, arg48, arg49, arg50) + +func test(): + example(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47) diff --git a/modules/gdscript/tests/scripts/parser/features/function_many_parameters.out b/modules/gdscript/tests/scripts/parser/features/function_many_parameters.out new file mode 100644 index 0000000000..3a979227d4 --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/features/function_many_parameters.out @@ -0,0 +1,2 @@ +GDTEST_OK +123456789101112131415161718192212223242526272829303132333435363738394041424344454647falsetruenull diff --git a/modules/gdscript/tests/scripts/parser/features/lambda_callable.gd b/modules/gdscript/tests/scripts/parser/features/lambda_callable.gd new file mode 100644 index 0000000000..c3b2506156 --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/features/lambda_callable.gd @@ -0,0 +1,4 @@ +func test(): + var my_lambda = func(x): + print(x) + my_lambda.call("hello") diff --git a/modules/gdscript/tests/scripts/parser/features/lambda_callable.out b/modules/gdscript/tests/scripts/parser/features/lambda_callable.out new file mode 100644 index 0000000000..58774d2d3f --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/features/lambda_callable.out @@ -0,0 +1,2 @@ +GDTEST_OK +hello diff --git a/modules/gdscript/tests/scripts/parser/features/lambda_capture_callable.gd b/modules/gdscript/tests/scripts/parser/features/lambda_capture_callable.gd new file mode 100644 index 0000000000..f081a0b6a7 --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/features/lambda_capture_callable.gd @@ -0,0 +1,4 @@ +func test(): + var x = 42 + var my_lambda = func(): print(x) + my_lambda.call() # Prints "42". diff --git a/modules/gdscript/tests/scripts/parser/features/lambda_capture_callable.out b/modules/gdscript/tests/scripts/parser/features/lambda_capture_callable.out new file mode 100644 index 0000000000..0982f3718c --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/features/lambda_capture_callable.out @@ -0,0 +1,2 @@ +GDTEST_OK +42 diff --git a/modules/gdscript/tests/scripts/parser/features/lambda_named_callable.gd b/modules/gdscript/tests/scripts/parser/features/lambda_named_callable.gd new file mode 100644 index 0000000000..7971ca72a6 --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/features/lambda_named_callable.gd @@ -0,0 +1,10 @@ +func i_take_lambda(lambda: Callable, param: String): + lambda.call(param) + + +func test(): + var my_lambda := func this_is_lambda(x): + print("Hello") + print("This is %s" % x) + + i_take_lambda(my_lambda, "a lambda") diff --git a/modules/gdscript/tests/scripts/parser/features/lambda_named_callable.out b/modules/gdscript/tests/scripts/parser/features/lambda_named_callable.out new file mode 100644 index 0000000000..c627187d82 --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/features/lambda_named_callable.out @@ -0,0 +1,3 @@ +GDTEST_OK +Hello +This is a lambda diff --git a/modules/gdscript/tests/scripts/parser/features/nested_function_calls.gd b/modules/gdscript/tests/scripts/parser/features/nested_function_calls.gd new file mode 100644 index 0000000000..59cdc7d6c2 --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/features/nested_function_calls.gd @@ -0,0 +1,5 @@ +func foo(x): + return x + 1 + +func test(): + print(foo(foo(foo(foo(foo(foo(foo(foo(foo(foo(foo(foo(foo(foo(foo(foo(foo(foo(foo(foo(foo(foo(foo(foo(0))))))))))))))))))))))))) diff --git a/modules/gdscript/tests/scripts/parser/features/nested_function_calls.out b/modules/gdscript/tests/scripts/parser/features/nested_function_calls.out new file mode 100644 index 0000000000..28a6636a7b --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/features/nested_function_calls.out @@ -0,0 +1,2 @@ +GDTEST_OK +24 diff --git a/modules/gdscript/tests/scripts/parser/features/semicolon_as_terminator.gd b/modules/gdscript/tests/scripts/parser/features/semicolon_as_terminator.gd new file mode 100644 index 0000000000..0f4aebb459 --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/features/semicolon_as_terminator.gd @@ -0,0 +1,22 @@ +#GDTEST_OK + +func test(): + a(); + b(); + c(); + d(); + e(); + +func a(): print("a"); + +func b(): print("b1"); print("b2") + +func c(): print("c1"); print("c2"); + +func d(): + print("d1"); + print("d2") + +func e(): + print("e1"); + print("e2"); diff --git a/modules/gdscript/tests/scripts/parser/features/semicolon_as_terminator.out b/modules/gdscript/tests/scripts/parser/features/semicolon_as_terminator.out new file mode 100644 index 0000000000..387cbd8fc2 --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/features/semicolon_as_terminator.out @@ -0,0 +1,10 @@ +GDTEST_OK +a +b1 +b2 +c1 +c2 +d1 +d2 +e1 +e2 diff --git a/modules/gdscript/tests/scripts/parser/features/signal_declaration.gd b/modules/gdscript/tests/scripts/parser/features/signal_declaration.gd new file mode 100644 index 0000000000..9ad98b78a8 --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/features/signal_declaration.gd @@ -0,0 +1,20 @@ +#GDTEST_OK + +# No parentheses. +signal a + +# No parameters. +signal b() + +# With paramters. +signal c(a, b, c) + +# With parameters multiline. +signal d( + a, + b, + c, +) + +func test(): + print("Ok") diff --git a/modules/gdscript/tests/scripts/parser/features/signal_declaration.out b/modules/gdscript/tests/scripts/parser/features/signal_declaration.out new file mode 100644 index 0000000000..0e9f482af4 --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/features/signal_declaration.out @@ -0,0 +1,2 @@ +GDTEST_OK +Ok diff --git a/modules/gdscript/tests/scripts/parser/features/single_line_declaration.gd b/modules/gdscript/tests/scripts/parser/features/single_line_declaration.gd new file mode 100644 index 0000000000..650500663b --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/features/single_line_declaration.gd @@ -0,0 +1,11 @@ +#GDTEST_OK + +func test(): C.new().test("Ok"); test2() + +func test2(): print("Ok 2") + +class A: pass + +class B extends RefCounted: pass + +class C extends RefCounted: func test(x): print(x) diff --git a/modules/gdscript/tests/scripts/parser/features/single_line_declaration.out b/modules/gdscript/tests/scripts/parser/features/single_line_declaration.out new file mode 100644 index 0000000000..e021923dc2 --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/features/single_line_declaration.out @@ -0,0 +1,3 @@ +GDTEST_OK +Ok +Ok 2 diff --git a/modules/gdscript/tests/scripts/parser/features/typed_arrays.gd b/modules/gdscript/tests/scripts/parser/features/typed_arrays.gd new file mode 100644 index 0000000000..21bf3fdfcf --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/features/typed_arrays.gd @@ -0,0 +1,5 @@ +func test(): + var my_array: Array[int] = [1, 2, 3] + var inferred_array := [1, 2, 3] # This is Array[int]. + print(my_array) + print(inferred_array) diff --git a/modules/gdscript/tests/scripts/parser/features/typed_arrays.out b/modules/gdscript/tests/scripts/parser/features/typed_arrays.out new file mode 100644 index 0000000000..953d54d5e0 --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/features/typed_arrays.out @@ -0,0 +1,3 @@ +GDTEST_OK +[1, 2, 3] +[1, 2, 3] diff --git a/modules/gdscript/tests/scripts/runtime/features/recursion.gd b/modules/gdscript/tests/scripts/runtime/features/recursion.gd new file mode 100644 index 0000000000..a35485022e --- /dev/null +++ b/modules/gdscript/tests/scripts/runtime/features/recursion.gd @@ -0,0 +1,19 @@ +func is_prime(number: int, divisor: int = 2) -> bool: + print(divisor) + if number <= 2: + return (number == 2) + elif number % divisor == 0: + return false + elif divisor * divisor > number: + return true + + return is_prime(number, divisor + 1) + +func test(): + # Not a prime number. + print(is_prime(989)) + + print() + + # Largest prime number below 10000. + print(is_prime(9973)) diff --git a/modules/gdscript/tests/scripts/runtime/features/recursion.out b/modules/gdscript/tests/scripts/runtime/features/recursion.out new file mode 100644 index 0000000000..2bd8f24988 --- /dev/null +++ b/modules/gdscript/tests/scripts/runtime/features/recursion.out @@ -0,0 +1,125 @@ +GDTEST_OK +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +false + +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +true diff --git a/modules/gltf/doc_classes/EditorSceneImporterGLTF.xml b/modules/gltf/doc_classes/EditorSceneImporterGLTF.xml index e717b30f73..c85fce7b9d 100644 --- a/modules/gltf/doc_classes/EditorSceneImporterGLTF.xml +++ b/modules/gltf/doc_classes/EditorSceneImporterGLTF.xml @@ -6,8 +6,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/modules/gltf/doc_classes/GLTFAccessor.xml b/modules/gltf/doc_classes/GLTFAccessor.xml index 41a318ce19..ae81cae81a 100644 --- a/modules/gltf/doc_classes/GLTFAccessor.xml +++ b/modules/gltf/doc_classes/GLTFAccessor.xml @@ -6,8 +6,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="buffer_view" type="int" setter="set_buffer_view" getter="get_buffer_view" default="0"> </member> @@ -38,6 +36,4 @@ <member name="type" type="int" setter="set_type" getter="get_type" default="0"> </member> </members> - <constants> - </constants> </class> diff --git a/modules/gltf/doc_classes/GLTFAnimation.xml b/modules/gltf/doc_classes/GLTFAnimation.xml index 5c1fa02f11..70480c2b38 100644 --- a/modules/gltf/doc_classes/GLTFAnimation.xml +++ b/modules/gltf/doc_classes/GLTFAnimation.xml @@ -6,12 +6,8 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="loop" type="bool" setter="set_loop" getter="get_loop" default="false"> </member> </members> - <constants> - </constants> </class> diff --git a/modules/gltf/doc_classes/GLTFBufferView.xml b/modules/gltf/doc_classes/GLTFBufferView.xml index edaad85e0a..f58aa46508 100644 --- a/modules/gltf/doc_classes/GLTFBufferView.xml +++ b/modules/gltf/doc_classes/GLTFBufferView.xml @@ -6,8 +6,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="buffer" type="int" setter="set_buffer" getter="get_buffer" default="-1"> </member> @@ -20,6 +18,4 @@ <member name="indices" type="bool" setter="set_indices" getter="get_indices" default="false"> </member> </members> - <constants> - </constants> </class> diff --git a/modules/gltf/doc_classes/GLTFCamera.xml b/modules/gltf/doc_classes/GLTFCamera.xml index ec25d84756..3682df5951 100644 --- a/modules/gltf/doc_classes/GLTFCamera.xml +++ b/modules/gltf/doc_classes/GLTFCamera.xml @@ -6,8 +6,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="depth_far" type="float" setter="set_depth_far" getter="get_depth_far" default="4000.0"> </member> @@ -18,6 +16,4 @@ <member name="perspective" type="bool" setter="set_perspective" getter="get_perspective" default="true"> </member> </members> - <constants> - </constants> </class> diff --git a/modules/gltf/doc_classes/GLTFDocument.xml b/modules/gltf/doc_classes/GLTFDocument.xml index f8e0007684..16e649f390 100644 --- a/modules/gltf/doc_classes/GLTFDocument.xml +++ b/modules/gltf/doc_classes/GLTFDocument.xml @@ -30,6 +30,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/modules/gltf/doc_classes/GLTFLight.xml b/modules/gltf/doc_classes/GLTFLight.xml index 2eb5ee9070..91df7d8014 100644 --- a/modules/gltf/doc_classes/GLTFLight.xml +++ b/modules/gltf/doc_classes/GLTFLight.xml @@ -6,8 +6,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="color" type="Color" setter="set_color" getter="get_color" default="Color(0, 0, 0, 1)"> </member> @@ -22,6 +20,4 @@ <member name="range" type="float" setter="set_range" getter="get_range" default="0.0"> </member> </members> - <constants> - </constants> </class> diff --git a/modules/gltf/doc_classes/GLTFMesh.xml b/modules/gltf/doc_classes/GLTFMesh.xml index fd7e4a169e..51e9fc032a 100644 --- a/modules/gltf/doc_classes/GLTFMesh.xml +++ b/modules/gltf/doc_classes/GLTFMesh.xml @@ -6,14 +6,10 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="blend_weights" type="PackedFloat32Array" setter="set_blend_weights" getter="get_blend_weights" default="PackedFloat32Array()"> </member> <member name="mesh" type="EditorSceneImporterMesh" setter="set_mesh" getter="get_mesh"> </member> </members> - <constants> - </constants> </class> diff --git a/modules/gltf/doc_classes/GLTFNode.xml b/modules/gltf/doc_classes/GLTFNode.xml index 95d7283398..f27965ea07 100644 --- a/modules/gltf/doc_classes/GLTFNode.xml +++ b/modules/gltf/doc_classes/GLTFNode.xml @@ -6,8 +6,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="camera" type="int" setter="set_camera" getter="get_camera" default="-1"> </member> @@ -36,6 +34,4 @@ <member name="xform" type="Transform3D" setter="set_xform" getter="get_xform" default="Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)"> </member> </members> - <constants> - </constants> </class> diff --git a/modules/gltf/doc_classes/GLTFSkeleton.xml b/modules/gltf/doc_classes/GLTFSkeleton.xml index 6e83cec252..037c3545a6 100644 --- a/modules/gltf/doc_classes/GLTFSkeleton.xml +++ b/modules/gltf/doc_classes/GLTFSkeleton.xml @@ -52,6 +52,4 @@ <member name="roots" type="PackedInt32Array" setter="set_roots" getter="get_roots" default="PackedInt32Array()"> </member> </members> - <constants> - </constants> </class> diff --git a/modules/gltf/doc_classes/GLTFSkin.xml b/modules/gltf/doc_classes/GLTFSkin.xml index 107ca960cd..ad4f017584 100644 --- a/modules/gltf/doc_classes/GLTFSkin.xml +++ b/modules/gltf/doc_classes/GLTFSkin.xml @@ -57,6 +57,4 @@ <member name="skin_root" type="int" setter="set_skin_root" getter="get_skin_root" default="-1"> </member> </members> - <constants> - </constants> </class> diff --git a/modules/gltf/doc_classes/GLTFSpecGloss.xml b/modules/gltf/doc_classes/GLTFSpecGloss.xml index 6e9c419649..6b8f86ed1c 100644 --- a/modules/gltf/doc_classes/GLTFSpecGloss.xml +++ b/modules/gltf/doc_classes/GLTFSpecGloss.xml @@ -6,8 +6,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="diffuse_factor" type="Color" setter="set_diffuse_factor" getter="get_diffuse_factor" default="Color(1, 1, 1, 1)"> </member> @@ -20,6 +18,4 @@ <member name="specular_factor" type="Color" setter="set_specular_factor" getter="get_specular_factor" default="Color(1, 1, 1, 1)"> </member> </members> - <constants> - </constants> </class> diff --git a/modules/gltf/doc_classes/GLTFState.xml b/modules/gltf/doc_classes/GLTFState.xml index ae976fc04c..6d03d0ecf8 100644 --- a/modules/gltf/doc_classes/GLTFState.xml +++ b/modules/gltf/doc_classes/GLTFState.xml @@ -209,6 +209,4 @@ <member name="use_named_skin_binds" type="bool" setter="set_use_named_skin_binds" getter="get_use_named_skin_binds" default="false"> </member> </members> - <constants> - </constants> </class> diff --git a/modules/gltf/doc_classes/GLTFTexture.xml b/modules/gltf/doc_classes/GLTFTexture.xml index 33bd8fddeb..7c88d2318e 100644 --- a/modules/gltf/doc_classes/GLTFTexture.xml +++ b/modules/gltf/doc_classes/GLTFTexture.xml @@ -6,12 +6,8 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="src_image" type="int" setter="set_src_image" getter="get_src_image" default="0"> </member> </members> - <constants> - </constants> </class> diff --git a/modules/gltf/gltf_document.cpp b/modules/gltf/gltf_document.cpp index d4f4221663..df2856ec7c 100644 --- a/modules/gltf/gltf_document.cpp +++ b/modules/gltf/gltf_document.cpp @@ -6744,6 +6744,8 @@ Error GLTFDocument::_serialize_file(Ref<GLTFState> state, const String p_path) { Error GLTFDocument::save_scene(Node *p_node, const String &p_path, const String &p_src_path, uint32_t p_flags, float p_bake_fps, Ref<GLTFState> r_state) { + ERR_FAIL_NULL_V(p_node, ERR_INVALID_PARAMETER); + Ref<GLTFDocument> gltf_document; gltf_document.instantiate(); if (r_state == Ref<GLTFState>()) { diff --git a/modules/lightmapper_rd/lm_compute.glsl b/modules/lightmapper_rd/lm_compute.glsl index a71652d5c4..25b334c5eb 100644 --- a/modules/lightmapper_rd/lm_compute.glsl +++ b/modules/lightmapper_rd/lm_compute.glsl @@ -115,7 +115,12 @@ bool ray_hits_triangle(vec3 from, vec3 dir, float max_dist, vec3 p0, vec3 p1, ve return (r_distance > params.bias) && (r_distance < max_dist) && all(greaterThanEqual(r_barycentric, vec3(0.0))); } -bool trace_ray(vec3 p_from, vec3 p_to +const uint RAY_MISS = 0; +const uint RAY_FRONT = 1; +const uint RAY_BACK = 2; +const uint RAY_ANY = 3; + +uint trace_ray(vec3 p_from, vec3 p_to #if defined(MODE_BOUNCE_LIGHT) || defined(MODE_LIGHT_PROBES) , out uint r_triangle, out vec3 r_barycentric @@ -125,6 +130,7 @@ bool trace_ray(vec3 p_from, vec3 p_to out float r_distance, out vec3 r_normal #endif ) { + /* world coords */ vec3 rel = p_to - p_from; @@ -150,10 +156,7 @@ bool trace_ray(vec3 p_from, vec3 p_to while (all(greaterThanEqual(icell, ivec3(0))) && all(lessThan(icell, ivec3(params.grid_size))) && iters < 1000) { uvec2 cell_data = texelFetch(usampler3D(grid, linear_sampler), icell, 0).xy; if (cell_data.x > 0) { //triangles here - bool hit = false; -#if defined(MODE_UNOCCLUDE) - bool hit_backface = false; -#endif + uint hit = RAY_MISS; float best_distance = 1e20; for (uint i = 0; i < cell_data.x; i++) { @@ -173,57 +176,46 @@ bool trace_ray(vec3 p_from, vec3 p_to vec3 vtx0 = vertices.data[triangle.indices.x].position; vec3 vtx1 = vertices.data[triangle.indices.y].position; vec3 vtx2 = vertices.data[triangle.indices.z].position; -#if defined(MODE_UNOCCLUDE) +#if defined(MODE_UNOCCLUDE) || defined(MODE_BOUNCE_LIGHT) || defined(MODE_LIGHT_PROBES) vec3 normal = -normalize(cross((vtx0 - vtx1), (vtx0 - vtx2))); bool backface = dot(normal, dir) >= 0.0; #endif + float distance; vec3 barycentric; if (ray_hits_triangle(p_from, dir, rel_len, vtx0, vtx1, vtx2, distance, barycentric)) { #ifdef MODE_DIRECT_LIGHT - return true; //any hit good + return RAY_ANY; //any hit good #endif -#if defined(MODE_UNOCCLUDE) +#if defined(MODE_UNOCCLUDE) || defined(MODE_BOUNCE_LIGHT) || defined(MODE_LIGHT_PROBES) if (!backface) { // the case of meshes having both a front and back face in the same plane is more common than // expected, so if this is a front-face, bias it closer to the ray origin, so it always wins over the back-face distance = max(params.bias, distance - params.bias); } - hit = true; - if (distance < best_distance) { - hit_backface = backface; + hit = backface ? RAY_BACK : RAY_FRONT; best_distance = distance; +#if defined(MODE_UNOCCLUDE) r_distance = distance; r_normal = normal; - } - #endif - #if defined(MODE_BOUNCE_LIGHT) || defined(MODE_LIGHT_PROBES) - - hit = true; - if (distance < best_distance) { - best_distance = distance; r_triangle = tidx; r_barycentric = barycentric; +#endif } #endif } } -#if defined(MODE_UNOCCLUDE) +#if defined(MODE_UNOCCLUDE) || defined(MODE_BOUNCE_LIGHT) || defined(MODE_LIGHT_PROBES) - if (hit) { - return hit_backface; - } -#endif -#if defined(MODE_BOUNCE_LIGHT) || defined(MODE_LIGHT_PROBES) - if (hit) { - return true; + if (hit != RAY_MISS) { + return hit; } #endif } @@ -239,7 +231,7 @@ bool trace_ray(vec3 p_from, vec3 p_to iters++; } - return false; + return RAY_MISS; } const float PI = 3.14159265f; @@ -339,7 +331,7 @@ void main() { continue; //no need to do anything } - if (!trace_ray(position + light_dir * params.bias, light_pos)) { + if (trace_ray(position + light_dir * params.bias, light_pos) == RAY_MISS) { vec3 light = lights.data[i].color * lights.data[i].energy * attenuation; if (lights.data[i].static_bake) { static_light += light; @@ -410,6 +402,7 @@ void main() { vec4(0.0, 0.0, 0.0, 1.0)); #endif vec3 light_average = vec3(0.0); + float active_rays = 0.0; for (uint i = params.ray_from; i < params.ray_to; i++) { vec3 ray_dir = normal_mat * vogel_hemisphere(i, params.ray_count, quick_hash(vec2(atlas_pos))); @@ -417,7 +410,8 @@ void main() { vec3 barycentric; vec3 light = vec3(0.0); - if (trace_ray(position + ray_dir * params.bias, position + ray_dir * length(params.world_size), tidx, barycentric)) { + uint trace_result = trace_ray(position + ray_dir * params.bias, position + ray_dir * length(params.world_size), tidx, barycentric); + if (trace_result == RAY_FRONT) { //hit a triangle vec2 uv0 = vertices.data[triangles.data[tidx].indices.x].uv; vec2 uv1 = vertices.data[triangles.data[tidx].indices.y].uv; @@ -425,7 +419,8 @@ void main() { vec3 uvw = vec3(barycentric.x * uv0 + barycentric.y * uv1 + barycentric.z * uv2, float(triangles.data[tidx].slice)); light = textureLod(sampler2DArray(source_light, linear_sampler), uvw, 0.0).rgb; - } else if (params.env_transform[0][3] == 0.0) { // Use env_transform[0][3] to indicate when we are computing the first bounce + active_rays += 1.0; + } else if (trace_result == RAY_MISS && params.env_transform[0][3] == 0.0) { // Use env_transform[0][3] to indicate when we are computing the first bounce // Did not hit a triangle, reach out for the sky vec3 sky_dir = normalize(mat3(params.env_transform) * ray_dir); @@ -439,6 +434,7 @@ void main() { st /= vec2(PI * 2.0, PI); light = textureLod(sampler2D(environment, linear_sampler), st, 0.0).rgb; + active_rays += 1.0; } light_average += light; @@ -462,7 +458,9 @@ void main() { if (params.ray_from == 0) { light_total = vec3(0.0); } else { - light_total = imageLoad(bounce_accum, ivec3(atlas_pos, params.atlas_slice)).rgb; + vec4 accum = imageLoad(bounce_accum, ivec3(atlas_pos, params.atlas_slice)); + light_total = accum.rgb; + active_rays += accum.a; } light_total += light_average; @@ -477,7 +475,9 @@ void main() { #endif if (params.ray_to == params.ray_count) { - light_total /= float(params.ray_count); + if (active_rays > 0) { + light_total /= active_rays; + } imageStore(dest_light, ivec3(atlas_pos, params.atlas_slice), vec4(light_total, 1.0)); #ifndef USE_SH_LIGHTMAPS vec4 accum = imageLoad(accum_light, ivec3(atlas_pos, params.atlas_slice)); @@ -485,7 +485,7 @@ void main() { imageStore(accum_light, ivec3(atlas_pos, params.atlas_slice), accum); #endif } else { - imageStore(bounce_accum, ivec3(atlas_pos, params.atlas_slice), vec4(light_total, 1.0)); + imageStore(bounce_accum, ivec3(atlas_pos, params.atlas_slice), vec4(light_total, active_rays)); } #endif @@ -518,7 +518,7 @@ void main() { float d; vec3 norm; - if (trace_ray(base_pos, ray_to, d, norm)) { + if (trace_ray(base_pos, ray_to, d, norm) == RAY_BACK) { if (d < min_d) { vertex_pos = base_pos + rays[i] * d + norm * params.bias * 10.0; //this bias needs to be greater than the regular bias, because otherwise later, rays will go the other side when pointing back. min_d = d; @@ -558,7 +558,8 @@ void main() { vec3 barycentric; vec3 light; - if (trace_ray(position + ray_dir * params.bias, position + ray_dir * length(params.world_size), tidx, barycentric)) { + uint trace_result = trace_ray(position + ray_dir * params.bias, position + ray_dir * length(params.world_size), tidx, barycentric); + if (trace_result == RAY_FRONT) { vec2 uv0 = vertices.data[triangles.data[tidx].indices.x].uv; vec2 uv1 = vertices.data[triangles.data[tidx].indices.y].uv; vec2 uv2 = vertices.data[triangles.data[tidx].indices.z].uv; @@ -566,7 +567,7 @@ void main() { light = textureLod(sampler2DArray(source_light, linear_sampler), uvw, 0.0).rgb; light += textureLod(sampler2DArray(source_direct_light, linear_sampler), uvw, 0.0).rgb; - } else { + } else if (trace_result == RAY_MISS) { //did not hit a triangle, reach out for the sky vec3 sky_dir = normalize(mat3(params.env_transform) * ray_dir); diff --git a/modules/minimp3/doc_classes/AudioStreamMP3.xml b/modules/minimp3/doc_classes/AudioStreamMP3.xml index 5507329a18..e4f56614ee 100644 --- a/modules/minimp3/doc_classes/AudioStreamMP3.xml +++ b/modules/minimp3/doc_classes/AudioStreamMP3.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="data" type="PackedByteArray" setter="set_data" getter="get_data" default="PackedByteArray()"> Contains the audio data in bytes. @@ -21,6 +19,4 @@ Time in seconds at which the stream starts after being looped. </member> </members> - <constants> - </constants> </class> diff --git a/modules/mobile_vr/doc_classes/MobileVRInterface.xml b/modules/mobile_vr/doc_classes/MobileVRInterface.xml index 120535bd41..04ba82ef51 100644 --- a/modules/mobile_vr/doc_classes/MobileVRInterface.xml +++ b/modules/mobile_vr/doc_classes/MobileVRInterface.xml @@ -15,8 +15,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="display_to_lens" type="float" setter="set_display_to_lens" getter="get_display_to_lens" default="4.0"> The distance between the display and the lenses inside of the device in centimeters. @@ -40,6 +38,4 @@ The oversample setting. Because of the lens distortion we have to render our buffers at a higher resolution then the screen can natively handle. A value between 1.5 and 2.0 often provides good results but at the cost of performance. </member> </members> - <constants> - </constants> </class> diff --git a/modules/mobile_vr/mobile_vr_interface.cpp b/modules/mobile_vr/mobile_vr_interface.cpp index bbf1db689d..fc1a118e4f 100644 --- a/modules/mobile_vr/mobile_vr_interface.cpp +++ b/modules/mobile_vr/mobile_vr_interface.cpp @@ -244,59 +244,59 @@ void MobileVRInterface::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "k2", PROPERTY_HINT_RANGE, "0.1,10.0,0.0001"), "set_k2", "get_k2"); } -void MobileVRInterface::set_eye_height(const real_t p_eye_height) { +void MobileVRInterface::set_eye_height(const double p_eye_height) { eye_height = p_eye_height; } -real_t MobileVRInterface::get_eye_height() const { +double MobileVRInterface::get_eye_height() const { return eye_height; } -void MobileVRInterface::set_iod(const real_t p_iod) { +void MobileVRInterface::set_iod(const double p_iod) { intraocular_dist = p_iod; }; -real_t MobileVRInterface::get_iod() const { +double MobileVRInterface::get_iod() const { return intraocular_dist; }; -void MobileVRInterface::set_display_width(const real_t p_display_width) { +void MobileVRInterface::set_display_width(const double p_display_width) { display_width = p_display_width; }; -real_t MobileVRInterface::get_display_width() const { +double MobileVRInterface::get_display_width() const { return display_width; }; -void MobileVRInterface::set_display_to_lens(const real_t p_display_to_lens) { +void MobileVRInterface::set_display_to_lens(const double p_display_to_lens) { display_to_lens = p_display_to_lens; }; -real_t MobileVRInterface::get_display_to_lens() const { +double MobileVRInterface::get_display_to_lens() const { return display_to_lens; }; -void MobileVRInterface::set_oversample(const real_t p_oversample) { +void MobileVRInterface::set_oversample(const double p_oversample) { oversample = p_oversample; }; -real_t MobileVRInterface::get_oversample() const { +double MobileVRInterface::get_oversample() const { return oversample; }; -void MobileVRInterface::set_k1(const real_t p_k1) { +void MobileVRInterface::set_k1(const double p_k1) { k1 = p_k1; }; -real_t MobileVRInterface::get_k1() const { +double MobileVRInterface::get_k1() const { return k1; }; -void MobileVRInterface::set_k2(const real_t p_k2) { +void MobileVRInterface::set_k2(const double p_k2) { k2 = p_k2; }; -real_t MobileVRInterface::get_k2() const { +double MobileVRInterface::get_k2() const { return k2; }; @@ -422,7 +422,7 @@ Transform3D MobileVRInterface::get_transform_for_view(uint32_t p_view, const Tra return transform_for_eye; }; -CameraMatrix MobileVRInterface::get_projection_for_view(uint32_t p_view, real_t p_aspect, real_t p_z_near, real_t p_z_far) { +CameraMatrix MobileVRInterface::get_projection_for_view(uint32_t p_view, double p_aspect, double p_z_near, double p_z_far) { _THREAD_SAFE_METHOD_ CameraMatrix eye; diff --git a/modules/mobile_vr/mobile_vr_interface.h b/modules/mobile_vr/mobile_vr_interface.h index 48b76ec187..a843e1188b 100644 --- a/modules/mobile_vr/mobile_vr_interface.h +++ b/modules/mobile_vr/mobile_vr_interface.h @@ -56,17 +56,17 @@ private: Basis orientation; // Just set some defaults for these. At some point we need to look at adding a lookup table for common device + headset combos and/or support reading cardboard QR codes - float eye_height = 1.85; + double eye_height = 1.85; uint64_t last_ticks = 0; - real_t intraocular_dist = 6.0; - real_t display_width = 14.5; - real_t display_to_lens = 4.0; - real_t oversample = 1.5; + double intraocular_dist = 6.0; + double display_width = 14.5; + double display_to_lens = 4.0; + double oversample = 1.5; - real_t k1 = 0.215; - real_t k2 = 0.215; - real_t aspect = 1.0; + double k1 = 0.215; + double k2 = 0.215; + double aspect = 1.0; /* logic for processing our sensor data, this was originally in our positional tracker logic but I think @@ -110,26 +110,26 @@ protected: static void _bind_methods(); public: - void set_eye_height(const real_t p_eye_height); - real_t get_eye_height() const; + void set_eye_height(const double p_eye_height); + double get_eye_height() const; - void set_iod(const real_t p_iod); - real_t get_iod() const; + void set_iod(const double p_iod); + double get_iod() const; - void set_display_width(const real_t p_display_width); - real_t get_display_width() const; + void set_display_width(const double p_display_width); + double get_display_width() const; - void set_display_to_lens(const real_t p_display_to_lens); - real_t get_display_to_lens() const; + void set_display_to_lens(const double p_display_to_lens); + double get_display_to_lens() const; - void set_oversample(const real_t p_oversample); - real_t get_oversample() const; + void set_oversample(const double p_oversample); + double get_oversample() const; - void set_k1(const real_t p_k1); - real_t get_k1() const; + void set_k1(const double p_k1); + double get_k1() const; - void set_k2(const real_t p_k2); - real_t get_k2() const; + void set_k2(const double p_k2); + double get_k2() const; virtual StringName get_name() const override; virtual uint32_t get_capabilities() const override; @@ -144,7 +144,7 @@ public: virtual uint32_t get_view_count() override; virtual Transform3D get_camera_transform() override; virtual Transform3D get_transform_for_view(uint32_t p_view, const Transform3D &p_cam_transform) override; - virtual CameraMatrix get_projection_for_view(uint32_t p_view, real_t p_aspect, real_t p_z_near, real_t p_z_far) override; + virtual CameraMatrix get_projection_for_view(uint32_t p_view, double p_aspect, double p_z_near, double p_z_far) override; virtual Vector<BlitToScreen> commit_views(RID p_render_target, const Rect2 &p_screen_rect) override; virtual void process() override; diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Extensions/NodeExtensions.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Extensions/NodeExtensions.cs index 658582960f..1dc21b6303 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Extensions/NodeExtensions.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Extensions/NodeExtensions.cs @@ -78,7 +78,8 @@ namespace Godot /// </example> /// <seealso cref="GetNode{T}(NodePath)"/> /// <param name="path">The path to the node to fetch.</param> - /// <typeparam name="T">The type to cast to. Should be a descendant of <see cref="Node"/>.</typeparam>/// ///////// <returns> + /// <typeparam name="T">The type to cast to. Should be a descendant of <see cref="Node"/>.</typeparam> + /// <returns> /// The <see cref="Node"/> at the given <paramref name="path"/>, or <see langword="null"/> if not found. /// </returns> public T GetNodeOrNull<T>(NodePath path) where T : class @@ -97,7 +98,8 @@ namespace Godot /// <exception cref="InvalidCastException"> /// Thrown when the given the fetched node can't be casted to the given type <typeparamref name="T"/>. /// </exception> - /// <typeparam name="T">The type to cast to. Should be a descendant of <see cref="Node"/>.</typeparam>/// ///////// <returns> + /// <typeparam name="T">The type to cast to. Should be a descendant of <see cref="Node"/>.</typeparam> + /// <returns> /// The child <see cref="Node"/> at the given index <paramref name="idx"/>. /// </returns> public T GetChild<T>(int idx) where T : class diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform2D.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform2D.cs index daea09ba72..c82c5f4588 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform2D.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform2D.cs @@ -361,6 +361,7 @@ namespace Godot /// <seealso cref="XformInv(Vector2)"/> /// <param name="v">A vector to transform.</param> /// <returns>The transformed vector.</returns> + [Obsolete("Xform is deprecated. Use the multiplication operator (Transform2D * Vector2) instead.")] public Vector2 Xform(Vector2 v) { return new Vector2(Tdotx(v), Tdoty(v)) + origin; @@ -372,6 +373,7 @@ namespace Godot /// <seealso cref="Xform(Vector2)"/> /// <param name="v">A vector to inversely transform.</param> /// <returns>The inversely transformed vector.</returns> + [Obsolete("XformInv is deprecated. Use the multiplication operator (Vector2 * Transform2D) instead.")] public Vector2 XformInv(Vector2 v) { Vector2 vInv = v - origin; @@ -447,7 +449,7 @@ namespace Godot public static Transform2D operator *(Transform2D left, Transform2D right) { - left.origin = left.Xform(right.origin); + left.origin = left * right.origin; real_t x0 = left.Tdotx(right.x); real_t x1 = left.Tdoty(right.x); @@ -462,6 +464,96 @@ namespace Godot return left; } + /// <summary> + /// Returns a Vector2 transformed (multiplied) by transformation matrix. + /// </summary> + /// <param name="transform">The transformation to apply.</param> + /// <param name="vector">A Vector2 to transform.</param> + /// <returns>The transformed Vector2.</returns> + public static Vector2 operator *(Transform2D transform, Vector2 vector) + { + return new Vector2(transform.Tdotx(vector), transform.Tdoty(vector)) + transform.origin; + } + + /// <summary> + /// Returns a Vector2 transformed (multiplied) by the inverse transformation matrix. + /// </summary> + /// <param name="vector">A Vector2 to inversely transform.</param> + /// <param name="transform">The transformation to apply.</param> + /// <returns>The inversely transformed Vector2.</returns> + public static Vector2 operator *(Vector2 vector, Transform2D transform) + { + Vector2 vInv = vector - transform.origin; + return new Vector2(transform.x.Dot(vInv), transform.y.Dot(vInv)); + } + + /// <summary> + /// Returns a Rect2 transformed (multiplied) by transformation matrix. + /// </summary> + /// <param name="transform">The transformation to apply.</param> + /// <param name="rect">A Rect2 to transform.</param> + /// <returns>The transformed Rect2.</returns> + public static Rect2 operator *(Transform2D transform, Rect2 rect) + { + Vector2 pos = transform * rect.Position; + Vector2 toX = transform.x * rect.Size.x; + Vector2 toY = transform.y * rect.Size.y; + + return new Rect2(pos, rect.Size).Expand(pos + toX).Expand(pos + toY).Expand(pos + toX + toY); + } + + /// <summary> + /// Returns a Rect2 transformed (multiplied) by the inverse transformation matrix. + /// </summary> + /// <param name="rect">A Rect2 to inversely transform.</param> + /// <param name="transform">The transformation to apply.</param> + /// <returns>The inversely transformed Rect2.</returns> + public static Rect2 operator *(Rect2 rect, Transform2D transform) + { + Vector2 pos = rect.Position * transform; + Vector2 to1 = new Vector2(rect.Position.x, rect.Position.y + rect.Size.y) * transform; + Vector2 to2 = new Vector2(rect.Position.x + rect.Size.x, rect.Position.y + rect.Size.y) * transform; + Vector2 to3 = new Vector2(rect.Position.x + rect.Size.x, rect.Position.y) * transform; + + return new Rect2(pos, rect.Size).Expand(to1).Expand(to2).Expand(to3); + } + + /// <summary> + /// Returns a copy of the given Vector2[] transformed (multiplied) by transformation matrix. + /// </summary> + /// <param name="transform">The transformation to apply.</param> + /// <param name="array">A Vector2[] to transform.</param> + /// <returns>The transformed copy of the Vector2[].</returns> + public static Vector2[] operator *(Transform2D transform, Vector2[] array) + { + Vector2[] newArray = new Vector2[array.Length]; + + for (int i = 0; i < array.Length; i++) + { + newArray[i] = transform * array[i]; + } + + return newArray; + } + + /// <summary> + /// Returns a copy of the given Vector2[] transformed (multiplied) by the inverse transformation matrix. + /// </summary> + /// <param name="array">A Vector2[] to inversely transform.</param> + /// <param name="transform">The transformation to apply.</param> + /// <returns>The inversely transformed copy of the Vector2[].</returns> + public static Vector2[] operator *(Vector2[] array, Transform2D transform) + { + Vector2[] newArray = new Vector2[array.Length]; + + for (int i = 0; i < array.Length; i++) + { + newArray[i] = array[i] * transform; + } + + return newArray; + } + public static bool operator ==(Transform2D left, Transform2D right) { return left.Equals(right); diff --git a/modules/ogg/doc_classes/OGGPacketSequence.xml b/modules/ogg/doc_classes/OGGPacketSequence.xml index 9d3789cb07..deac5b67e2 100644 --- a/modules/ogg/doc_classes/OGGPacketSequence.xml +++ b/modules/ogg/doc_classes/OGGPacketSequence.xml @@ -27,6 +27,4 @@ Holds sample rate information about this sequence. Must be set by another class that actually understands the codec. </member> </members> - <constants> - </constants> </class> diff --git a/modules/ogg/doc_classes/OGGPacketSequencePlayback.xml b/modules/ogg/doc_classes/OGGPacketSequencePlayback.xml index 49e32f0d6e..86dee15567 100644 --- a/modules/ogg/doc_classes/OGGPacketSequencePlayback.xml +++ b/modules/ogg/doc_classes/OGGPacketSequencePlayback.xml @@ -6,8 +6,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/modules/opensimplex/doc_classes/NoiseTexture.xml b/modules/opensimplex/doc_classes/NoiseTexture.xml index 2ae7f8cad9..8a10411cf6 100644 --- a/modules/opensimplex/doc_classes/NoiseTexture.xml +++ b/modules/opensimplex/doc_classes/NoiseTexture.xml @@ -16,8 +16,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="as_normal_map" type="bool" setter="set_as_normal_map" getter="is_normal_map" default="false"> If [code]true[/code], the resulting texture contains a normal map created from the original noise interpreted as a bump map. @@ -42,6 +40,4 @@ Width of the generated texture. </member> </members> - <constants> - </constants> </class> diff --git a/modules/opensimplex/doc_classes/OpenSimplexNoise.xml b/modules/opensimplex/doc_classes/OpenSimplexNoise.xml index c470f3e1ab..604b07b645 100644 --- a/modules/opensimplex/doc_classes/OpenSimplexNoise.xml +++ b/modules/opensimplex/doc_classes/OpenSimplexNoise.xml @@ -109,6 +109,4 @@ Seed used to generate random values, different seeds will generate different noise maps. </member> </members> - <constants> - </constants> </class> diff --git a/modules/raycast/raycast_occlusion_cull.cpp b/modules/raycast/raycast_occlusion_cull.cpp index 88c0145ebc..a55b81c05d 100644 --- a/modules/raycast/raycast_occlusion_cull.cpp +++ b/modules/raycast/raycast_occlusion_cull.cpp @@ -66,28 +66,45 @@ void RaycastOcclusionCull::RaycastHZBuffer::resize(const Size2i &p_size) { void RaycastOcclusionCull::RaycastHZBuffer::update_camera_rays(const Transform3D &p_cam_transform, const CameraMatrix &p_cam_projection, bool p_cam_orthogonal, ThreadWorkPool &p_thread_work_pool) { CameraRayThreadData td; - td.camera_matrix = p_cam_projection; - td.camera_transform = p_cam_transform; - td.camera_orthogonal = p_cam_orthogonal; td.thread_count = p_thread_work_pool.get_thread_count(); + td.z_near = p_cam_projection.get_z_near(); + td.z_far = p_cam_projection.get_z_far() * 1.05f; + td.camera_pos = p_cam_transform.origin; + td.camera_dir = -p_cam_transform.basis.get_axis(2); + td.camera_orthogonal = p_cam_orthogonal; + + CameraMatrix inv_camera_matrix = p_cam_projection.inverse(); + Vector3 camera_corner_proj = Vector3(-1.0f, -1.0f, -1.0f); + Vector3 camera_corner_view = inv_camera_matrix.xform(camera_corner_proj); + td.pixel_corner = p_cam_transform.xform(camera_corner_view); + + Vector3 top_corner_proj = Vector3(-1.0f, 1.0f, -1.0f); + Vector3 top_corner_view = inv_camera_matrix.xform(top_corner_proj); + Vector3 top_corner_world = p_cam_transform.xform(top_corner_view); + + Vector3 left_corner_proj = Vector3(1.0f, -1.0f, -1.0f); + Vector3 left_corner_view = inv_camera_matrix.xform(left_corner_proj); + Vector3 left_corner_world = p_cam_transform.xform(left_corner_view); + + td.pixel_u_interp = left_corner_world - td.pixel_corner; + td.pixel_v_interp = top_corner_world - td.pixel_corner; + + debug_tex_range = td.z_far; + p_thread_work_pool.do_work(td.thread_count, this, &RaycastHZBuffer::_camera_rays_threaded, &td); } -void RaycastOcclusionCull::RaycastHZBuffer::_camera_rays_threaded(uint32_t p_thread, RaycastOcclusionCull::RaycastHZBuffer::CameraRayThreadData *p_data) { +void RaycastOcclusionCull::RaycastHZBuffer::_camera_rays_threaded(uint32_t p_thread, const CameraRayThreadData *p_data) { uint32_t packs_total = camera_rays.size(); uint32_t total_threads = p_data->thread_count; uint32_t from = p_thread * packs_total / total_threads; uint32_t to = (p_thread + 1 == total_threads) ? packs_total : ((p_thread + 1) * packs_total / total_threads); - _generate_camera_rays(p_data->camera_transform, p_data->camera_matrix, p_data->camera_orthogonal, from, to); + _generate_camera_rays(p_data, from, to); } -void RaycastOcclusionCull::RaycastHZBuffer::_generate_camera_rays(const Transform3D &p_cam_transform, const CameraMatrix &p_cam_projection, bool p_cam_orthogonal, int p_from, int p_to) { - Size2i buffer_size = sizes[0]; - - CameraMatrix inv_camera_matrix = p_cam_projection.inverse(); - float z_far = p_cam_projection.get_z_far() * 1.05f; - debug_tex_range = z_far; +void RaycastOcclusionCull::RaycastHZBuffer::_generate_camera_rays(const CameraRayThreadData *p_data, int p_from, int p_to) { + const Size2i &buffer_size = sizes[0]; RayPacket *ray_packets = camera_rays.ptr(); uint32_t *ray_masks = camera_ray_masks.ptr(); @@ -98,56 +115,52 @@ void RaycastOcclusionCull::RaycastHZBuffer::_generate_camera_rays(const Transfor int tile_y = (i / packs_size.x) * TILE_SIZE; for (int j = 0; j < TILE_RAYS; j++) { - float x = tile_x + j % TILE_SIZE; - float y = tile_y + j / TILE_SIZE; - - ray_masks[i * TILE_RAYS + j] = ~0U; + int x = tile_x + j % TILE_SIZE; + int y = tile_y + j / TILE_SIZE; if (x >= buffer_size.x || y >= buffer_size.y) { ray_masks[i * TILE_RAYS + j] = 0U; - } else { - float u = x / (buffer_size.x - 1); - float v = y / (buffer_size.y - 1); - u = u * 2.0f - 1.0f; - v = v * 2.0f - 1.0f; - - Plane pixel_proj = Plane(u, v, -1.0, 1.0); - Plane pixel_view = inv_camera_matrix.xform4(pixel_proj); - Vector3 pixel_world = p_cam_transform.xform(pixel_view.normal); - - Vector3 dir; - if (p_cam_orthogonal) { - dir = -p_cam_transform.basis.get_axis(2); - } else { - dir = (pixel_world - p_cam_transform.origin).normalized(); - } - - packet.ray.org_x[j] = pixel_world.x; - packet.ray.org_y[j] = pixel_world.y; - packet.ray.org_z[j] = pixel_world.z; + continue; + } - packet.ray.dir_x[j] = dir.x; - packet.ray.dir_y[j] = dir.y; - packet.ray.dir_z[j] = dir.z; + ray_masks[i * TILE_RAYS + j] = ~0U; - packet.ray.tnear[j] = 0.0f; + float u = (float(x) + 0.5f) / buffer_size.x; + float v = (float(y) + 0.5f) / buffer_size.y; + Vector3 pixel_pos = p_data->pixel_corner + u * p_data->pixel_u_interp + v * p_data->pixel_v_interp; - packet.ray.time[j] = 0.0f; + packet.ray.tnear[j] = p_data->z_near; - packet.ray.flags[j] = 0; - packet.ray.mask[j] = -1; - packet.hit.geomID[j] = RTC_INVALID_GEOMETRY_ID; + Vector3 dir; + if (p_data->camera_orthogonal) { + dir = -p_data->camera_dir; + packet.ray.org_x[j] = pixel_pos.x - dir.x * p_data->z_near; + packet.ray.org_y[j] = pixel_pos.y - dir.y * p_data->z_near; + packet.ray.org_z[j] = pixel_pos.z - dir.z * p_data->z_near; + } else { + dir = (pixel_pos - p_data->camera_pos).normalized(); + packet.ray.org_x[j] = p_data->camera_pos.x; + packet.ray.org_y[j] = p_data->camera_pos.y; + packet.ray.org_z[j] = p_data->camera_pos.z; + packet.ray.tnear[j] /= dir.dot(p_data->camera_dir); } - packet.ray.tfar[j] = z_far; + packet.ray.dir_x[j] = dir.x; + packet.ray.dir_y[j] = dir.y; + packet.ray.dir_z[j] = dir.z; + + packet.ray.tfar[j] = p_data->z_far; + packet.ray.time[j] = 0.0f; + + packet.ray.flags[j] = 0; + packet.ray.mask[j] = -1; + packet.hit.geomID[j] = RTC_INVALID_GEOMETRY_ID; } } } -void RaycastOcclusionCull::RaycastHZBuffer::sort_rays() { - if (is_empty()) { - return; - } +void RaycastOcclusionCull::RaycastHZBuffer::sort_rays(const Vector3 &p_camera_dir, bool p_orthogonal) { + ERR_FAIL_COND(is_empty()); Size2i buffer_size = sizes[0]; for (int i = 0; i < packs_size.y; i++) { @@ -161,7 +174,17 @@ void RaycastOcclusionCull::RaycastHZBuffer::sort_rays() { } int k = tile_i * TILE_SIZE + tile_j; int packet_index = i * packs_size.x + j; - mips[0][y * buffer_size.x + x] = camera_rays[packet_index].ray.tfar[k]; + float d = camera_rays[packet_index].ray.tfar[k]; + + if (!p_orthogonal) { + const float &dir_x = camera_rays[packet_index].ray.dir_x[k]; + const float &dir_y = camera_rays[packet_index].ray.dir_y[k]; + const float &dir_z = camera_rays[packet_index].ray.dir_z[k]; + float cos_theta = p_camera_dir.x * dir_x + p_camera_dir.y * dir_y + p_camera_dir.z * dir_z; + d *= cos_theta; + } + + mips[0][y * buffer_size.x + x] = d; } } } @@ -514,7 +537,7 @@ void RaycastOcclusionCull::buffer_update(RID p_buffer, const Transform3D &p_cam_ buffer.update_camera_rays(p_cam_transform, p_cam_projection, p_cam_orthogonal, p_thread_pool); scenario.raycast(buffer.camera_rays, buffer.camera_ray_masks, p_thread_pool); - buffer.sort_rays(); + buffer.sort_rays(-p_cam_transform.basis.get_axis(2), p_cam_orthogonal); buffer.update_mips(); } diff --git a/modules/raycast/raycast_occlusion_cull.h b/modules/raycast/raycast_occlusion_cull.h index 85710a790c..cc87a6342c 100644 --- a/modules/raycast/raycast_occlusion_cull.h +++ b/modules/raycast/raycast_occlusion_cull.h @@ -51,15 +51,20 @@ public: Size2i packs_size; struct CameraRayThreadData { - CameraMatrix camera_matrix; - Transform3D camera_transform; - bool camera_orthogonal; int thread_count; + float z_near; + float z_far; + Vector3 camera_dir; + Vector3 camera_pos; + Vector3 pixel_corner; + Vector3 pixel_u_interp; + Vector3 pixel_v_interp; + bool camera_orthogonal; Size2i buffer_size; }; - void _camera_rays_threaded(uint32_t p_thread, CameraRayThreadData *p_data); - void _generate_camera_rays(const Transform3D &p_cam_transform, const CameraMatrix &p_cam_projection, bool p_cam_orthogonal, int p_from, int p_to); + void _camera_rays_threaded(uint32_t p_thread, const CameraRayThreadData *p_data); + void _generate_camera_rays(const CameraRayThreadData *p_data, int p_from, int p_to); public: LocalVector<RayPacket> camera_rays; @@ -68,7 +73,7 @@ public: virtual void clear() override; virtual void resize(const Size2i &p_size) override; - void sort_rays(); + void sort_rays(const Vector3 &p_camera_dir, bool p_orthogonal); void update_camera_rays(const Transform3D &p_cam_transform, const CameraMatrix &p_cam_projection, bool p_cam_orthogonal, ThreadWorkPool &p_thread_work_pool); }; diff --git a/modules/regex/doc_classes/RegEx.xml b/modules/regex/doc_classes/RegEx.xml index 9c84974ff6..2ae2e53b02 100644 --- a/modules/regex/doc_classes/RegEx.xml +++ b/modules/regex/doc_classes/RegEx.xml @@ -116,6 +116,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/modules/regex/doc_classes/RegExMatch.xml b/modules/regex/doc_classes/RegExMatch.xml index 3cde2836cc..20680b41fd 100644 --- a/modules/regex/doc_classes/RegExMatch.xml +++ b/modules/regex/doc_classes/RegExMatch.xml @@ -51,6 +51,4 @@ The source string used with the search pattern to find this matching result. </member> </members> - <constants> - </constants> </class> diff --git a/modules/text_server_adv/SCsub b/modules/text_server_adv/SCsub index 6691f86e60..7cd4db6f67 100644 --- a/modules/text_server_adv/SCsub +++ b/modules/text_server_adv/SCsub @@ -64,6 +64,7 @@ if env["builtin_harfbuzz"]: #'src/hb-gobject-structs.cc', "src/hb-icu.cc", "src/hb-map.cc", + "src/hb-ms-feature-ranges.cc", "src/hb-number.cc", "src/hb-ot-cff1-table.cc", "src/hb-ot-cff2-table.cc", diff --git a/modules/text_server_adv/text_server_adv.cpp b/modules/text_server_adv/text_server_adv.cpp index 22706f9b6a..341ae9c015 100644 --- a/modules/text_server_adv/text_server_adv.cpp +++ b/modules/text_server_adv/text_server_adv.cpp @@ -3804,7 +3804,12 @@ bool TextServerAdvanced::shaped_text_update_breaks(RID p_shaped) { gl.font_rid = sd_glyphs[i].font_rid; gl.font_size = sd_glyphs[i].font_size; gl.flags = GRAPHEME_IS_BREAK_SOFT | GRAPHEME_IS_VIRTUAL; - sd->glyphs.insert(i + sd_glyphs[i].count, gl); // Insert after. + if (sd->glyphs[i].flags & GRAPHEME_IS_RTL) { + gl.flags |= GRAPHEME_IS_RTL; + sd->glyphs.insert(i, gl); // Insert before. + } else { + sd->glyphs.insert(i + sd_glyphs[i].count, gl); // Insert after. + } // Update write pointer and size. sd_size = sd->glyphs.size(); @@ -3998,7 +4003,12 @@ bool TextServerAdvanced::shaped_text_update_justification_ops(RID p_shaped) { gl.font_rid = sd->glyphs[i].font_rid; gl.font_size = sd->glyphs[i].font_size; gl.flags = GRAPHEME_IS_SPACE | GRAPHEME_IS_VIRTUAL; - sd->glyphs.insert(i + sd->glyphs[i].count, gl); // Insert after. + if (sd->glyphs[i].flags & GRAPHEME_IS_RTL) { + gl.flags |= GRAPHEME_IS_RTL; + sd->glyphs.insert(i, gl); // Insert before. + } else { + sd->glyphs.insert(i + sd->glyphs[i].count, gl); // Insert after. + } i += sd->glyphs[i].count; continue; } @@ -4147,7 +4157,7 @@ void TextServerAdvanced::_shape_run(ShapedTextDataAdvanced *p_sd, int32_t p_star } } if (p_direction == HB_DIRECTION_RTL || p_direction == HB_DIRECTION_BTT) { - w[last_cluster_index].flags |= TextServer::GRAPHEME_IS_RTL; + w[last_cluster_index].flags |= GRAPHEME_IS_RTL; } if (last_cluster_valid) { w[last_cluster_index].flags |= GRAPHEME_IS_VALID; @@ -4169,6 +4179,10 @@ void TextServerAdvanced::_shape_run(ShapedTextDataAdvanced *p_sd, int32_t p_star gl.font_rid = p_fonts[p_fb_index]; gl.font_size = fs; + if (glyph_info[i].mask & HB_GLYPH_FLAG_DEFINED) { + gl.flags |= GRAPHEME_IS_CONNECTED; + } + gl.index = glyph_info[i].codepoint; if (gl.index != 0) { real_t scale = font_get_scale(f, fs); @@ -4199,7 +4213,7 @@ void TextServerAdvanced::_shape_run(ShapedTextDataAdvanced *p_sd, int32_t p_star } w[last_cluster_index].count = glyph_count - last_cluster_index; if (p_direction == HB_DIRECTION_RTL || p_direction == HB_DIRECTION_BTT) { - w[last_cluster_index].flags |= TextServer::GRAPHEME_IS_RTL; + w[last_cluster_index].flags |= GRAPHEME_IS_RTL; } if (last_cluster_valid) { w[last_cluster_index].flags |= GRAPHEME_IS_VALID; diff --git a/modules/theora/doc_classes/VideoStreamTheora.xml b/modules/theora/doc_classes/VideoStreamTheora.xml index e7bf9b202d..2dfcd27dff 100644 --- a/modules/theora/doc_classes/VideoStreamTheora.xml +++ b/modules/theora/doc_classes/VideoStreamTheora.xml @@ -24,6 +24,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScript.xml b/modules/visual_script/doc_classes/VisualScript.xml index 2327fc0009..372d46bc10 100644 --- a/modules/visual_script/doc_classes/VisualScript.xml +++ b/modules/visual_script/doc_classes/VisualScript.xml @@ -354,6 +354,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptBasicTypeConstant.xml b/modules/visual_script/doc_classes/VisualScriptBasicTypeConstant.xml index 4d07f878a2..ed5b814bb7 100644 --- a/modules/visual_script/doc_classes/VisualScriptBasicTypeConstant.xml +++ b/modules/visual_script/doc_classes/VisualScriptBasicTypeConstant.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="basic_type" type="int" setter="set_basic_type" getter="get_basic_type" enum="Variant.Type" default="0"> The type to get the constant from. @@ -18,6 +16,4 @@ The name of the constant to return. </member> </members> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml b/modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml index 55d0b392fa..942d92311b 100644 --- a/modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml +++ b/modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml @@ -9,8 +9,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="function" type="int" setter="set_func" getter="get_func" enum="VisualScriptBuiltinFunc.BuiltinFunc" default="0"> The function to be executed. @@ -181,32 +179,34 @@ <constant name="TEXT_PRINTRAW" value="55" enum="BuiltinFunc"> Print the given string to the standard output, without adding a newline. </constant> - <constant name="VAR_TO_STR" value="56" enum="BuiltinFunc"> + <constant name="TEXT_PRINT_VERBOSE" value="56" enum="BuiltinFunc"> + </constant> + <constant name="VAR_TO_STR" value="57" enum="BuiltinFunc"> Serialize a [Variant] to a string. </constant> - <constant name="STR_TO_VAR" value="57" enum="BuiltinFunc"> + <constant name="STR_TO_VAR" value="58" enum="BuiltinFunc"> Deserialize a [Variant] from a string serialized using [constant VAR_TO_STR]. </constant> - <constant name="VAR_TO_BYTES" value="58" enum="BuiltinFunc"> + <constant name="VAR_TO_BYTES" value="59" enum="BuiltinFunc"> Serialize a [Variant] to a [PackedByteArray]. </constant> - <constant name="BYTES_TO_VAR" value="59" enum="BuiltinFunc"> + <constant name="BYTES_TO_VAR" value="60" enum="BuiltinFunc"> Deserialize a [Variant] from a [PackedByteArray] serialized using [constant VAR_TO_BYTES]. </constant> - <constant name="MATH_SMOOTHSTEP" value="60" enum="BuiltinFunc"> + <constant name="MATH_SMOOTHSTEP" value="61" enum="BuiltinFunc"> Return a number smoothly interpolated between the first two inputs, based on the third input. Similar to [constant MATH_LERP], but interpolates faster at the beginning and slower at the end. Using Hermite interpolation formula: [codeblock] var t = clamp((weight - from) / (to - from), 0.0, 1.0) return t * t * (3.0 - 2.0 * t) [/codeblock] </constant> - <constant name="MATH_POSMOD" value="61" enum="BuiltinFunc"> + <constant name="MATH_POSMOD" value="62" enum="BuiltinFunc"> </constant> - <constant name="MATH_LERP_ANGLE" value="62" enum="BuiltinFunc"> + <constant name="MATH_LERP_ANGLE" value="63" enum="BuiltinFunc"> </constant> - <constant name="TEXT_ORD" value="63" enum="BuiltinFunc"> + <constant name="TEXT_ORD" value="64" enum="BuiltinFunc"> </constant> - <constant name="FUNC_MAX" value="64" enum="BuiltinFunc"> + <constant name="FUNC_MAX" value="65" enum="BuiltinFunc"> Represents the size of the [enum BuiltinFunc] enum. </constant> </constants> diff --git a/modules/visual_script/doc_classes/VisualScriptClassConstant.xml b/modules/visual_script/doc_classes/VisualScriptClassConstant.xml index d6b96957f5..ae32500d2f 100644 --- a/modules/visual_script/doc_classes/VisualScriptClassConstant.xml +++ b/modules/visual_script/doc_classes/VisualScriptClassConstant.xml @@ -12,8 +12,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="base_type" type="StringName" setter="set_base_type" getter="get_base_type" default="&"Object""> The constant's parent class. @@ -22,6 +20,4 @@ The constant to return. See the given class for its available constants. </member> </members> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptComment.xml b/modules/visual_script/doc_classes/VisualScriptComment.xml index 02cec97b27..5024aae384 100644 --- a/modules/visual_script/doc_classes/VisualScriptComment.xml +++ b/modules/visual_script/doc_classes/VisualScriptComment.xml @@ -9,8 +9,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="description" type="String" setter="set_description" getter="get_description" default=""""> The text inside the comment node. @@ -22,6 +20,4 @@ The comment node's title. </member> </members> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptComposeArray.xml b/modules/visual_script/doc_classes/VisualScriptComposeArray.xml index dec182abf6..ed065759c5 100644 --- a/modules/visual_script/doc_classes/VisualScriptComposeArray.xml +++ b/modules/visual_script/doc_classes/VisualScriptComposeArray.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptCondition.xml b/modules/visual_script/doc_classes/VisualScriptCondition.xml index a9981c1f57..a5dd8c7c1b 100644 --- a/modules/visual_script/doc_classes/VisualScriptCondition.xml +++ b/modules/visual_script/doc_classes/VisualScriptCondition.xml @@ -15,8 +15,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptConstant.xml b/modules/visual_script/doc_classes/VisualScriptConstant.xml index 69676c4bba..388c2bddde 100644 --- a/modules/visual_script/doc_classes/VisualScriptConstant.xml +++ b/modules/visual_script/doc_classes/VisualScriptConstant.xml @@ -12,8 +12,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="type" type="int" setter="set_constant_type" getter="get_constant_type" enum="Variant.Type" default="0"> The constant's type. @@ -22,6 +20,4 @@ The constant's value. </member> </members> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptConstructor.xml b/modules/visual_script/doc_classes/VisualScriptConstructor.xml index 4743594ec3..4a3d10aa8e 100644 --- a/modules/visual_script/doc_classes/VisualScriptConstructor.xml +++ b/modules/visual_script/doc_classes/VisualScriptConstructor.xml @@ -32,6 +32,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptDeconstruct.xml b/modules/visual_script/doc_classes/VisualScriptDeconstruct.xml index 530c80530e..fd9a91c2a5 100644 --- a/modules/visual_script/doc_classes/VisualScriptDeconstruct.xml +++ b/modules/visual_script/doc_classes/VisualScriptDeconstruct.xml @@ -8,13 +8,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="type" type="int" setter="set_deconstruct_type" getter="get_deconstruct_type" enum="Variant.Type" default="0"> The type to deconstruct. </member> </members> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptEmitSignal.xml b/modules/visual_script/doc_classes/VisualScriptEmitSignal.xml index df3121d093..e102e02aa9 100644 --- a/modules/visual_script/doc_classes/VisualScriptEmitSignal.xml +++ b/modules/visual_script/doc_classes/VisualScriptEmitSignal.xml @@ -12,13 +12,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="signal" type="StringName" setter="set_signal" getter="get_signal" default="&"""> The signal to emit. </member> </members> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptEngineSingleton.xml b/modules/visual_script/doc_classes/VisualScriptEngineSingleton.xml index 8b7fd3a612..468cae852f 100644 --- a/modules/visual_script/doc_classes/VisualScriptEngineSingleton.xml +++ b/modules/visual_script/doc_classes/VisualScriptEngineSingleton.xml @@ -8,13 +8,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="constant" type="String" setter="set_singleton" getter="get_singleton" default=""""> The singleton's name. </member> </members> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptExpression.xml b/modules/visual_script/doc_classes/VisualScriptExpression.xml index 223adbbb96..15e16a15f0 100644 --- a/modules/visual_script/doc_classes/VisualScriptExpression.xml +++ b/modules/visual_script/doc_classes/VisualScriptExpression.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptFunction.xml b/modules/visual_script/doc_classes/VisualScriptFunction.xml index 652418bd64..e0ca9eb280 100644 --- a/modules/visual_script/doc_classes/VisualScriptFunction.xml +++ b/modules/visual_script/doc_classes/VisualScriptFunction.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptFunctionCall.xml b/modules/visual_script/doc_classes/VisualScriptFunctionCall.xml index f0b666e57a..a98cb79106 100644 --- a/modules/visual_script/doc_classes/VisualScriptFunctionCall.xml +++ b/modules/visual_script/doc_classes/VisualScriptFunctionCall.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="base_script" type="String" setter="set_base_script" getter="get_base_script"> The script to be used when [member call_mode] is set to [constant CALL_MODE_INSTANCE]. diff --git a/modules/visual_script/doc_classes/VisualScriptFunctionState.xml b/modules/visual_script/doc_classes/VisualScriptFunctionState.xml index 18c3826df8..0d7833446d 100644 --- a/modules/visual_script/doc_classes/VisualScriptFunctionState.xml +++ b/modules/visual_script/doc_classes/VisualScriptFunctionState.xml @@ -32,6 +32,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptGlobalConstant.xml b/modules/visual_script/doc_classes/VisualScriptGlobalConstant.xml index 87fdfd4e53..c6b5b22590 100644 --- a/modules/visual_script/doc_classes/VisualScriptGlobalConstant.xml +++ b/modules/visual_script/doc_classes/VisualScriptGlobalConstant.xml @@ -8,13 +8,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="constant" type="int" setter="set_global_constant" getter="get_global_constant" default="0"> The constant to be used. </member> </members> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptIndexGet.xml b/modules/visual_script/doc_classes/VisualScriptIndexGet.xml index b348048298..78fd17c5fc 100644 --- a/modules/visual_script/doc_classes/VisualScriptIndexGet.xml +++ b/modules/visual_script/doc_classes/VisualScriptIndexGet.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptIndexSet.xml b/modules/visual_script/doc_classes/VisualScriptIndexSet.xml index d7fe7340ad..0e5e832c65 100644 --- a/modules/visual_script/doc_classes/VisualScriptIndexSet.xml +++ b/modules/visual_script/doc_classes/VisualScriptIndexSet.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptInputAction.xml b/modules/visual_script/doc_classes/VisualScriptInputAction.xml index d6fa111500..eb06d52314 100644 --- a/modules/visual_script/doc_classes/VisualScriptInputAction.xml +++ b/modules/visual_script/doc_classes/VisualScriptInputAction.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="action" type="StringName" setter="set_action_name" getter="get_action_name" default="&"""> Name of the action. diff --git a/modules/visual_script/doc_classes/VisualScriptIterator.xml b/modules/visual_script/doc_classes/VisualScriptIterator.xml index 1d4ab4daa9..d8305728c6 100644 --- a/modules/visual_script/doc_classes/VisualScriptIterator.xml +++ b/modules/visual_script/doc_classes/VisualScriptIterator.xml @@ -15,8 +15,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptLists.xml b/modules/visual_script/doc_classes/VisualScriptLists.xml index d5bff1341a..373e3c7191 100644 --- a/modules/visual_script/doc_classes/VisualScriptLists.xml +++ b/modules/visual_script/doc_classes/VisualScriptLists.xml @@ -74,6 +74,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptLocalVar.xml b/modules/visual_script/doc_classes/VisualScriptLocalVar.xml index 185f0f1ffb..29dbddcdf4 100644 --- a/modules/visual_script/doc_classes/VisualScriptLocalVar.xml +++ b/modules/visual_script/doc_classes/VisualScriptLocalVar.xml @@ -12,8 +12,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="type" type="int" setter="set_var_type" getter="get_var_type" enum="Variant.Type" default="0"> The local variable's type. @@ -22,6 +20,4 @@ The local variable's name. </member> </members> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml b/modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml index 865f0153c9..96de8ebfdd 100644 --- a/modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml +++ b/modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml @@ -14,8 +14,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="type" type="int" setter="set_var_type" getter="get_var_type" enum="Variant.Type" default="0"> The local variable's type. @@ -24,6 +22,4 @@ The local variable's name. </member> </members> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptMathConstant.xml b/modules/visual_script/doc_classes/VisualScriptMathConstant.xml index 18a1f030bc..f559083c80 100644 --- a/modules/visual_script/doc_classes/VisualScriptMathConstant.xml +++ b/modules/visual_script/doc_classes/VisualScriptMathConstant.xml @@ -12,8 +12,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="constant" type="int" setter="set_math_constant" getter="get_math_constant" enum="VisualScriptMathConstant.MathConstant" default="0"> The math constant. diff --git a/modules/visual_script/doc_classes/VisualScriptNode.xml b/modules/visual_script/doc_classes/VisualScriptNode.xml index 23574a5ea8..d080d9eac1 100644 --- a/modules/visual_script/doc_classes/VisualScriptNode.xml +++ b/modules/visual_script/doc_classes/VisualScriptNode.xml @@ -44,6 +44,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptOperator.xml b/modules/visual_script/doc_classes/VisualScriptOperator.xml index cbbefa7f71..73d28899f6 100644 --- a/modules/visual_script/doc_classes/VisualScriptOperator.xml +++ b/modules/visual_script/doc_classes/VisualScriptOperator.xml @@ -12,8 +12,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="operator" type="int" setter="set_operator" getter="get_operator" enum="Variant.Operator" default="6"> The operation to be performed. See [enum Variant.Operator] for available options. @@ -22,6 +20,4 @@ The type of the values for this operation. See [enum Variant.Type] for available options. </member> </members> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptPreload.xml b/modules/visual_script/doc_classes/VisualScriptPreload.xml index e11af6c805..e3d60c77bb 100644 --- a/modules/visual_script/doc_classes/VisualScriptPreload.xml +++ b/modules/visual_script/doc_classes/VisualScriptPreload.xml @@ -12,13 +12,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="resource" type="Resource" setter="set_preload" getter="get_preload"> The [Resource] to load. </member> </members> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptPropertyGet.xml b/modules/visual_script/doc_classes/VisualScriptPropertyGet.xml index c1bf443ea3..e9f30cb605 100644 --- a/modules/visual_script/doc_classes/VisualScriptPropertyGet.xml +++ b/modules/visual_script/doc_classes/VisualScriptPropertyGet.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="base_script" type="String" setter="set_base_script" getter="get_base_script"> The script to be used when [member set_mode] is set to [constant CALL_MODE_INSTANCE]. diff --git a/modules/visual_script/doc_classes/VisualScriptPropertySet.xml b/modules/visual_script/doc_classes/VisualScriptPropertySet.xml index 75d6a63469..96261d2c5e 100644 --- a/modules/visual_script/doc_classes/VisualScriptPropertySet.xml +++ b/modules/visual_script/doc_classes/VisualScriptPropertySet.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="assign_op" type="int" setter="set_assign_op" getter="get_assign_op" enum="VisualScriptPropertySet.AssignOp" default="0"> The additional operation to perform when assigning. See [enum AssignOp] for options. diff --git a/modules/visual_script/doc_classes/VisualScriptResourcePath.xml b/modules/visual_script/doc_classes/VisualScriptResourcePath.xml index ea891be05f..77e97a7219 100644 --- a/modules/visual_script/doc_classes/VisualScriptResourcePath.xml +++ b/modules/visual_script/doc_classes/VisualScriptResourcePath.xml @@ -6,12 +6,8 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="path" type="String" setter="set_resource_path" getter="get_resource_path" default=""""> </member> </members> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptReturn.xml b/modules/visual_script/doc_classes/VisualScriptReturn.xml index 502628925d..2193f45dc8 100644 --- a/modules/visual_script/doc_classes/VisualScriptReturn.xml +++ b/modules/visual_script/doc_classes/VisualScriptReturn.xml @@ -13,8 +13,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="return_enabled" type="bool" setter="set_enable_return_value" getter="is_return_value_enabled" default="false"> If [code]true[/code], the [code]return[/code] input port is available. @@ -23,6 +21,4 @@ The return value's data type. </member> </members> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptSceneNode.xml b/modules/visual_script/doc_classes/VisualScriptSceneNode.xml index ffe187a00e..ac672d9b3f 100644 --- a/modules/visual_script/doc_classes/VisualScriptSceneNode.xml +++ b/modules/visual_script/doc_classes/VisualScriptSceneNode.xml @@ -12,13 +12,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="node_path" type="NodePath" setter="set_node_path" getter="get_node_path" default="NodePath(".")"> The node's path in the scene tree. </member> </members> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptSceneTree.xml b/modules/visual_script/doc_classes/VisualScriptSceneTree.xml index 8cddd02c77..fc383593c5 100644 --- a/modules/visual_script/doc_classes/VisualScriptSceneTree.xml +++ b/modules/visual_script/doc_classes/VisualScriptSceneTree.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptSelect.xml b/modules/visual_script/doc_classes/VisualScriptSelect.xml index 1dbc066e32..d536e623f7 100644 --- a/modules/visual_script/doc_classes/VisualScriptSelect.xml +++ b/modules/visual_script/doc_classes/VisualScriptSelect.xml @@ -14,13 +14,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="type" type="int" setter="set_typed" getter="get_typed" enum="Variant.Type" default="0"> The input variables' type. </member> </members> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptSelf.xml b/modules/visual_script/doc_classes/VisualScriptSelf.xml index bb24f158c1..3c2bd16302 100644 --- a/modules/visual_script/doc_classes/VisualScriptSelf.xml +++ b/modules/visual_script/doc_classes/VisualScriptSelf.xml @@ -12,8 +12,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptSequence.xml b/modules/visual_script/doc_classes/VisualScriptSequence.xml index 664722574d..32dcbb9837 100644 --- a/modules/visual_script/doc_classes/VisualScriptSequence.xml +++ b/modules/visual_script/doc_classes/VisualScriptSequence.xml @@ -14,13 +14,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="steps" type="int" setter="set_steps" getter="get_steps" default="1"> The number of steps in the sequence. </member> </members> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptSubCall.xml b/modules/visual_script/doc_classes/VisualScriptSubCall.xml index f54887b09c..fdf0e24d3e 100644 --- a/modules/visual_script/doc_classes/VisualScriptSubCall.xml +++ b/modules/visual_script/doc_classes/VisualScriptSubCall.xml @@ -8,8 +8,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptSwitch.xml b/modules/visual_script/doc_classes/VisualScriptSwitch.xml index 74504948f0..8e176b56f0 100644 --- a/modules/visual_script/doc_classes/VisualScriptSwitch.xml +++ b/modules/visual_script/doc_classes/VisualScriptSwitch.xml @@ -17,8 +17,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptTypeCast.xml b/modules/visual_script/doc_classes/VisualScriptTypeCast.xml index 5dd1ad3421..ee8e2ad31e 100644 --- a/modules/visual_script/doc_classes/VisualScriptTypeCast.xml +++ b/modules/visual_script/doc_classes/VisualScriptTypeCast.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="base_script" type="String" setter="set_base_script" getter="get_base_script" default=""""> The target script class to be converted to. If none, only the [member base_type] will be used. @@ -18,6 +16,4 @@ The target type to be converted to. </member> </members> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptVariableGet.xml b/modules/visual_script/doc_classes/VisualScriptVariableGet.xml index df20ac53f2..e29765d616 100644 --- a/modules/visual_script/doc_classes/VisualScriptVariableGet.xml +++ b/modules/visual_script/doc_classes/VisualScriptVariableGet.xml @@ -12,13 +12,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="var_name" type="StringName" setter="set_variable" getter="get_variable" default="&"""> The variable's name. </member> </members> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptVariableSet.xml b/modules/visual_script/doc_classes/VisualScriptVariableSet.xml index eb8ebbe338..b2cc70d62e 100644 --- a/modules/visual_script/doc_classes/VisualScriptVariableSet.xml +++ b/modules/visual_script/doc_classes/VisualScriptVariableSet.xml @@ -13,13 +13,9 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="var_name" type="StringName" setter="set_variable" getter="get_variable" default="&"""> The variable's name. </member> </members> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptWhile.xml b/modules/visual_script/doc_classes/VisualScriptWhile.xml index f187957ad2..f090568608 100644 --- a/modules/visual_script/doc_classes/VisualScriptWhile.xml +++ b/modules/visual_script/doc_classes/VisualScriptWhile.xml @@ -14,8 +14,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/modules/visual_script/doc_classes/VisualScriptYield.xml b/modules/visual_script/doc_classes/VisualScriptYield.xml index b04ab7b014..bb7fd8bfb5 100644 --- a/modules/visual_script/doc_classes/VisualScriptYield.xml +++ b/modules/visual_script/doc_classes/VisualScriptYield.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="mode" type="int" setter="set_yield_mode" getter="get_yield_mode" enum="VisualScriptYield.YieldMode" default="1"> The mode to use for yielding. See [enum YieldMode] for available options. diff --git a/modules/visual_script/doc_classes/VisualScriptYieldSignal.xml b/modules/visual_script/doc_classes/VisualScriptYieldSignal.xml index c6c3188d08..ad6a7fb4e2 100644 --- a/modules/visual_script/doc_classes/VisualScriptYieldSignal.xml +++ b/modules/visual_script/doc_classes/VisualScriptYieldSignal.xml @@ -8,8 +8,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="base_type" type="StringName" setter="set_base_type" getter="get_base_type" default="&"Object""> The base type to be used when [member call_mode] is set to [constant CALL_MODE_INSTANCE]. diff --git a/modules/visual_script/visual_script_builtin_funcs.cpp b/modules/visual_script/visual_script_builtin_funcs.cpp index 2bd7220d15..7e01031128 100644 --- a/modules/visual_script/visual_script_builtin_funcs.cpp +++ b/modules/visual_script/visual_script_builtin_funcs.cpp @@ -94,6 +94,7 @@ const char *VisualScriptBuiltinFunc::func_name[VisualScriptBuiltinFunc::FUNC_MAX "print", "printerr", "printraw", + "print_verbose", "var2str", "str2var", "var2bytes", @@ -129,6 +130,7 @@ bool VisualScriptBuiltinFunc::has_input_sequence_port() const { case TEXT_PRINT: case TEXT_PRINTERR: case TEXT_PRINTRAW: + case TEXT_PRINT_VERBOSE: case MATH_SEED: return true; default: @@ -177,6 +179,7 @@ int VisualScriptBuiltinFunc::get_func_argument_count(BuiltinFunc p_func) { case TEXT_PRINT: case TEXT_PRINTERR: case TEXT_PRINTRAW: + case TEXT_PRINT_VERBOSE: case VAR_TO_STR: case STR_TO_VAR: case TYPE_EXISTS: @@ -223,6 +226,7 @@ int VisualScriptBuiltinFunc::get_output_value_port_count() const { case TEXT_PRINT: case TEXT_PRINTERR: case TEXT_PRINTRAW: + case TEXT_PRINT_VERBOSE: case MATH_SEED: return 0; case MATH_RANDSEED: @@ -424,7 +428,8 @@ PropertyInfo VisualScriptBuiltinFunc::get_input_value_port_info(int p_idx) const case TEXT_STR: case TEXT_PRINT: case TEXT_PRINTERR: - case TEXT_PRINTRAW: { + case TEXT_PRINTRAW: + case TEXT_PRINT_VERBOSE: { return PropertyInfo(Variant::NIL, "value"); } break; case STR_TO_VAR: { @@ -572,6 +577,8 @@ PropertyInfo VisualScriptBuiltinFunc::get_output_value_port_info(int p_idx) cons } break; case TEXT_PRINTRAW: { } break; + case TEXT_PRINT_VERBOSE: { + } break; case VAR_TO_STR: { t = Variant::STRING; } break; @@ -1020,6 +1027,10 @@ void VisualScriptBuiltinFunc::exec_func(BuiltinFunc p_func, const Variant **p_in OS::get_singleton()->print("%s", str.utf8().get_data()); } break; + case VisualScriptBuiltinFunc::TEXT_PRINT_VERBOSE: { + String str = *p_inputs[0]; + print_verbose(str); + } break; case VisualScriptBuiltinFunc::VAR_TO_STR: { String vars; VariantWriter::write_to_string(*p_inputs[0], vars); @@ -1208,6 +1219,7 @@ void VisualScriptBuiltinFunc::_bind_methods() { BIND_ENUM_CONSTANT(TEXT_PRINT); BIND_ENUM_CONSTANT(TEXT_PRINTERR); BIND_ENUM_CONSTANT(TEXT_PRINTRAW); + BIND_ENUM_CONSTANT(TEXT_PRINT_VERBOSE); BIND_ENUM_CONSTANT(VAR_TO_STR); BIND_ENUM_CONSTANT(STR_TO_VAR); BIND_ENUM_CONSTANT(VAR_TO_BYTES); @@ -1300,6 +1312,7 @@ void register_visual_script_builtin_func_node() { VisualScriptLanguage::singleton->add_register_func("functions/built_in/print", create_builtin_func_node<VisualScriptBuiltinFunc::TEXT_PRINT>); VisualScriptLanguage::singleton->add_register_func("functions/built_in/printerr", create_builtin_func_node<VisualScriptBuiltinFunc::TEXT_PRINTERR>); VisualScriptLanguage::singleton->add_register_func("functions/built_in/printraw", create_builtin_func_node<VisualScriptBuiltinFunc::TEXT_PRINTRAW>); + VisualScriptLanguage::singleton->add_register_func("functions/built_in/print_verbose", create_builtin_func_node<VisualScriptBuiltinFunc::TEXT_PRINT_VERBOSE>); VisualScriptLanguage::singleton->add_register_func("functions/built_in/var2str", create_builtin_func_node<VisualScriptBuiltinFunc::VAR_TO_STR>); VisualScriptLanguage::singleton->add_register_func("functions/built_in/str2var", create_builtin_func_node<VisualScriptBuiltinFunc::STR_TO_VAR>); VisualScriptLanguage::singleton->add_register_func("functions/built_in/var2bytes", create_builtin_func_node<VisualScriptBuiltinFunc::VAR_TO_BYTES>); diff --git a/modules/visual_script/visual_script_builtin_funcs.h b/modules/visual_script/visual_script_builtin_funcs.h index 26abc1e479..f9eb7e983f 100644 --- a/modules/visual_script/visual_script_builtin_funcs.h +++ b/modules/visual_script/visual_script_builtin_funcs.h @@ -94,6 +94,7 @@ public: TEXT_PRINT, TEXT_PRINTERR, TEXT_PRINTRAW, + TEXT_PRINT_VERBOSE, VAR_TO_STR, STR_TO_VAR, VAR_TO_BYTES, diff --git a/modules/visual_script/visual_script_editor.cpp b/modules/visual_script/visual_script_editor.cpp index c2fa3cbd9d..0a6bcedf31 100644 --- a/modules/visual_script/visual_script_editor.cpp +++ b/modules/visual_script/visual_script_editor.cpp @@ -2546,16 +2546,11 @@ void VisualScriptEditor::goto_line(int p_line, bool p_with_error) { error_line = p_line; } - List<StringName> functions; - script->get_function_list(&functions); - for (const StringName &E : functions) { - if (script->has_node(p_line)) { - _update_graph(); - _update_members(); + if (script->has_node(p_line)) { + _update_graph(); + _update_members(); - call_deferred(SNAME("call_deferred"), "_center_on_node", E, p_line); //editor might be just created and size might not exist yet - return; - } + call_deferred(SNAME("call_deferred"), "_center_on_node", p_line); // The editor might be just created and size might not exist yet. } } diff --git a/modules/vorbis/doc_classes/AudioStreamOGGVorbis.xml b/modules/vorbis/doc_classes/AudioStreamOGGVorbis.xml index a680a2f999..4cd278fe83 100644 --- a/modules/vorbis/doc_classes/AudioStreamOGGVorbis.xml +++ b/modules/vorbis/doc_classes/AudioStreamOGGVorbis.xml @@ -6,8 +6,6 @@ </description> <tutorials> </tutorials> - <methods> - </methods> <members> <member name="loop" type="bool" setter="set_loop" getter="has_loop" default="false"> If [code]true[/code], the stream will automatically loop when it reaches the end. @@ -19,6 +17,4 @@ Contains the raw OGG data for this stream. </member> </members> - <constants> - </constants> </class> diff --git a/modules/vorbis/doc_classes/AudioStreamPlaybackOGGVorbis.xml b/modules/vorbis/doc_classes/AudioStreamPlaybackOGGVorbis.xml index 3120f2a9e6..05c70d88da 100644 --- a/modules/vorbis/doc_classes/AudioStreamPlaybackOGGVorbis.xml +++ b/modules/vorbis/doc_classes/AudioStreamPlaybackOGGVorbis.xml @@ -6,8 +6,4 @@ </description> <tutorials> </tutorials> - <methods> - </methods> - <constants> - </constants> </class> diff --git a/modules/webm/doc_classes/VideoStreamWebm.xml b/modules/webm/doc_classes/VideoStreamWebm.xml index 3b9acfd873..e04d02d6ab 100644 --- a/modules/webm/doc_classes/VideoStreamWebm.xml +++ b/modules/webm/doc_classes/VideoStreamWebm.xml @@ -25,6 +25,4 @@ </description> </method> </methods> - <constants> - </constants> </class> diff --git a/modules/webrtc/doc_classes/WebRTCMultiplayerPeer.xml b/modules/webrtc/doc_classes/WebRTCMultiplayerPeer.xml index 43a8e20ef7..9040d510c0 100644 --- a/modules/webrtc/doc_classes/WebRTCMultiplayerPeer.xml +++ b/modules/webrtc/doc_classes/WebRTCMultiplayerPeer.xml @@ -71,6 +71,4 @@ <member name="refuse_new_connections" type="bool" setter="set_refuse_new_connections" getter="is_refusing_new_connections" override="true" default="false" /> <member name="transfer_mode" type="int" setter="set_transfer_mode" getter="get_transfer_mode" override="true" enum="TransferMode" default="2" /> </members> - <constants> - </constants> </class> diff --git a/modules/websocket/doc_classes/WebSocketClient.xml b/modules/websocket/doc_classes/WebSocketClient.xml index b5202469f1..ed8f3ba867 100644 --- a/modules/websocket/doc_classes/WebSocketClient.xml +++ b/modules/websocket/doc_classes/WebSocketClient.xml @@ -90,6 +90,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/modules/websocket/doc_classes/WebSocketMultiplayerPeer.xml b/modules/websocket/doc_classes/WebSocketMultiplayerPeer.xml index c7a0ca100f..bf35acbd11 100644 --- a/modules/websocket/doc_classes/WebSocketMultiplayerPeer.xml +++ b/modules/websocket/doc_classes/WebSocketMultiplayerPeer.xml @@ -43,6 +43,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/modules/websocket/doc_classes/WebSocketServer.xml b/modules/websocket/doc_classes/WebSocketServer.xml index b66a1054ab..2bb705b384 100644 --- a/modules/websocket/doc_classes/WebSocketServer.xml +++ b/modules/websocket/doc_classes/WebSocketServer.xml @@ -116,6 +116,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/modules/webxr/doc_classes/WebXRInterface.xml b/modules/webxr/doc_classes/WebXRInterface.xml index ff7c46bbae..16d671c9e9 100644 --- a/modules/webxr/doc_classes/WebXRInterface.xml +++ b/modules/webxr/doc_classes/WebXRInterface.xml @@ -239,6 +239,4 @@ </description> </signal> </signals> - <constants> - </constants> </class> diff --git a/modules/webxr/webxr_interface_js.cpp b/modules/webxr/webxr_interface_js.cpp index 2d699961ae..10c17aa672 100644 --- a/modules/webxr/webxr_interface_js.cpp +++ b/modules/webxr/webxr_interface_js.cpp @@ -341,7 +341,7 @@ Transform3D WebXRInterfaceJS::get_transform_for_view(uint32_t p_view, const Tran return p_cam_transform * xr_server->get_reference_frame() * transform_for_eye; }; -CameraMatrix WebXRInterfaceJS::get_projection_for_view(uint32_t p_view, real_t p_aspect, real_t p_z_near, real_t p_z_far) { +CameraMatrix WebXRInterfaceJS::get_projection_for_view(uint32_t p_view, double p_aspect, double p_z_near, double p_z_far) { CameraMatrix eye; float *js_matrix = godot_webxr_get_projection_for_eye(p_view + 1); diff --git a/modules/webxr/webxr_interface_js.h b/modules/webxr/webxr_interface_js.h index 82307190db..eb77f35f39 100644 --- a/modules/webxr/webxr_interface_js.h +++ b/modules/webxr/webxr_interface_js.h @@ -86,7 +86,7 @@ public: virtual uint32_t get_view_count() override; virtual Transform3D get_camera_transform() override; virtual Transform3D get_transform_for_view(uint32_t p_view, const Transform3D &p_cam_transform) override; - virtual CameraMatrix get_projection_for_view(uint32_t p_view, real_t p_aspect, real_t p_z_near, real_t p_z_far) override; + virtual CameraMatrix get_projection_for_view(uint32_t p_view, double p_aspect, double p_z_near, double p_z_far) override; virtual Vector<BlitToScreen> commit_views(RID p_render_target, const Rect2 &p_screen_rect) override; virtual void process() override; diff --git a/platform/javascript/audio_driver_javascript.cpp b/platform/javascript/audio_driver_javascript.cpp index 420cb2f2f7..cfe6c69072 100644 --- a/platform/javascript/audio_driver_javascript.cpp +++ b/platform/javascript/audio_driver_javascript.cpp @@ -34,22 +34,18 @@ #include <emscripten.h> -AudioDriverJavaScript *AudioDriverJavaScript::singleton = nullptr; +AudioDriverJavaScript::AudioContext AudioDriverJavaScript::audio_context; bool AudioDriverJavaScript::is_available() { return godot_audio_is_available() != 0; } -const char *AudioDriverJavaScript::get_name() const { - return "JavaScript"; -} - void AudioDriverJavaScript::_state_change_callback(int p_state) { - singleton->state = p_state; + AudioDriverJavaScript::audio_context.state = p_state; } void AudioDriverJavaScript::_latency_update_callback(float p_latency) { - singleton->output_latency = p_latency; + AudioDriverJavaScript::audio_context.output_latency = p_latency; } void AudioDriverJavaScript::_audio_driver_process(int p_from, int p_samples) { @@ -105,17 +101,19 @@ void AudioDriverJavaScript::_audio_driver_capture(int p_from, int p_samples) { } Error AudioDriverJavaScript::init() { - mix_rate = GLOBAL_GET("audio/driver/mix_rate"); int latency = GLOBAL_GET("audio/driver/output_latency"); - - channel_count = godot_audio_init(&mix_rate, latency, &_state_change_callback, &_latency_update_callback); + if (!audio_context.inited) { + audio_context.mix_rate = GLOBAL_GET("audio/driver/mix_rate"); + audio_context.channel_count = godot_audio_init(&audio_context.mix_rate, latency, &_state_change_callback, &_latency_update_callback); + audio_context.inited = true; + } + mix_rate = audio_context.mix_rate; + channel_count = audio_context.channel_count; buffer_length = closest_power_of_2((latency * mix_rate / 1000)); -#ifndef NO_THREADS - node = memnew(WorkletNode); -#else - node = memnew(ScriptProcessorNode); -#endif - buffer_length = node->create(buffer_length, channel_count); + Error err = create(buffer_length, channel_count); + if (err != OK) { + return err; + } if (output_rb) { memdelete_arr(output_rb); } @@ -134,19 +132,17 @@ Error AudioDriverJavaScript::init() { } void AudioDriverJavaScript::start() { - if (node) { - node->start(output_rb, memarr_len(output_rb), input_rb, memarr_len(input_rb)); - } + start(output_rb, memarr_len(output_rb), input_rb, memarr_len(input_rb)); } void AudioDriverJavaScript::resume() { - if (state == 0) { // 'suspended' + if (audio_context.state == 0) { // 'suspended' godot_audio_resume(); } } float AudioDriverJavaScript::get_latency() { - return output_latency + (float(buffer_length) / mix_rate); + return audio_context.output_latency + (float(buffer_length) / mix_rate); } int AudioDriverJavaScript::get_mix_rate() const { @@ -157,24 +153,8 @@ AudioDriver::SpeakerMode AudioDriverJavaScript::get_speaker_mode() const { return get_speaker_mode_by_total_channels(channel_count); } -void AudioDriverJavaScript::lock() { - if (node) { - node->unlock(); - } -} - -void AudioDriverJavaScript::unlock() { - if (node) { - node->unlock(); - } -} - void AudioDriverJavaScript::finish() { - if (node) { - node->finish(); - memdelete(node); - node = nullptr; - } + finish_driver(); if (output_rb) { memdelete_arr(output_rb); output_rb = nullptr; @@ -203,41 +183,66 @@ Error AudioDriverJavaScript::capture_stop() { return OK; } -AudioDriverJavaScript::AudioDriverJavaScript() { - singleton = this; -} - #ifdef NO_THREADS /// ScriptProcessorNode implementation -void AudioDriverJavaScript::ScriptProcessorNode::_process_callback() { - AudioDriverJavaScript::singleton->_audio_driver_capture(); - AudioDriverJavaScript::singleton->_audio_driver_process(); +AudioDriverScriptProcessor *AudioDriverScriptProcessor::singleton = nullptr; + +void AudioDriverScriptProcessor::_process_callback() { + AudioDriverScriptProcessor::singleton->_audio_driver_capture(); + AudioDriverScriptProcessor::singleton->_audio_driver_process(); } -int AudioDriverJavaScript::ScriptProcessorNode::create(int p_buffer_samples, int p_channels) { - return godot_audio_script_create(p_buffer_samples, p_channels); +Error AudioDriverScriptProcessor::create(int &p_buffer_samples, int p_channels) { + if (!godot_audio_has_script_processor()) { + return ERR_UNAVAILABLE; + } + return (Error)godot_audio_script_create(&p_buffer_samples, p_channels); } -void AudioDriverJavaScript::ScriptProcessorNode::start(float *p_out_buf, int p_out_buf_size, float *p_in_buf, int p_in_buf_size) { +void AudioDriverScriptProcessor::start(float *p_out_buf, int p_out_buf_size, float *p_in_buf, int p_in_buf_size) { godot_audio_script_start(p_in_buf, p_in_buf_size, p_out_buf, p_out_buf_size, &_process_callback); } + +/// AudioWorkletNode implementation (no threads) +AudioDriverWorklet *AudioDriverWorklet::singleton = nullptr; + +Error AudioDriverWorklet::create(int &p_buffer_size, int p_channels) { + if (!godot_audio_has_worklet()) { + return ERR_UNAVAILABLE; + } + return (Error)godot_audio_worklet_create(p_channels); +} + +void AudioDriverWorklet::start(float *p_out_buf, int p_out_buf_size, float *p_in_buf, int p_in_buf_size) { + _audio_driver_process(); + godot_audio_worklet_start_no_threads(p_out_buf, p_out_buf_size, &_process_callback, p_in_buf, p_in_buf_size, &_capture_callback); +} + +void AudioDriverWorklet::_process_callback(int p_pos, int p_samples) { + AudioDriverWorklet *driver = AudioDriverWorklet::singleton; + driver->_audio_driver_process(p_pos, p_samples); +} + +void AudioDriverWorklet::_capture_callback(int p_pos, int p_samples) { + AudioDriverWorklet *driver = AudioDriverWorklet::singleton; + driver->_audio_driver_capture(p_pos, p_samples); +} #else -/// AudioWorkletNode implementation -void AudioDriverJavaScript::WorkletNode::_audio_thread_func(void *p_data) { - AudioDriverJavaScript::WorkletNode *obj = static_cast<AudioDriverJavaScript::WorkletNode *>(p_data); - AudioDriverJavaScript *driver = AudioDriverJavaScript::singleton; - const int out_samples = memarr_len(driver->output_rb); - const int in_samples = memarr_len(driver->input_rb); +/// AudioWorkletNode implementation (threads) +void AudioDriverWorklet::_audio_thread_func(void *p_data) { + AudioDriverWorklet *driver = static_cast<AudioDriverWorklet *>(p_data); + const int out_samples = memarr_len(driver->get_output_rb()); + const int in_samples = memarr_len(driver->get_input_rb()); int wpos = 0; int to_write = out_samples; int rpos = 0; int to_read = 0; int32_t step = 0; - while (!obj->quit) { + while (!driver->quit) { if (to_read) { driver->lock(); driver->_audio_driver_capture(rpos, to_read); - godot_audio_worklet_state_add(obj->state, STATE_SAMPLES_IN, -to_read); + godot_audio_worklet_state_add(driver->state, STATE_SAMPLES_IN, -to_read); driver->unlock(); rpos += to_read; if (rpos >= in_samples) { @@ -247,38 +252,40 @@ void AudioDriverJavaScript::WorkletNode::_audio_thread_func(void *p_data) { if (to_write) { driver->lock(); driver->_audio_driver_process(wpos, to_write); - godot_audio_worklet_state_add(obj->state, STATE_SAMPLES_OUT, to_write); + godot_audio_worklet_state_add(driver->state, STATE_SAMPLES_OUT, to_write); driver->unlock(); wpos += to_write; if (wpos >= out_samples) { wpos -= out_samples; } } - step = godot_audio_worklet_state_wait(obj->state, STATE_PROCESS, step, 1); - to_write = out_samples - godot_audio_worklet_state_get(obj->state, STATE_SAMPLES_OUT); - to_read = godot_audio_worklet_state_get(obj->state, STATE_SAMPLES_IN); + step = godot_audio_worklet_state_wait(driver->state, STATE_PROCESS, step, 1); + to_write = out_samples - godot_audio_worklet_state_get(driver->state, STATE_SAMPLES_OUT); + to_read = godot_audio_worklet_state_get(driver->state, STATE_SAMPLES_IN); } } -int AudioDriverJavaScript::WorkletNode::create(int p_buffer_size, int p_channels) { - godot_audio_worklet_create(p_channels); - return p_buffer_size; +Error AudioDriverWorklet::create(int &p_buffer_size, int p_channels) { + if (!godot_audio_has_worklet()) { + return ERR_UNAVAILABLE; + } + return (Error)godot_audio_worklet_create(p_channels); } -void AudioDriverJavaScript::WorkletNode::start(float *p_out_buf, int p_out_buf_size, float *p_in_buf, int p_in_buf_size) { +void AudioDriverWorklet::start(float *p_out_buf, int p_out_buf_size, float *p_in_buf, int p_in_buf_size) { godot_audio_worklet_start(p_in_buf, p_in_buf_size, p_out_buf, p_out_buf_size, state); thread.start(_audio_thread_func, this); } -void AudioDriverJavaScript::WorkletNode::lock() { +void AudioDriverWorklet::lock() { mutex.lock(); } -void AudioDriverJavaScript::WorkletNode::unlock() { +void AudioDriverWorklet::unlock() { mutex.unlock(); } -void AudioDriverJavaScript::WorkletNode::finish() { +void AudioDriverWorklet::finish_driver() { quit = true; // Ask thread to quit. thread.wait_to_finish(); } diff --git a/platform/javascript/audio_driver_javascript.h b/platform/javascript/audio_driver_javascript.h index 393693640f..6a0b4bcb0e 100644 --- a/platform/javascript/audio_driver_javascript.h +++ b/platform/javascript/audio_driver_javascript.h @@ -38,52 +38,15 @@ #include "godot_audio.h" class AudioDriverJavaScript : public AudioDriver { -public: - class AudioNode { - public: - virtual int create(int p_buffer_size, int p_output_channels) = 0; - virtual void start(float *p_out_buf, int p_out_buf_size, float *p_in_buf, int p_in_buf_size) = 0; - virtual void finish() {} - virtual void lock() {} - virtual void unlock() {} - virtual ~AudioNode() {} - }; - - class WorkletNode : public AudioNode { - private: - enum { - STATE_LOCK, - STATE_PROCESS, - STATE_SAMPLES_IN, - STATE_SAMPLES_OUT, - STATE_MAX, - }; - Mutex mutex; - Thread thread; - bool quit = false; - int32_t state[STATE_MAX] = { 0 }; - - static void _audio_thread_func(void *p_data); - - public: - int create(int p_buffer_size, int p_output_channels) override; - void start(float *p_out_buf, int p_out_buf_size, float *p_in_buf, int p_in_buf_size) override; - void finish() override; - void lock() override; - void unlock() override; - }; - - class ScriptProcessorNode : public AudioNode { - private: - static void _process_callback(); - - public: - int create(int p_buffer_samples, int p_channels) override; - void start(float *p_out_buf, int p_out_buf_size, float *p_in_buf, int p_in_buf_size) override; - }; - private: - AudioNode *node = nullptr; + struct AudioContext { + bool inited = false; + float output_latency = 0.0; + int state = -1; + int channel_count = 0; + int mix_rate = 0; + }; + static AudioContext audio_context; float *output_rb = nullptr; float *input_rb = nullptr; @@ -91,36 +54,108 @@ private: int buffer_length = 0; int mix_rate = 0; int channel_count = 0; - int state = 0; - float output_latency = 0.0; static void _state_change_callback(int p_state); static void _latency_update_callback(float p_latency); + static AudioDriverJavaScript *singleton; + protected: void _audio_driver_process(int p_from = 0, int p_samples = 0); void _audio_driver_capture(int p_from = 0, int p_samples = 0); + float *get_output_rb() const { return output_rb; } + float *get_input_rb() const { return input_rb; } + + virtual Error create(int &p_buffer_samples, int p_channels) = 0; + virtual void start(float *p_out_buf, int p_out_buf_size, float *p_in_buf, int p_in_buf_size) = 0; + virtual void finish_driver() {} public: static bool is_available(); - static AudioDriverJavaScript *singleton; + virtual Error init() final; + virtual void start() final; + virtual void finish() final; + + virtual float get_latency() override; + virtual int get_mix_rate() const override; + virtual SpeakerMode get_speaker_mode() const override; + + virtual Error capture_start() override; + virtual Error capture_stop() override; + + static void resume(); + + AudioDriverJavaScript() {} +}; + +#ifdef NO_THREADS +class AudioDriverScriptProcessor : public AudioDriverJavaScript { +private: + static void _process_callback(); + + static AudioDriverScriptProcessor *singleton; + +protected: + Error create(int &p_buffer_samples, int p_channels) override; + void start(float *p_out_buf, int p_out_buf_size, float *p_in_buf, int p_in_buf_size) override; + +public: + virtual const char *get_name() const override { return "ScriptProcessor"; } + + virtual void lock() override {} + virtual void unlock() override {} + + AudioDriverScriptProcessor() { singleton = this; } +}; + +class AudioDriverWorklet : public AudioDriverJavaScript { +private: + static void _process_callback(int p_pos, int p_samples); + static void _capture_callback(int p_pos, int p_samples); + + static AudioDriverWorklet *singleton; + +protected: + virtual Error create(int &p_buffer_size, int p_output_channels) override; + virtual void start(float *p_out_buf, int p_out_buf_size, float *p_in_buf, int p_in_buf_size) override; - virtual const char *get_name() const; +public: + virtual const char *get_name() const override { return "AudioWorklet"; } + + virtual void lock() override {} + virtual void unlock() override {} - virtual Error init(); - virtual void start(); - void resume(); - virtual float get_latency(); - virtual int get_mix_rate() const; - virtual SpeakerMode get_speaker_mode() const; - virtual void lock(); - virtual void unlock(); - virtual void finish(); + AudioDriverWorklet() { singleton = this; } +}; +#else +class AudioDriverWorklet : public AudioDriverJavaScript { +private: + enum { + STATE_LOCK, + STATE_PROCESS, + STATE_SAMPLES_IN, + STATE_SAMPLES_OUT, + STATE_MAX, + }; + Mutex mutex; + Thread thread; + bool quit = false; + int32_t state[STATE_MAX] = { 0 }; - virtual Error capture_start(); - virtual Error capture_stop(); + static void _audio_thread_func(void *p_data); - AudioDriverJavaScript(); +protected: + virtual Error create(int &p_buffer_size, int p_output_channels) override; + virtual void start(float *p_out_buf, int p_out_buf_size, float *p_in_buf, int p_in_buf_size) override; + virtual void finish_driver() override; + +public: + virtual const char *get_name() const override { return "AudioWorklet"; } + + void lock() override; + void unlock() override; }; #endif + +#endif diff --git a/platform/javascript/godot_audio.h b/platform/javascript/godot_audio.h index de8f046bbd..eba025ab63 100644 --- a/platform/javascript/godot_audio.h +++ b/platform/javascript/godot_audio.h @@ -38,6 +38,8 @@ extern "C" { #include "stddef.h" extern int godot_audio_is_available(); +extern int godot_audio_has_worklet(); +extern int godot_audio_has_script_processor(); extern int godot_audio_init(int *p_mix_rate, int p_latency, void (*_state_cb)(int), void (*_latency_cb)(float)); extern void godot_audio_resume(); @@ -46,14 +48,15 @@ extern void godot_audio_capture_stop(); // Worklet typedef int32_t GodotAudioState[4]; -extern void godot_audio_worklet_create(int p_channels); +extern int godot_audio_worklet_create(int p_channels); extern void godot_audio_worklet_start(float *p_in_buf, int p_in_size, float *p_out_buf, int p_out_size, GodotAudioState p_state); +extern void godot_audio_worklet_start_no_threads(float *p_out_buf, int p_out_size, void (*p_out_cb)(int p_pos, int p_frames), float *p_in_buf, int p_in_size, void (*p_in_cb)(int p_pos, int p_frames)); extern int godot_audio_worklet_state_add(GodotAudioState p_state, int p_idx, int p_value); extern int godot_audio_worklet_state_get(GodotAudioState p_state, int p_idx); extern int godot_audio_worklet_state_wait(int32_t *p_state, int p_idx, int32_t p_expected, int p_timeout); // Script -extern int godot_audio_script_create(int p_buffer_size, int p_channels); +extern int godot_audio_script_create(int *p_buffer_size, int p_channels); extern void godot_audio_script_start(float *p_in_buf, int p_in_size, float *p_out_buf, int p_out_size, void (*p_cb)()); #ifdef __cplusplus diff --git a/platform/javascript/js/libs/audio.worklet.js b/platform/javascript/js/libs/audio.worklet.js index df475ba52d..52b3aedf8c 100644 --- a/platform/javascript/js/libs/audio.worklet.js +++ b/platform/javascript/js/libs/audio.worklet.js @@ -29,15 +29,16 @@ /*************************************************************************/ class RingBuffer { - constructor(p_buffer, p_state) { + constructor(p_buffer, p_state, p_threads) { this.buffer = p_buffer; this.avail = p_state; + this.threads = p_threads; this.rpos = 0; this.wpos = 0; } data_left() { - return Atomics.load(this.avail, 0); + return this.threads ? Atomics.load(this.avail, 0) : this.avail; } space_left() { @@ -55,10 +56,16 @@ class RingBuffer { to_write -= high; this.rpos = 0; } - output.set(this.buffer.subarray(this.rpos, this.rpos + to_write), from); + if (to_write) { + output.set(this.buffer.subarray(this.rpos, this.rpos + to_write), from); + } this.rpos += to_write; - Atomics.add(this.avail, 0, -output.length); - Atomics.notify(this.avail, 0); + if (this.threads) { + Atomics.add(this.avail, 0, -output.length); + Atomics.notify(this.avail, 0); + } else { + this.avail -= output.length; + } } write(p_buffer) { @@ -77,14 +84,19 @@ class RingBuffer { this.buffer.set(low); this.wpos = low.length; } - Atomics.add(this.avail, 0, to_write); - Atomics.notify(this.avail, 0); + if (this.threads) { + Atomics.add(this.avail, 0, to_write); + Atomics.notify(this.avail, 0); + } else { + this.avail += to_write; + } } } class GodotProcessor extends AudioWorkletProcessor { constructor() { super(); + this.threads = false; this.running = true; this.lock = null; this.notifier = null; @@ -100,24 +112,31 @@ class GodotProcessor extends AudioWorkletProcessor { } process_notify() { - Atomics.add(this.notifier, 0, 1); - Atomics.notify(this.notifier, 0); + if (this.notifier) { + Atomics.add(this.notifier, 0, 1); + Atomics.notify(this.notifier, 0); + } } parse_message(p_cmd, p_data) { if (p_cmd === 'start' && p_data) { const state = p_data[0]; let idx = 0; + this.threads = true; this.lock = state.subarray(idx, ++idx); this.notifier = state.subarray(idx, ++idx); const avail_in = state.subarray(idx, ++idx); const avail_out = state.subarray(idx, ++idx); - this.input = new RingBuffer(p_data[1], avail_in); - this.output = new RingBuffer(p_data[2], avail_out); + this.input = new RingBuffer(p_data[1], avail_in, true); + this.output = new RingBuffer(p_data[2], avail_out, true); } else if (p_cmd === 'stop') { this.running = false; this.output = null; this.input = null; + } else if (p_cmd === 'start_nothreads') { + this.output = new RingBuffer(p_data[0], p_data[0].length, false); + } else if (p_cmd === 'chunk') { + this.output.write(p_data); } } @@ -139,7 +158,10 @@ class GodotProcessor extends AudioWorkletProcessor { if (this.input_buffer.length !== chunk) { this.input_buffer = new Float32Array(chunk); } - if (this.input.space_left() >= chunk) { + if (!this.threads) { + GodotProcessor.write_input(this.input_buffer, input); + this.port.postMessage({ 'cmd': 'input', 'data': this.input_buffer }); + } else if (this.input.space_left() >= chunk) { GodotProcessor.write_input(this.input_buffer, input); this.input.write(this.input_buffer); } else { @@ -156,6 +178,9 @@ class GodotProcessor extends AudioWorkletProcessor { if (this.output.data_left() >= chunk) { this.output.read(this.output_buffer); GodotProcessor.write_output(output, this.output_buffer); + if (!this.threads) { + this.port.postMessage({ 'cmd': 'read', 'data': chunk }); + } } else { this.port.postMessage('Output buffer has not enough frames! Skipping output frame.'); } diff --git a/platform/javascript/js/libs/library_godot_audio.js b/platform/javascript/js/libs/library_godot_audio.js index c9dae1a7af..f6010fd12a 100644 --- a/platform/javascript/js/libs/library_godot_audio.js +++ b/platform/javascript/js/libs/library_godot_audio.js @@ -159,6 +159,16 @@ const GodotAudio = { return 1; }, + godot_audio_has_worklet__sig: 'i', + godot_audio_has_worklet: function () { + return (GodotAudio.ctx && GodotAudio.ctx.audioWorklet) ? 1 : 0; + }, + + godot_audio_has_script_processor__sig: 'i', + godot_audio_has_script_processor: function () { + return (GodotAudio.ctx && GodotAudio.ctx.createScriptProcessor) ? 1 : 0; + }, + godot_audio_init__sig: 'iiiii', godot_audio_init: function (p_mix_rate, p_latency, p_state_change, p_latency_update) { const statechange = GodotRuntime.get_func(p_state_change); @@ -209,6 +219,7 @@ const GodotAudioWorklet = { $GodotAudioWorklet: { promise: null, worklet: null, + ring_buffer: null, create: function (channels) { const path = GodotConfig.locate_file('godot.audio.worklet.js'); @@ -239,6 +250,86 @@ const GodotAudioWorklet = { }); }, + start_no_threads: function (p_out_buf, p_out_size, out_callback, p_in_buf, p_in_size, in_callback) { + function RingBuffer() { + let wpos = 0; + let rpos = 0; + let pending_samples = 0; + const wbuf = new Float32Array(p_out_size); + + function send(port) { + if (pending_samples === 0) { + return; + } + const buffer = GodotRuntime.heapSub(HEAPF32, p_out_buf, p_out_size); + const size = buffer.length; + const tot_sent = pending_samples; + out_callback(wpos, pending_samples); + if (wpos + pending_samples >= size) { + const high = size - wpos; + wbuf.set(buffer.subarray(wpos, size)); + pending_samples -= high; + wpos = 0; + } + if (pending_samples > 0) { + wbuf.set(buffer.subarray(wpos, wpos + pending_samples), tot_sent - pending_samples); + } + port.postMessage({ 'cmd': 'chunk', 'data': wbuf.subarray(0, tot_sent) }); + wpos += pending_samples; + pending_samples = 0; + } + this.receive = function (recv_buf) { + const buffer = GodotRuntime.heapSub(HEAPF32, p_in_buf, p_in_size); + const from = rpos; + let to_write = recv_buf.length; + let high = 0; + if (rpos + to_write >= p_in_size) { + high = p_in_size - rpos; + buffer.set(recv_buf.subarray(0, high), rpos); + to_write -= high; + rpos = 0; + } + if (to_write) { + buffer.set(recv_buf.subarray(high, to_write), rpos); + } + in_callback(from, recv_buf.length); + rpos += to_write; + }; + this.consumed = function (size, port) { + pending_samples += size; + send(port); + }; + } + GodotAudioWorklet.ring_buffer = new RingBuffer(); + GodotAudioWorklet.promise.then(function () { + const node = GodotAudioWorklet.worklet; + const buffer = GodotRuntime.heapSlice(HEAPF32, p_out_buf, p_out_size); + node.connect(GodotAudio.ctx.destination); + node.port.postMessage({ + 'cmd': 'start_nothreads', + 'data': [buffer, p_in_size], + }); + node.port.onmessage = function (event) { + if (!GodotAudioWorklet.worklet) { + return; + } + if (event.data['cmd'] === 'read') { + const read = event.data['data']; + GodotAudioWorklet.ring_buffer.consumed(read, GodotAudioWorklet.worklet.port); + } else if (event.data['cmd'] === 'input') { + const buf = event.data['data']; + if (buf.length > p_in_size) { + GodotRuntime.error('Input chunk is too big'); + return; + } + GodotAudioWorklet.ring_buffer.receive(buf); + } else { + GodotRuntime.error(event.data); + } + }; + }); + }, + get_node: function () { return GodotAudioWorklet.worklet; }, @@ -262,9 +353,15 @@ const GodotAudioWorklet = { }, }, - godot_audio_worklet_create__sig: 'vi', + godot_audio_worklet_create__sig: 'ii', godot_audio_worklet_create: function (channels) { - GodotAudioWorklet.create(channels); + try { + GodotAudioWorklet.create(channels); + } catch (e) { + GodotRuntime.error('Error starting AudioDriverWorklet', e); + return 1; + } + return 0; }, godot_audio_worklet_start__sig: 'viiiii', @@ -275,6 +372,13 @@ const GodotAudioWorklet = { GodotAudioWorklet.start(in_buffer, out_buffer, state); }, + godot_audio_worklet_start_no_threads__sig: 'viiiiii', + godot_audio_worklet_start_no_threads: function (p_out_buf, p_out_size, p_out_callback, p_in_buf, p_in_size, p_in_callback) { + const out_callback = GodotRuntime.get_func(p_out_callback); + const in_callback = GodotRuntime.get_func(p_in_callback); + GodotAudioWorklet.start_no_threads(p_out_buf, p_out_size, out_callback, p_in_buf, p_in_size, in_callback); + }, + godot_audio_worklet_state_wait__sig: 'iiii', godot_audio_worklet_state_wait: function (p_state, p_idx, p_expected, p_timeout) { Atomics.wait(HEAP32, (p_state >> 2) + p_idx, p_expected, p_timeout); @@ -358,7 +462,15 @@ const GodotAudioScript = { godot_audio_script_create__sig: 'iii', godot_audio_script_create: function (buffer_length, channel_count) { - return GodotAudioScript.create(buffer_length, channel_count); + const buf_len = GodotRuntime.getHeapValue(buffer_length, 'i32'); + try { + const out_len = GodotAudioScript.create(buf_len, channel_count); + GodotRuntime.setHeapValue(buffer_length, out_len, 'i32'); + } catch (e) { + GodotRuntime.error('Error starting AudioDriverScriptProcessor', e); + return 1; + } + return 0; }, godot_audio_script_start__sig: 'viiiii', diff --git a/platform/javascript/os_javascript.cpp b/platform/javascript/os_javascript.cpp index 95c5909d50..4431bd5f1b 100644 --- a/platform/javascript/os_javascript.cpp +++ b/platform/javascript/os_javascript.cpp @@ -63,9 +63,7 @@ void OS_JavaScript::initialize() { } void OS_JavaScript::resume_audio() { - if (audio_driver_javascript) { - audio_driver_javascript->resume(); - } + AudioDriverJavaScript::resume(); } void OS_JavaScript::set_main_loop(MainLoop *p_main_loop) { @@ -101,10 +99,10 @@ void OS_JavaScript::delete_main_loop() { void OS_JavaScript::finalize() { delete_main_loop(); - if (audio_driver_javascript) { - memdelete(audio_driver_javascript); - audio_driver_javascript = nullptr; + for (AudioDriverJavaScript *driver : audio_drivers) { + memdelete(driver); } + audio_drivers.clear(); } // Miscellaneous @@ -229,8 +227,13 @@ OS_JavaScript::OS_JavaScript() { setenv("LANG", locale_ptr, true); if (AudioDriverJavaScript::is_available()) { - audio_driver_javascript = memnew(AudioDriverJavaScript); - AudioDriverManager::add_driver(audio_driver_javascript); +#ifdef NO_THREADS + audio_drivers.push_back(memnew(AudioDriverScriptProcessor)); +#endif + audio_drivers.push_back(memnew(AudioDriverWorklet)); + } + for (int i = 0; i < audio_drivers.size(); i++) { + AudioDriverManager::add_driver(audio_drivers[i]); } idb_available = godot_js_os_fs_is_persistent(); diff --git a/platform/javascript/os_javascript.h b/platform/javascript/os_javascript.h index efac2dbca7..d053082d92 100644 --- a/platform/javascript/os_javascript.h +++ b/platform/javascript/os_javascript.h @@ -40,7 +40,7 @@ class OS_JavaScript : public OS_Unix { MainLoop *main_loop = nullptr; - AudioDriverJavaScript *audio_driver_javascript = nullptr; + List<AudioDriverJavaScript *> audio_drivers; bool idb_is_syncing = false; bool idb_available = false; diff --git a/platform/windows/display_server_windows.cpp b/platform/windows/display_server_windows.cpp index 1723026849..6402702415 100644 --- a/platform/windows/display_server_windows.cpp +++ b/platform/windows/display_server_windows.cpp @@ -955,6 +955,11 @@ void DisplayServerWindows::window_set_mode(WindowMode p_mode, WindowID p_window) _update_window_style(p_window, false); MoveWindow(wd.hWnd, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, TRUE); + + if (restore_mouse_trails > 1) { + SystemParametersInfoA(SPI_SETMOUSETRAILS, restore_mouse_trails, 0, 0); + restore_mouse_trails = 0; + } } else if (p_mode == WINDOW_MODE_WINDOWED) { ShowWindow(wd.hWnd, SW_RESTORE); wd.maximized = false; @@ -994,6 +999,13 @@ void DisplayServerWindows::window_set_mode(WindowMode p_mode, WindowID p_window) _update_window_style(false); MoveWindow(wd.hWnd, pos.x, pos.y, size.width, size.height, TRUE); + + // If the user has mouse trails enabled in windows, then sometimes the cursor disappears in fullscreen mode. + // Save number of trails so we can restore when exiting, then turn off mouse trails + SystemParametersInfoA(SPI_GETMOUSETRAILS, 0, &restore_mouse_trails, 0); + if (restore_mouse_trails > 1) { + SystemParametersInfoA(SPI_SETMOUSETRAILS, 0, 0, 0); + } } } @@ -3395,4 +3407,8 @@ DisplayServerWindows::~DisplayServerWindows() { memdelete(context_vulkan); } #endif + + if (restore_mouse_trails > 1) { + SystemParametersInfoA(SPI_SETMOUSETRAILS, restore_mouse_trails, 0, 0); + } } diff --git a/platform/windows/display_server_windows.h b/platform/windows/display_server_windows.h index 06014fbabe..c02a90c543 100644 --- a/platform/windows/display_server_windows.h +++ b/platform/windows/display_server_windows.h @@ -403,6 +403,7 @@ class DisplayServerWindows : public DisplayServer { void _get_window_style(bool p_main_window, bool p_fullscreen, bool p_borderless, bool p_resizable, bool p_maximized, bool p_no_activate_focus, DWORD &r_style, DWORD &r_style_ex); MouseMode mouse_mode; + int restore_mouse_trails = 0; bool alt_mem = false; bool gr_mem = false; bool shift_mem = false; diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp index 2a0a509d43..78b7be8a30 100644 --- a/platform/windows/os_windows.cpp +++ b/platform/windows/os_windows.cpp @@ -557,8 +557,27 @@ String OS_Windows::get_stdin_string(bool p_block) { } Error OS_Windows::shell_open(String p_uri) { - ShellExecuteW(nullptr, nullptr, (LPCWSTR)(p_uri.utf16().get_data()), nullptr, nullptr, SW_SHOWNORMAL); - return OK; + INT_PTR ret = (INT_PTR)ShellExecuteW(nullptr, nullptr, (LPCWSTR)(p_uri.utf16().get_data()), nullptr, nullptr, SW_SHOWNORMAL); + if (ret > 32) { + return OK; + } else { + switch (ret) { + case ERROR_FILE_NOT_FOUND: + case SE_ERR_DLLNOTFOUND: + return ERR_FILE_NOT_FOUND; + case ERROR_PATH_NOT_FOUND: + return ERR_FILE_BAD_PATH; + case ERROR_BAD_FORMAT: + return ERR_FILE_CORRUPT; + case SE_ERR_ACCESSDENIED: + return ERR_UNAUTHORIZED; + case 0: + case SE_ERR_OOM: + return ERR_OUT_OF_MEMORY; + default: + return FAILED; + } + } } String OS_Windows::get_locale() const { diff --git a/scene/animation/animation_blend_tree.cpp b/scene/animation/animation_blend_tree.cpp index d11387902a..af186072ac 100644 --- a/scene/animation/animation_blend_tree.cpp +++ b/scene/animation/animation_blend_tree.cpp @@ -248,27 +248,26 @@ double AnimationNodeOneShot::process(double p_time, bool p_seek) { if (fade_in > 0) { blend = time / fade_in; } else { - blend = 0; //wtf + blend = 0; } - - } else if (!do_start && remaining < fade_out) { - if (fade_out) { + } else if (!do_start && remaining <= fade_out) { + if (fade_out > 0) { blend = (remaining / fade_out); } else { - blend = 1.0; + blend = 0; } } else { blend = 1.0; } - float main_rem; + double main_rem; if (mix == MIX_MODE_ADD) { main_rem = blend_input(0, p_time, p_seek, 1.0, FILTER_IGNORE, !sync); } else { main_rem = blend_input(0, p_time, p_seek, 1.0 - blend, FILTER_BLEND, !sync); } - float os_rem = blend_input(1, os_seek ? time : p_time, os_seek, blend, FILTER_PASS, false); + double os_rem = blend_input(1, os_seek ? time : p_time, os_seek, blend, FILTER_PASS, false); if (do_start) { remaining = os_rem; @@ -718,7 +717,7 @@ double AnimationNodeTransition::process(double p_time, bool p_seek) { } else { // cross-fading from prev to current - float blend = xfade ? (prev_xfading / xfade) : 1; + float blend = xfade == 0 ? 0 : (prev_xfading / xfade); if (!p_seek && switched) { //just switched, seek to start of current diff --git a/scene/animation/animation_tree.cpp b/scene/animation/animation_tree.cpp index 88fb960164..9ca8d478b1 100644 --- a/scene/animation/animation_tree.cpp +++ b/scene/animation/animation_tree.cpp @@ -958,7 +958,7 @@ void AnimationTree::_process_graph(real_t p_delta) { Variant::interpolate(t->value, value, blend, t->value); - } else if (delta != 0) { + } else { List<int> indices; a->value_track_get_key_indices(i, time, delta, &indices); diff --git a/scene/gui/code_edit.cpp b/scene/gui/code_edit.cpp index e7769f9372..4dfd6902e6 100644 --- a/scene/gui/code_edit.cpp +++ b/scene/gui/code_edit.cpp @@ -467,7 +467,7 @@ void CodeEdit::gui_input(const Ref<InputEvent> &p_gui_input) { } /* MISC */ - if (k->is_action("ui_cancel", true)) { + if (!code_hint.is_empty() && k->is_action("ui_cancel", true)) { set_code_hint(""); accept_event(); return; @@ -1725,14 +1725,17 @@ bool CodeEdit::is_code_completion_enabled() const { void CodeEdit::set_code_completion_prefixes(const TypedArray<String> &p_prefixes) { code_completion_prefixes.clear(); for (int i = 0; i < p_prefixes.size(); i++) { - code_completion_prefixes.insert(p_prefixes[i]); + const String prefix = p_prefixes[i]; + + ERR_CONTINUE_MSG(prefix.is_empty(), "Code completion prefix cannot be empty."); + code_completion_prefixes.insert(prefix[0]); } } TypedArray<String> CodeEdit::get_code_completion_prefixes() const { TypedArray<String> prefixes; - for (Set<String>::Element *E = code_completion_prefixes.front(); E; E = E->next()) { - prefixes.push_back(E->get()); + for (const Set<char32_t>::Element *E = code_completion_prefixes.front(); E; E = E->next()) { + prefixes.push_back(String::chr(E->get())); } return prefixes; } @@ -1795,9 +1798,9 @@ void CodeEdit::request_code_completion(bool p_force) { String line = get_line(get_caret_line()); int ofs = CLAMP(get_caret_column(), 0, line.length()); - if (ofs > 0 && (is_in_string(get_caret_line(), ofs) != -1 || _is_char(line[ofs - 1]) || code_completion_prefixes.has(String::chr(line[ofs - 1])))) { + if (ofs > 0 && (is_in_string(get_caret_line(), ofs) != -1 || _is_char(line[ofs - 1]) || code_completion_prefixes.has(line[ofs - 1]))) { emit_signal(SNAME("request_code_completion")); - } else if (ofs > 1 && line[ofs - 1] == ' ' && code_completion_prefixes.has(String::chr(line[ofs - 2]))) { + } else if (ofs > 1 && line[ofs - 1] == ' ' && code_completion_prefixes.has(line[ofs - 2])) { emit_signal(SNAME("request_code_completion")); } } @@ -1969,7 +1972,7 @@ void CodeEdit::confirm_code_completion(bool p_replace) { end_complex_operation(); cancel_code_completion(); - if (code_completion_prefixes.has(String::chr(last_completion_char))) { + if (code_completion_prefixes.has(last_completion_char)) { request_code_completion(); } } @@ -2764,7 +2767,7 @@ void CodeEdit::_filter_code_completion_candidates_impl() { bool prev_is_word = false; /* Cancel if we are at the close of a string. */ - if (in_string == -1 && first_quote_col == cofs - 1) { + if (caret_column > 0 && in_string == -1 && first_quote_col == cofs - 1) { cancel_code_completion(); return; /* In a string, therefore we are trying to complete the string text. */ @@ -2790,9 +2793,9 @@ void CodeEdit::_filter_code_completion_candidates_impl() { /* If all else fails, check for a prefix. */ /* Single space between caret and prefix is okay. */ bool prev_is_prefix = false; - if (cofs > 0 && code_completion_prefixes.has(String::chr(line[cofs - 1]))) { + if (cofs > 0 && code_completion_prefixes.has(line[cofs - 1])) { prev_is_prefix = true; - } else if (cofs > 1 && line[cofs - 1] == ' ' && code_completion_prefixes.has(String::chr(line[cofs - 2]))) { + } else if (cofs > 1 && line[cofs - 1] == ' ' && code_completion_prefixes.has(line[cofs - 2])) { prev_is_prefix = true; } diff --git a/scene/gui/code_edit.h b/scene/gui/code_edit.h index 740548d559..d8eccb7d32 100644 --- a/scene/gui/code_edit.h +++ b/scene/gui/code_edit.h @@ -214,7 +214,7 @@ private: int code_completion_longest_line = 0; Rect2i code_completion_rect; - Set<String> code_completion_prefixes; + Set<char32_t> code_completion_prefixes; List<ScriptCodeCompletionOption> code_completion_option_submitted; List<ScriptCodeCompletionOption> code_completion_option_sources; String code_completion_base; diff --git a/scene/gui/container.cpp b/scene/gui/container.cpp index c97434f69b..11941529cd 100644 --- a/scene/gui/container.cpp +++ b/scene/gui/container.cpp @@ -96,17 +96,18 @@ void Container::fit_child_in_rect(Control *p_child, const Rect2 &p_rect) { ERR_FAIL_COND(!p_child); ERR_FAIL_COND(p_child->get_parent() != this); + bool rtl = is_layout_rtl(); Size2 minsize = p_child->get_combined_minimum_size(); Rect2 r = p_rect; if (!(p_child->get_h_size_flags() & SIZE_FILL)) { r.size.x = minsize.width; if (p_child->get_h_size_flags() & SIZE_SHRINK_END) { - r.position.x += p_rect.size.width - minsize.width; + r.position.x += rtl ? 0 : (p_rect.size.width - minsize.width); } else if (p_child->get_h_size_flags() & SIZE_SHRINK_CENTER) { r.position.x += Math::floor((p_rect.size.x - minsize.width) / 2); } else { - r.position.x += 0; + r.position.x += rtl ? (p_rect.size.width - minsize.width) : 0; } } diff --git a/scene/gui/label.cpp b/scene/gui/label.cpp index 5600816b2d..18cde25e55 100644 --- a/scene/gui/label.cpp +++ b/scene/gui/label.cpp @@ -92,8 +92,12 @@ void Label::_shape() { const Ref<Font> &font = get_theme_font(SNAME("font")); int font_size = get_theme_font_size(SNAME("font_size")); ERR_FAIL_COND(font.is_null()); - TS->shaped_text_add_string(text_rid, (uppercase) ? xl_text.to_upper() : xl_text, font->get_rids(), font_size, opentype_features, (language != "") ? language : TranslationServer::get_singleton()->get_tool_locale()); - TS->shaped_text_set_bidi_override(text_rid, structured_text_parser(st_parser, st_args, xl_text)); + String text = (uppercase) ? xl_text.to_upper() : xl_text; + if (visible_chars >= 0) { + text = text.substr(0, visible_chars); + } + TS->shaped_text_add_string(text_rid, text, font->get_rids(), font_size, opentype_features, (language != "") ? language : TranslationServer::get_singleton()->get_tool_locale()); + TS->shaped_text_set_bidi_override(text_rid, structured_text_parser(st_parser, st_args, text)); dirty = false; lines_dirty = true; } @@ -258,11 +262,18 @@ void Label::_notification(int p_what) { return; // Nothing new. } xl_text = new_text; + if (percent_visible < 1) { + visible_chars = get_total_character_count() * percent_visible; + } dirty = true; update(); } + if (p_what == NOTIFICATION_LAYOUT_DIRECTION_CHANGED) { + update(); + } + if (p_what == NOTIFICATION_DRAW) { if (clip) { RenderingServer::get_singleton()->canvas_item_set_clip(get_canvas_item(), true); @@ -286,6 +297,7 @@ void Label::_notification(int p_what) { int outline_size = get_theme_constant(SNAME("outline_size")); int shadow_outline_size = get_theme_constant(SNAME("shadow_outline_size")); bool rtl = TS->shaped_text_get_direction(text_rid); + bool rtl_layout = is_layout_rtl(); style->draw(ci, Rect2(Point2(0, 0), get_size())); @@ -342,24 +354,6 @@ void Label::_notification(int p_what) { } } - int visible_glyphs = -1; - int glyhps_drawn = 0; - if (percent_visible < 1) { - int total_glyphs = 0; - for (int i = lines_skipped; i < last_line; i++) { - const Vector<TextServer::Glyph> visual = TS->shaped_text_get_glyphs(lines_rid[i]); - const TextServer::Glyph *glyphs = visual.ptr(); - int gl_size = visual.size(); - for (int j = 0; j < gl_size; j++) { - if ((glyphs[j].flags & TextServer::GRAPHEME_IS_VIRTUAL) != TextServer::GRAPHEME_IS_VIRTUAL) { - total_glyphs++; - } - } - } - - visible_glyphs = MIN(total_glyphs, visible_chars); - } - Vector2 ofs; ofs.y = style->get_offset().y + vbegin; for (int i = lines_skipped; i < last_line; i++) { @@ -375,13 +369,21 @@ void Label::_notification(int p_what) { } break; case ALIGN_LEFT: { - ofs.x = style->get_offset().x; + if (rtl_layout) { + ofs.x = int(size.width - style->get_margin(SIDE_RIGHT) - line_size.width); + } else { + ofs.x = style->get_offset().x; + } } break; case ALIGN_CENTER: { ofs.x = int(size.width - line_size.width) / 2; } break; case ALIGN_RIGHT: { - ofs.x = int(size.width - style->get_margin(SIDE_RIGHT) - line_size.width); + if (rtl_layout) { + ofs.x = style->get_offset().x; + } else { + ofs.x = int(size.width - style->get_margin(SIDE_RIGHT) - line_size.width); + } } break; } @@ -407,14 +409,6 @@ void Label::_notification(int p_what) { // Draw main text. for (int j = 0; j < gl_size; j++) { for (int k = 0; k < glyphs[j].repeat; k++) { - if (visible_glyphs != -1) { - if ((glyphs[j].flags & TextServer::GRAPHEME_IS_VIRTUAL) != TextServer::GRAPHEME_IS_VIRTUAL) { - if (glyhps_drawn >= visible_glyphs) { - return; - } - } - } - // Trim when necessary. if (trim_data.trim_pos >= 0) { if (rtl) { @@ -431,7 +425,6 @@ void Label::_notification(int p_what) { // Draw glyph outlines and shadow. draw_glyph_outline(glyphs[j], ci, font_color, font_shadow_color, font_outline_color, shadow_outline_size, outline_size, offset, shadow_ofs); offset.x += glyphs[j].advance; - glyhps_drawn++; } } // Draw LTR ellipsis string when necessary. @@ -462,14 +455,6 @@ void Label::_notification(int p_what) { // Draw main text. for (int j = 0; j < gl_size; j++) { for (int k = 0; k < glyphs[j].repeat; k++) { - if (visible_glyphs != -1) { - if ((glyphs[j].flags & TextServer::GRAPHEME_IS_VIRTUAL) != TextServer::GRAPHEME_IS_VIRTUAL) { - if (glyhps_drawn >= visible_glyphs) { - return; - } - } - } - // Trim when necessary. if (trim_data.trim_pos >= 0) { if (rtl) { @@ -486,7 +471,6 @@ void Label::_notification(int p_what) { // Draw glyph outlines and shadow. draw_glyph(glyphs[j], ci, font_color, ofs); ofs.x += glyphs[j].advance; - glyhps_drawn++; } } // Draw LTR ellipsis string when necessary. @@ -709,16 +693,16 @@ String Label::get_text() const { } void Label::set_visible_characters(int p_amount) { - visible_chars = p_amount; - if (get_total_character_count() > 0) { - percent_visible = (float)p_amount / (float)get_total_character_count(); - } else { - percent_visible = 1.0; - } - if (p_amount == -1) { - lines_dirty = true; + if (visible_chars != p_amount) { + visible_chars = p_amount; + if (get_total_character_count() > 0) { + percent_visible = (float)p_amount / (float)get_total_character_count(); + } else { + percent_visible = 1.0; + } + dirty = true; + update(); } - update(); } int Label::get_visible_characters() const { @@ -726,15 +710,17 @@ int Label::get_visible_characters() const { } void Label::set_percent_visible(float p_percent) { - if (p_percent < 0 || p_percent >= 1) { - visible_chars = -1; - percent_visible = 1; - lines_dirty = true; - } else { - visible_chars = get_total_character_count() * p_percent; - percent_visible = p_percent; + if (percent_visible != p_percent) { + if (p_percent < 0 || p_percent >= 1) { + visible_chars = -1; + percent_visible = 1; + } else { + visible_chars = get_total_character_count() * p_percent; + percent_visible = p_percent; + } + dirty = true; + update(); } - update(); } float Label::get_percent_visible() const { @@ -889,7 +875,7 @@ void Label::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::BOOL, "clip_text"), "set_clip_text", "is_clipping_text"); ADD_PROPERTY(PropertyInfo(Variant::INT, "text_overrun_behavior", PROPERTY_HINT_ENUM, "Trim Nothing,Trim Characters,Trim Words,Ellipsis,Word Ellipsis"), "set_text_overrun_behavior", "get_text_overrun_behavior"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "uppercase"), "set_uppercase", "is_uppercase"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "visible_characters", PROPERTY_HINT_RANGE, "-1,128000,1", PROPERTY_USAGE_EDITOR), "set_visible_characters", "get_visible_characters"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "visible_characters", PROPERTY_HINT_RANGE, "-1,128000,1"), "set_visible_characters", "get_visible_characters"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "percent_visible", PROPERTY_HINT_RANGE, "0,1,0.001"), "set_percent_visible", "get_percent_visible"); ADD_PROPERTY(PropertyInfo(Variant::INT, "lines_skipped", PROPERTY_HINT_RANGE, "0,999,1"), "set_lines_skipped", "get_lines_skipped"); ADD_PROPERTY(PropertyInfo(Variant::INT, "max_lines_visible", PROPERTY_HINT_RANGE, "-1,999,1"), "set_max_lines_visible", "get_max_lines_visible"); diff --git a/scene/gui/menu_button.cpp b/scene/gui/menu_button.cpp index 0cc53a7832..ceb2092e3a 100644 --- a/scene/gui/menu_button.cpp +++ b/scene/gui/menu_button.cpp @@ -89,13 +89,15 @@ void MenuButton::pressed() { emit_signal(SNAME("about_to_popup")); Size2 size = get_size() * get_viewport()->get_canvas_transform().get_scale(); + popup->set_size(Size2(size.width, 0)); Point2 gp = get_screen_position(); gp.y += size.y; - + if (is_layout_rtl()) { + gp.x += size.width - popup->get_size().width; + } popup->set_position(gp); - - popup->set_size(Size2(size.width, 0)); popup->set_parent_rect(Rect2(Point2(gp - popup->get_position()), size)); + popup->take_mouse_focus(); popup->popup(); } diff --git a/scene/gui/rich_text_effect.cpp b/scene/gui/rich_text_effect.cpp index 236d106af8..076fa132c0 100644 --- a/scene/gui/rich_text_effect.cpp +++ b/scene/gui/rich_text_effect.cpp @@ -90,6 +90,12 @@ void CharFXTransform::_bind_methods() { ClassDB::bind_method(D_METHOD("get_glyph_index"), &CharFXTransform::get_glyph_index); ClassDB::bind_method(D_METHOD("set_glyph_index", "glyph_index"), &CharFXTransform::set_glyph_index); + ClassDB::bind_method(D_METHOD("get_glyph_count"), &CharFXTransform::get_glyph_count); + ClassDB::bind_method(D_METHOD("set_glyph_count", "glyph_count"), &CharFXTransform::set_glyph_count); + + ClassDB::bind_method(D_METHOD("get_glyph_flags"), &CharFXTransform::get_glyph_flags); + ClassDB::bind_method(D_METHOD("set_glyph_flags", "glyph_flags"), &CharFXTransform::set_glyph_flags); + ClassDB::bind_method(D_METHOD("get_font"), &CharFXTransform::get_font); ClassDB::bind_method(D_METHOD("set_font", "font"), &CharFXTransform::set_font); @@ -101,5 +107,7 @@ void CharFXTransform::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::COLOR, "color"), "set_color", "get_color"); ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY, "env"), "set_environment", "get_environment"); ADD_PROPERTY(PropertyInfo(Variant::INT, "glyph_index"), "set_glyph_index", "get_glyph_index"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "glyph_count"), "set_glyph_count", "get_glyph_count"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "glyph_flags"), "set_glyph_flags", "get_glyph_flags"); ADD_PROPERTY(PropertyInfo(Variant::RID, "font"), "set_font", "get_font"); } diff --git a/scene/gui/rich_text_effect.h b/scene/gui/rich_text_effect.h index f5506542bb..5681f9b193 100644 --- a/scene/gui/rich_text_effect.h +++ b/scene/gui/rich_text_effect.h @@ -50,6 +50,8 @@ public: double elapsed_time = 0.0f; Dictionary environment; uint32_t glyph_index = 0; + uint16_t glyph_flags = 0; + uint8_t glyph_count = 0; RID font; CharFXTransform(); @@ -57,19 +59,31 @@ public: Vector2i get_range() { return range; } void set_range(const Vector2i &p_range) { range = p_range; } + double get_elapsed_time() { return elapsed_time; } void set_elapsed_time(double p_elapsed_time) { elapsed_time = p_elapsed_time; } + bool is_visible() { return visibility; } void set_visibility(bool p_visibility) { visibility = p_visibility; } + bool is_outline() { return outline; } void set_outline(bool p_outline) { outline = p_outline; } + Point2 get_offset() { return offset; } void set_offset(Point2 p_offset) { offset = p_offset; } + Color get_color() { return color; } void set_color(Color p_color) { color = p_color; } uint32_t get_glyph_index() const { return glyph_index; }; void set_glyph_index(uint32_t p_glyph_index) { glyph_index = p_glyph_index; }; + + uint16_t get_glyph_flags() const { return glyph_index; }; + void set_glyph_flags(uint16_t p_glyph_flags) { glyph_flags = p_glyph_flags; }; + + uint8_t get_glyph_count() const { return glyph_count; }; + void set_glyph_count(uint8_t p_glyph_count) { glyph_count = p_glyph_count; }; + RID get_font() const { return font; }; void set_font(RID p_font) { font = p_font; }; diff --git a/scene/gui/rich_text_label.cpp b/scene/gui/rich_text_label.cpp index d4788775c5..eb88570663 100644 --- a/scene/gui/rich_text_label.cpp +++ b/scene/gui/rich_text_label.cpp @@ -399,8 +399,9 @@ void RichTextLabel::_shape_line(ItemFrame *p_frame, int p_line, const Ref<Font> // Shape current paragraph. String text; Item *it_to = (p_line + 1 < p_frame->lines.size()) ? p_frame->lines[p_line + 1].from : nullptr; + int remaining_characters = visible_characters - l.char_offset; for (Item *it = l.from; it && it != it_to; it = _get_next_item(it)) { - if (visible_characters >= 0 && l.char_offset + l.char_count > visible_characters) { + if (visible_characters >= 0 && remaining_characters <= 0) { break; } switch (it->type) { @@ -427,7 +428,8 @@ void RichTextLabel::_shape_line(ItemFrame *p_frame, int p_line, const Ref<Font> } l.text_buf->add_string("\n", font, font_size, Dictionary(), ""); text += "\n"; - l.char_count += 1; + l.char_count++; + remaining_characters--; } break; case ITEM_TEXT: { ItemText *t = (ItemText *)it; @@ -442,9 +444,10 @@ void RichTextLabel::_shape_line(ItemFrame *p_frame, int p_line, const Ref<Font> Dictionary font_ftr = _find_font_features(it); String lang = _find_language(it); String tx = t->text; - if (visible_characters >= 0 && l.char_offset + l.char_count + tx.length() > visible_characters) { - tx = tx.substr(0, l.char_offset + l.char_count + tx.length() - visible_characters); + if (visible_characters >= 0 && remaining_characters >= 0) { + tx = tx.substr(0, remaining_characters); } + remaining_characters -= tx.length(); l.text_buf->add_string(tx, font, font_size, font_ftr, lang); text += tx; @@ -454,7 +457,8 @@ void RichTextLabel::_shape_line(ItemFrame *p_frame, int p_line, const Ref<Font> ItemImage *img = (ItemImage *)it; l.text_buf->add_object((uint64_t)it, img->image->get_size(), img->inline_align, 1); text += String::chr(0xfffc); - l.char_count += 1; + l.char_count++; + remaining_characters--; } break; case ITEM_TABLE: { ItemTable *table = static_cast<ItemTable *>(it); @@ -483,6 +487,7 @@ void RichTextLabel::_shape_line(ItemFrame *p_frame, int p_line, const Ref<Font> int cell_ch = (char_offset - (l.char_offset + l.char_count)); l.char_count += cell_ch; t_char_count += cell_ch; + remaining_characters -= cell_ch; table->columns.write[column].min_width = MAX(table->columns[column].min_width, ceil(frame->lines[i].text_buf->get_size().x)); table->columns.write[column].max_width = MAX(table->columns[column].max_width, ceil(frame->lines[i].text_buf->get_non_wraped_size().x)); @@ -847,6 +852,21 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o Point2 fx_offset = Vector2(glyphs[i].x_off, glyphs[i].y_off); RID frid = glyphs[i].font_rid; uint32_t gl = glyphs[i].index; + uint16_t gl_fl = glyphs[i].flags; + uint8_t gl_cn = glyphs[i].count; + bool cprev = false; + if (gl_cn == 0) { // Parts of the same cluster, always connected. + cprev = true; + } + if (gl_fl & TextServer::GRAPHEME_IS_RTL) { // Check if previous grapheme cluster is connected. + if (i > 0 && (glyphs[i - 1].flags & TextServer::GRAPHEME_IS_CONNECTED)) { + cprev = true; + } + } else { + if (glyphs[i].flags & TextServer::GRAPHEME_IS_CONNECTED) { + cprev = true; + } + } //Apply fx. float faded_visibility = 1.0f; @@ -875,6 +895,8 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o charfx->outline = true; charfx->font = frid; charfx->glyph_index = gl; + charfx->glyph_flags = gl_fl; + charfx->glyph_count = gl_cn; charfx->offset = fx_offset; charfx->color = font_color; @@ -890,25 +912,34 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o } else if (item_fx->type == ITEM_SHAKE) { ItemShake *item_shake = static_cast<ItemShake *>(item_fx); - uint64_t char_current_rand = item_shake->offset_random(glyphs[i].start); - uint64_t char_previous_rand = item_shake->offset_previous_random(glyphs[i].start); - uint64_t max_rand = 2147483647; - double current_offset = Math::range_lerp(char_current_rand % max_rand, 0, max_rand, 0.0f, 2.f * (float)Math_PI); - double previous_offset = Math::range_lerp(char_previous_rand % max_rand, 0, max_rand, 0.0f, 2.f * (float)Math_PI); - double n_time = (double)(item_shake->elapsed_time / (0.5f / item_shake->rate)); - n_time = (n_time > 1.0) ? 1.0 : n_time; - fx_offset += Point2(Math::lerp(Math::sin(previous_offset), Math::sin(current_offset), n_time), Math::lerp(Math::cos(previous_offset), Math::cos(current_offset), n_time)) * (float)item_shake->strength / 10.0f; + if (!cprev) { + uint64_t char_current_rand = item_shake->offset_random(glyphs[i].start); + uint64_t char_previous_rand = item_shake->offset_previous_random(glyphs[i].start); + uint64_t max_rand = 2147483647; + double current_offset = Math::range_lerp(char_current_rand % max_rand, 0, max_rand, 0.0f, 2.f * (float)Math_PI); + double previous_offset = Math::range_lerp(char_previous_rand % max_rand, 0, max_rand, 0.0f, 2.f * (float)Math_PI); + double n_time = (double)(item_shake->elapsed_time / (0.5f / item_shake->rate)); + n_time = (n_time > 1.0) ? 1.0 : n_time; + item_shake->prev_off = Point2(Math::lerp(Math::sin(previous_offset), Math::sin(current_offset), n_time), Math::lerp(Math::cos(previous_offset), Math::cos(current_offset), n_time)) * (float)item_shake->strength / 10.0f; + } + fx_offset += item_shake->prev_off; } else if (item_fx->type == ITEM_WAVE) { ItemWave *item_wave = static_cast<ItemWave *>(item_fx); - double value = Math::sin(item_wave->frequency * item_wave->elapsed_time + ((p_ofs.x + off.x) / 50)) * (item_wave->amplitude / 10.0f); - fx_offset += Point2(0, 1) * value; + if (!cprev) { + double value = Math::sin(item_wave->frequency * item_wave->elapsed_time + ((p_ofs.x + gloff.x) / 50)) * (item_wave->amplitude / 10.0f); + item_wave->prev_off = Point2(0, 1) * value; + } + fx_offset += item_wave->prev_off; } else if (item_fx->type == ITEM_TORNADO) { ItemTornado *item_tornado = static_cast<ItemTornado *>(item_fx); - double torn_x = Math::sin(item_tornado->frequency * item_tornado->elapsed_time + ((p_ofs.x + gloff.x) / 50)) * (item_tornado->radius); - double torn_y = Math::cos(item_tornado->frequency * item_tornado->elapsed_time + ((p_ofs.x + gloff.x) / 50)) * (item_tornado->radius); - fx_offset += Point2(torn_x, torn_y); + if (!cprev) { + double torn_x = Math::sin(item_tornado->frequency * item_tornado->elapsed_time + ((p_ofs.x + gloff.x) / 50)) * (item_tornado->radius); + double torn_y = Math::cos(item_tornado->frequency * item_tornado->elapsed_time + ((p_ofs.x + gloff.x) / 50)) * (item_tornado->radius); + item_tornado->prev_off = Point2(torn_x, torn_y); + } + fx_offset += item_tornado->prev_off; } else if (item_fx->type == ITEM_RAINBOW) { ItemRainbow *item_rainbow = static_cast<ItemRainbow *>(item_fx); @@ -999,6 +1030,21 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o Point2 fx_offset = Vector2(glyphs[i].x_off, glyphs[i].y_off); RID frid = glyphs[i].font_rid; uint32_t gl = glyphs[i].index; + uint16_t gl_fl = glyphs[i].flags; + uint8_t gl_cn = glyphs[i].count; + bool cprev = false; + if (gl_cn == 0) { // Parts of the same grapheme cluster, always connected. + cprev = true; + } + if (gl_fl & TextServer::GRAPHEME_IS_RTL) { // Check if previous grapheme cluster is connected. + if (i > 0 && (glyphs[i - 1].flags & TextServer::GRAPHEME_IS_CONNECTED)) { + cprev = true; + } + } else { + if (glyphs[i].flags & TextServer::GRAPHEME_IS_CONNECTED) { + cprev = true; + } + } //Apply fx. float faded_visibility = 1.0f; @@ -1027,6 +1073,8 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o charfx->outline = false; charfx->font = frid; charfx->glyph_index = gl; + charfx->glyph_flags = gl_fl; + charfx->glyph_count = gl_cn; charfx->offset = fx_offset; charfx->color = font_color; @@ -1042,25 +1090,34 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o } else if (item_fx->type == ITEM_SHAKE) { ItemShake *item_shake = static_cast<ItemShake *>(item_fx); - uint64_t char_current_rand = item_shake->offset_random(glyphs[i].start); - uint64_t char_previous_rand = item_shake->offset_previous_random(glyphs[i].start); - uint64_t max_rand = 2147483647; - double current_offset = Math::range_lerp(char_current_rand % max_rand, 0, max_rand, 0.0f, 2.f * (float)Math_PI); - double previous_offset = Math::range_lerp(char_previous_rand % max_rand, 0, max_rand, 0.0f, 2.f * (float)Math_PI); - double n_time = (double)(item_shake->elapsed_time / (0.5f / item_shake->rate)); - n_time = (n_time > 1.0) ? 1.0 : n_time; - fx_offset += Point2(Math::lerp(Math::sin(previous_offset), Math::sin(current_offset), n_time), Math::lerp(Math::cos(previous_offset), Math::cos(current_offset), n_time)) * (float)item_shake->strength / 10.0f; + if (!cprev) { + uint64_t char_current_rand = item_shake->offset_random(glyphs[i].start); + uint64_t char_previous_rand = item_shake->offset_previous_random(glyphs[i].start); + uint64_t max_rand = 2147483647; + double current_offset = Math::range_lerp(char_current_rand % max_rand, 0, max_rand, 0.0f, 2.f * (float)Math_PI); + double previous_offset = Math::range_lerp(char_previous_rand % max_rand, 0, max_rand, 0.0f, 2.f * (float)Math_PI); + double n_time = (double)(item_shake->elapsed_time / (0.5f / item_shake->rate)); + n_time = (n_time > 1.0) ? 1.0 : n_time; + item_shake->prev_off = Point2(Math::lerp(Math::sin(previous_offset), Math::sin(current_offset), n_time), Math::lerp(Math::cos(previous_offset), Math::cos(current_offset), n_time)) * (float)item_shake->strength / 10.0f; + } + fx_offset += item_shake->prev_off; } else if (item_fx->type == ITEM_WAVE) { ItemWave *item_wave = static_cast<ItemWave *>(item_fx); - double value = Math::sin(item_wave->frequency * item_wave->elapsed_time + ((p_ofs.x + off.x) / 50)) * (item_wave->amplitude / 10.0f); - fx_offset += Point2(0, 1) * value; + if (!cprev) { + double value = Math::sin(item_wave->frequency * item_wave->elapsed_time + ((p_ofs.x + off.x) / 50)) * (item_wave->amplitude / 10.0f); + item_wave->prev_off = Point2(0, 1) * value; + } + fx_offset += item_wave->prev_off; } else if (item_fx->type == ITEM_TORNADO) { ItemTornado *item_tornado = static_cast<ItemTornado *>(item_fx); - double torn_x = Math::sin(item_tornado->frequency * item_tornado->elapsed_time + ((p_ofs.x + off.x) / 50)) * (item_tornado->radius); - double torn_y = Math::cos(item_tornado->frequency * item_tornado->elapsed_time + ((p_ofs.x + off.x) / 50)) * (item_tornado->radius); - fx_offset += Point2(torn_x, torn_y); + if (!cprev) { + double torn_x = Math::sin(item_tornado->frequency * item_tornado->elapsed_time + ((p_ofs.x + off.x) / 50)) * (item_tornado->radius); + double torn_y = Math::cos(item_tornado->frequency * item_tornado->elapsed_time + ((p_ofs.x + off.x) / 50)) * (item_tornado->radius); + item_tornado->prev_off = Point2(torn_x, torn_y); + } + fx_offset += item_tornado->prev_off; } else if (item_fx->type == ITEM_RAINBOW) { ItemRainbow *item_rainbow = static_cast<ItemRainbow *>(item_fx); @@ -3855,7 +3912,12 @@ String RichTextLabel::get_parsed_text() const { String text = ""; Item *it = main; while (it) { - if (it->type == ITEM_TEXT) { + if (it->type == ITEM_DROPCAP) { + const ItemDropcap *dc = (ItemDropcap *)it; + if (dc != nullptr) { + text += dc->text; + } + } else if (it->type == ITEM_TEXT) { ItemText *t = static_cast<ItemText *>(it); text += t->text; } else if (it->type == ITEM_NEWLINE) { @@ -3926,7 +3988,6 @@ void RichTextLabel::set_percent_visible(float p_percent) { if (p_percent < 0 || p_percent >= 1) { visible_characters = -1; percent_visible = 1; - } else { visible_characters = get_total_character_count() * p_percent; percent_visible = p_percent; @@ -4160,16 +4221,20 @@ void RichTextLabel::_bind_methods() { } void RichTextLabel::set_visible_characters(int p_visible) { - visible_characters = p_visible; - if (p_visible == -1) { - percent_visible = 1; - } else { - int total_char_count = get_total_character_count(); - if (total_char_count > 0) { - percent_visible = (float)p_visible / (float)total_char_count; + if (visible_characters != p_visible) { + visible_characters = p_visible; + if (p_visible == -1) { + percent_visible = 1; + } else { + int total_char_count = get_total_character_count(); + if (total_char_count > 0) { + percent_visible = (float)p_visible / (float)total_char_count; + } } + main->first_invalid_line = 0; //invalidate ALL + _validate_line_caches(main); + update(); } - update(); } int RichTextLabel::get_visible_characters() const { @@ -4177,9 +4242,19 @@ int RichTextLabel::get_visible_characters() const { } int RichTextLabel::get_total_character_count() const { + // Note: Do not use line buffer "char_count", it includes only visible characters. int tc = 0; - for (int i = 0; i < current_frame->lines.size(); i++) { - tc += current_frame->lines[i].char_count; + Item *it = main; + while (it) { + if (it->type == ITEM_TEXT) { + ItemText *t = static_cast<ItemText *>(it); + tc += t->text.length(); + } else if (it->type == ITEM_NEWLINE) { + tc++; + } else if (it->type == ITEM_IMAGE) { + tc++; + } + it = _get_next_item(it, true); } return tc; diff --git a/scene/gui/rich_text_label.h b/scene/gui/rich_text_label.h index 806f684b67..94f02a3989 100644 --- a/scene/gui/rich_text_label.h +++ b/scene/gui/rich_text_label.h @@ -267,6 +267,7 @@ private: float rate = 0.0f; uint64_t _current_rng = 0; uint64_t _previous_rng = 0; + Vector2 prev_off; ItemShake() { type = ITEM_SHAKE; } @@ -289,6 +290,7 @@ private: struct ItemWave : public ItemFX { float frequency = 1.0f; float amplitude = 1.0f; + Vector2 prev_off; ItemWave() { type = ITEM_WAVE; } }; @@ -296,6 +298,7 @@ private: struct ItemTornado : public ItemFX { float radius = 1.0f; float frequency = 1.0f; + Vector2 prev_off; ItemTornado() { type = ITEM_TORNADO; } }; diff --git a/scene/gui/spin_box.cpp b/scene/gui/spin_box.cpp index 1074d0d8a0..0aec017649 100644 --- a/scene/gui/spin_box.cpp +++ b/scene/gui/spin_box.cpp @@ -68,6 +68,15 @@ void SpinBox::_text_submitted(const String &p_string) { _value_changed(0); } +void SpinBox::_text_changed(const String &p_string) { + int cursor_pos = line_edit->get_caret_column(); + + _text_submitted(p_string); + + // Line edit 'set_text' method resets the cursor position so we need to undo that. + line_edit->set_caret_column(cursor_pos); +} + LineEdit *SpinBox::get_line_edit() { return line_edit; } @@ -244,6 +253,24 @@ String SpinBox::get_prefix() const { return prefix; } +void SpinBox::set_update_on_text_changed(bool p_update) { + if (update_on_text_changed == p_update) { + return; + } + + update_on_text_changed = p_update; + + if (p_update) { + line_edit->connect("text_changed", callable_mp(this, &SpinBox::_text_changed), Vector<Variant>(), CONNECT_DEFERRED); + } else { + line_edit->disconnect("text_changed", callable_mp(this, &SpinBox::_text_changed)); + } +} + +bool SpinBox::get_update_on_text_changed() const { + return update_on_text_changed; +} + void SpinBox::set_editable(bool p_editable) { line_edit->set_editable(p_editable); } @@ -267,11 +294,14 @@ void SpinBox::_bind_methods() { ClassDB::bind_method(D_METHOD("get_prefix"), &SpinBox::get_prefix); ClassDB::bind_method(D_METHOD("set_editable", "editable"), &SpinBox::set_editable); ClassDB::bind_method(D_METHOD("is_editable"), &SpinBox::is_editable); + ClassDB::bind_method(D_METHOD("set_update_on_text_changed"), &SpinBox::set_update_on_text_changed); + ClassDB::bind_method(D_METHOD("get_update_on_text_changed"), &SpinBox::get_update_on_text_changed); ClassDB::bind_method(D_METHOD("apply"), &SpinBox::apply); ClassDB::bind_method(D_METHOD("get_line_edit"), &SpinBox::get_line_edit); ADD_PROPERTY(PropertyInfo(Variant::INT, "align", PROPERTY_HINT_ENUM, "Left,Center,Right,Fill"), "set_align", "get_align"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "editable"), "set_editable", "is_editable"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "update_on_text_changed"), "set_update_on_text_changed", "get_update_on_text_changed"); ADD_PROPERTY(PropertyInfo(Variant::STRING, "prefix"), "set_prefix", "get_prefix"); ADD_PROPERTY(PropertyInfo(Variant::STRING, "suffix"), "set_suffix", "get_suffix"); } @@ -284,7 +314,6 @@ SpinBox::SpinBox() { line_edit->set_mouse_filter(MOUSE_FILTER_PASS); line_edit->set_align(LineEdit::ALIGN_LEFT); - //connect("value_changed",this,"_value_changed"); line_edit->connect("text_submitted", callable_mp(this, &SpinBox::_text_submitted), Vector<Variant>(), CONNECT_DEFERRED); line_edit->connect("focus_exited", callable_mp(this, &SpinBox::_line_edit_focus_exit), Vector<Variant>(), CONNECT_DEFERRED); line_edit->connect("gui_input", callable_mp(this, &SpinBox::_line_edit_input)); diff --git a/scene/gui/spin_box.h b/scene/gui/spin_box.h index 9ec3885f1f..9828b894da 100644 --- a/scene/gui/spin_box.h +++ b/scene/gui/spin_box.h @@ -40,6 +40,7 @@ class SpinBox : public Range { LineEdit *line_edit; int last_w = 0; + bool update_on_text_changed = false; Timer *range_click_timer; void _range_click_timeout(); @@ -47,6 +48,8 @@ class SpinBox : public Range { void _text_submitted(const String &p_string); virtual void _value_changed(double) override; + void _text_changed(const String &p_string); + String prefix; String suffix; @@ -88,6 +91,9 @@ public: void set_prefix(const String &p_prefix); String get_prefix() const; + void set_update_on_text_changed(bool p_update); + bool get_update_on_text_changed() const; + void apply(); SpinBox(); diff --git a/scene/gui/tab_container.cpp b/scene/gui/tab_container.cpp index 137ce7e96f..a423dc0173 100644 --- a/scene/gui/tab_container.cpp +++ b/scene/gui/tab_container.cpp @@ -538,7 +538,6 @@ void TabContainer::_notification(int p_what) { void TabContainer::_draw_tab(Ref<StyleBox> &p_tab_style, Color &p_font_color, int p_index, float p_x) { Control *control = get_tab_control(p_index); RID canvas = get_canvas_item(); - Ref<Font> font = get_theme_font(SNAME("font")); Color font_outline_color = get_theme_color(SNAME("font_outline_color")); int outline_size = get_theme_constant(SNAME("outline_size")); int icon_text_distance = get_theme_constant(SNAME("icon_separation")); @@ -1134,7 +1133,6 @@ Size2 TabContainer::get_minimum_size() const { Ref<StyleBox> tab_unselected = get_theme_stylebox(SNAME("tab_unselected")); Ref<StyleBox> tab_selected = get_theme_stylebox(SNAME("tab_selected")); Ref<StyleBox> tab_disabled = get_theme_stylebox(SNAME("tab_disabled")); - Ref<Font> font = get_theme_font(SNAME("font")); if (tabs_visible) { ms.y += MAX(MAX(tab_unselected->get_minimum_size().y, tab_selected->get_minimum_size().y), tab_disabled->get_minimum_size().y); diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp index cef1b830df..b3b743370b 100644 --- a/scene/main/viewport.cpp +++ b/scene/main/viewport.cpp @@ -1972,35 +1972,30 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { Control *from = gui.key_focus ? gui.key_focus : nullptr; - // Keyboard focus. - Ref<InputEventKey> k = p_event; - // Need to check for mods, otherwise any combination of alt/ctrl/shift+<up/down/left/right/etc> is handled here when it shouldn't be. - bool mods = k.is_valid() && (k->is_ctrl_pressed() || k->is_alt_pressed() || k->is_shift_pressed() || k->is_meta_pressed()); - if (from && p_event->is_pressed()) { Control *next = nullptr; - if (p_event->is_action_pressed("ui_focus_next", true)) { + if (p_event->is_action_pressed("ui_focus_next", true, true)) { next = from->find_next_valid_focus(); } - if (p_event->is_action_pressed("ui_focus_prev", true)) { + if (p_event->is_action_pressed("ui_focus_prev", true, true)) { next = from->find_prev_valid_focus(); } - if (!mods && p_event->is_action_pressed("ui_up", true)) { + if (p_event->is_action_pressed("ui_up", true, true)) { next = from->_get_focus_neighbor(SIDE_TOP); } - if (!mods && p_event->is_action_pressed("ui_left", true)) { + if (p_event->is_action_pressed("ui_left", true, true)) { next = from->_get_focus_neighbor(SIDE_LEFT); } - if (!mods && p_event->is_action_pressed("ui_right", true)) { + if (p_event->is_action_pressed("ui_right", true, true)) { next = from->_get_focus_neighbor(SIDE_RIGHT); } - if (!mods && p_event->is_action_pressed("ui_down", true)) { + if (p_event->is_action_pressed("ui_down", true, true)) { next = from->_get_focus_neighbor(SIDE_BOTTOM); } diff --git a/scene/resources/canvas_item_material.cpp b/scene/resources/canvas_item_material.cpp index 7501efea9e..fa95ab0e79 100644 --- a/scene/resources/canvas_item_material.cpp +++ b/scene/resources/canvas_item_material.cpp @@ -161,7 +161,7 @@ void CanvasItemMaterial::flush_changes() { void CanvasItemMaterial::_queue_shader_change() { MutexLock lock(material_mutex); - if (!element.in_list()) { + if (is_initialized && !element.in_list()) { dirty_materials->add(&element); } } @@ -287,6 +287,7 @@ CanvasItemMaterial::CanvasItemMaterial() : set_particles_anim_loop(false); current_key.invalid_key = 1; + is_initialized = true; _queue_shader_change(); } diff --git a/scene/resources/canvas_item_material.h b/scene/resources/canvas_item_material.h index 0a813e0ae5..37cd4de136 100644 --- a/scene/resources/canvas_item_material.h +++ b/scene/resources/canvas_item_material.h @@ -102,6 +102,7 @@ private: _FORCE_INLINE_ void _queue_shader_change(); _FORCE_INLINE_ bool _is_shader_dirty() const; + bool is_initialized = false; BlendMode blend_mode = BLEND_MODE_MIX; LightMode light_mode = LIGHT_MODE_NORMAL; bool particles_animation = false; diff --git a/scene/resources/font.cpp b/scene/resources/font.cpp index 7af8e900fd..29bd56eebd 100644 --- a/scene/resources/font.cpp +++ b/scene/resources/font.cpp @@ -689,227 +689,272 @@ void FontData::remove_cache(int p_cache_index) { } Array FontData::get_size_cache_list(int p_cache_index) const { + ERR_FAIL_COND_V(p_cache_index < 0, Array()); _ensure_rid(p_cache_index); return TS->font_get_size_cache_list(cache[p_cache_index]); } void FontData::clear_size_cache(int p_cache_index) { + ERR_FAIL_COND(p_cache_index < 0); _ensure_rid(p_cache_index); TS->font_clear_size_cache(cache[p_cache_index]); } void FontData::remove_size_cache(int p_cache_index, const Vector2i &p_size) { + ERR_FAIL_COND(p_cache_index < 0); _ensure_rid(p_cache_index); TS->font_remove_size_cache(cache[p_cache_index], p_size); } void FontData::set_variation_coordinates(int p_cache_index, const Dictionary &p_variation_coordinates) { + ERR_FAIL_COND(p_cache_index < 0); _ensure_rid(p_cache_index); TS->font_set_variation_coordinates(cache[p_cache_index], p_variation_coordinates); emit_changed(); } Dictionary FontData::get_variation_coordinates(int p_cache_index) const { + ERR_FAIL_COND_V(p_cache_index < 0, Dictionary()); _ensure_rid(p_cache_index); return TS->font_get_variation_coordinates(cache[p_cache_index]); } void FontData::set_ascent(int p_cache_index, int p_size, real_t p_ascent) { + ERR_FAIL_COND(p_cache_index < 0); _ensure_rid(p_cache_index); TS->font_set_ascent(cache[p_cache_index], p_size, p_ascent); } real_t FontData::get_ascent(int p_cache_index, int p_size) const { + ERR_FAIL_COND_V(p_cache_index < 0, 0.f); _ensure_rid(p_cache_index); return TS->font_get_ascent(cache[p_cache_index], p_size); } void FontData::set_descent(int p_cache_index, int p_size, real_t p_descent) { + ERR_FAIL_COND(p_cache_index < 0); _ensure_rid(p_cache_index); TS->font_set_descent(cache[p_cache_index], p_size, p_descent); } real_t FontData::get_descent(int p_cache_index, int p_size) const { + ERR_FAIL_COND_V(p_cache_index < 0, 0.f); _ensure_rid(p_cache_index); return TS->font_get_descent(cache[p_cache_index], p_size); } void FontData::set_underline_position(int p_cache_index, int p_size, real_t p_underline_position) { + ERR_FAIL_COND(p_cache_index < 0); _ensure_rid(p_cache_index); TS->font_set_underline_position(cache[p_cache_index], p_size, p_underline_position); } real_t FontData::get_underline_position(int p_cache_index, int p_size) const { + ERR_FAIL_COND_V(p_cache_index < 0, 0.f); _ensure_rid(p_cache_index); return TS->font_get_underline_position(cache[p_cache_index], p_size); } void FontData::set_underline_thickness(int p_cache_index, int p_size, real_t p_underline_thickness) { + ERR_FAIL_COND(p_cache_index < 0); _ensure_rid(p_cache_index); TS->font_set_underline_thickness(cache[p_cache_index], p_size, p_underline_thickness); } real_t FontData::get_underline_thickness(int p_cache_index, int p_size) const { + ERR_FAIL_COND_V(p_cache_index < 0, 0.f); _ensure_rid(p_cache_index); return TS->font_get_underline_thickness(cache[p_cache_index], p_size); } void FontData::set_scale(int p_cache_index, int p_size, real_t p_scale) { + ERR_FAIL_COND(p_cache_index < 0); _ensure_rid(p_cache_index); TS->font_set_scale(cache[p_cache_index], p_size, p_scale); } real_t FontData::get_scale(int p_cache_index, int p_size) const { + ERR_FAIL_COND_V(p_cache_index < 0, 0.f); _ensure_rid(p_cache_index); return TS->font_get_scale(cache[p_cache_index], p_size); } void FontData::set_spacing(int p_cache_index, int p_size, TextServer::SpacingType p_spacing, int p_value) { + ERR_FAIL_COND(p_cache_index < 0); _ensure_rid(p_cache_index); TS->font_set_spacing(cache[p_cache_index], p_size, p_spacing, p_value); } int FontData::get_spacing(int p_cache_index, int p_size, TextServer::SpacingType p_spacing) const { + ERR_FAIL_COND_V(p_cache_index < 0, 0); _ensure_rid(p_cache_index); return TS->font_get_spacing(cache[p_cache_index], p_size, p_spacing); } int FontData::get_texture_count(int p_cache_index, const Vector2i &p_size) const { + ERR_FAIL_COND_V(p_cache_index < 0, 0); _ensure_rid(p_cache_index); return TS->font_get_texture_count(cache[p_cache_index], p_size); } void FontData::clear_textures(int p_cache_index, const Vector2i &p_size) { + ERR_FAIL_COND(p_cache_index < 0); _ensure_rid(p_cache_index); TS->font_clear_textures(cache[p_cache_index], p_size); } void FontData::remove_texture(int p_cache_index, const Vector2i &p_size, int p_texture_index) { + ERR_FAIL_COND(p_cache_index < 0); _ensure_rid(p_cache_index); TS->font_remove_texture(cache[p_cache_index], p_size, p_texture_index); } void FontData::set_texture_image(int p_cache_index, const Vector2i &p_size, int p_texture_index, const Ref<Image> &p_image) { + ERR_FAIL_COND(p_cache_index < 0); _ensure_rid(p_cache_index); TS->font_set_texture_image(cache[p_cache_index], p_size, p_texture_index, p_image); } Ref<Image> FontData::get_texture_image(int p_cache_index, const Vector2i &p_size, int p_texture_index) const { + ERR_FAIL_COND_V(p_cache_index < 0, Ref<Image>()); _ensure_rid(p_cache_index); return TS->font_get_texture_image(cache[p_cache_index], p_size, p_texture_index); } void FontData::set_texture_offsets(int p_cache_index, const Vector2i &p_size, int p_texture_index, const PackedInt32Array &p_offset) { + ERR_FAIL_COND(p_cache_index < 0); _ensure_rid(p_cache_index); TS->font_set_texture_offsets(cache[p_cache_index], p_size, p_texture_index, p_offset); } PackedInt32Array FontData::get_texture_offsets(int p_cache_index, const Vector2i &p_size, int p_texture_index) const { + ERR_FAIL_COND_V(p_cache_index < 0, PackedInt32Array()); _ensure_rid(p_cache_index); return TS->font_get_texture_offsets(cache[p_cache_index], p_size, p_texture_index); } Array FontData::get_glyph_list(int p_cache_index, const Vector2i &p_size) const { + ERR_FAIL_COND_V(p_cache_index < 0, Array()); _ensure_rid(p_cache_index); return TS->font_get_glyph_list(cache[p_cache_index], p_size); } void FontData::clear_glyphs(int p_cache_index, const Vector2i &p_size) { + ERR_FAIL_COND(p_cache_index < 0); _ensure_rid(p_cache_index); TS->font_clear_glyphs(cache[p_cache_index], p_size); } void FontData::remove_glyph(int p_cache_index, const Vector2i &p_size, int32_t p_glyph) { + ERR_FAIL_COND(p_cache_index < 0); _ensure_rid(p_cache_index); TS->font_remove_glyph(cache[p_cache_index], p_size, p_glyph); } void FontData::set_glyph_advance(int p_cache_index, int p_size, int32_t p_glyph, const Vector2 &p_advance) { + ERR_FAIL_COND(p_cache_index < 0); _ensure_rid(p_cache_index); TS->font_set_glyph_advance(cache[p_cache_index], p_size, p_glyph, p_advance); } Vector2 FontData::get_glyph_advance(int p_cache_index, int p_size, int32_t p_glyph) const { + ERR_FAIL_COND_V(p_cache_index < 0, Vector2()); _ensure_rid(p_cache_index); return TS->font_get_glyph_advance(cache[p_cache_index], p_size, p_glyph); } void FontData::set_glyph_offset(int p_cache_index, const Vector2i &p_size, int32_t p_glyph, const Vector2 &p_offset) { + ERR_FAIL_COND(p_cache_index < 0); _ensure_rid(p_cache_index); TS->font_set_glyph_offset(cache[p_cache_index], p_size, p_glyph, p_offset); } Vector2 FontData::get_glyph_offset(int p_cache_index, const Vector2i &p_size, int32_t p_glyph) const { + ERR_FAIL_COND_V(p_cache_index < 0, Vector2()); _ensure_rid(p_cache_index); return TS->font_get_glyph_offset(cache[p_cache_index], p_size, p_glyph); } void FontData::set_glyph_size(int p_cache_index, const Vector2i &p_size, int32_t p_glyph, const Vector2 &p_gl_size) { + ERR_FAIL_COND(p_cache_index < 0); _ensure_rid(p_cache_index); TS->font_set_glyph_size(cache[p_cache_index], p_size, p_glyph, p_gl_size); } Vector2 FontData::get_glyph_size(int p_cache_index, const Vector2i &p_size, int32_t p_glyph) const { + ERR_FAIL_COND_V(p_cache_index < 0, Vector2()); _ensure_rid(p_cache_index); return TS->font_get_glyph_size(cache[p_cache_index], p_size, p_glyph); } void FontData::set_glyph_uv_rect(int p_cache_index, const Vector2i &p_size, int32_t p_glyph, const Rect2 &p_uv_rect) { + ERR_FAIL_COND(p_cache_index < 0); _ensure_rid(p_cache_index); TS->font_set_glyph_uv_rect(cache[p_cache_index], p_size, p_glyph, p_uv_rect); } Rect2 FontData::get_glyph_uv_rect(int p_cache_index, const Vector2i &p_size, int32_t p_glyph) const { + ERR_FAIL_COND_V(p_cache_index < 0, Rect2()); _ensure_rid(p_cache_index); return TS->font_get_glyph_uv_rect(cache[p_cache_index], p_size, p_glyph); } void FontData::set_glyph_texture_idx(int p_cache_index, const Vector2i &p_size, int32_t p_glyph, int p_texture_idx) { + ERR_FAIL_COND(p_cache_index < 0); _ensure_rid(p_cache_index); TS->font_set_glyph_texture_idx(cache[p_cache_index], p_size, p_glyph, p_texture_idx); } int FontData::get_glyph_texture_idx(int p_cache_index, const Vector2i &p_size, int32_t p_glyph) const { + ERR_FAIL_COND_V(p_cache_index < 0, 0); _ensure_rid(p_cache_index); return TS->font_get_glyph_texture_idx(cache[p_cache_index], p_size, p_glyph); } Array FontData::get_kerning_list(int p_cache_index, int p_size) const { + ERR_FAIL_COND_V(p_cache_index < 0, Array()); _ensure_rid(p_cache_index); return TS->font_get_kerning_list(cache[p_cache_index], p_size); } void FontData::clear_kerning_map(int p_cache_index, int p_size) { + ERR_FAIL_COND(p_cache_index < 0); _ensure_rid(p_cache_index); TS->font_clear_kerning_map(cache[p_cache_index], p_size); } void FontData::remove_kerning(int p_cache_index, int p_size, const Vector2i &p_glyph_pair) { + ERR_FAIL_COND(p_cache_index < 0); _ensure_rid(p_cache_index); TS->font_remove_kerning(cache[p_cache_index], p_size, p_glyph_pair); } void FontData::set_kerning(int p_cache_index, int p_size, const Vector2i &p_glyph_pair, const Vector2 &p_kerning) { + ERR_FAIL_COND(p_cache_index < 0); _ensure_rid(p_cache_index); TS->font_set_kerning(cache[p_cache_index], p_size, p_glyph_pair, p_kerning); } Vector2 FontData::get_kerning(int p_cache_index, int p_size, const Vector2i &p_glyph_pair) const { + ERR_FAIL_COND_V(p_cache_index < 0, Vector2()); _ensure_rid(p_cache_index); return TS->font_get_kerning(cache[p_cache_index], p_size, p_glyph_pair); } void FontData::render_range(int p_cache_index, const Vector2i &p_size, char32_t p_start, char32_t p_end) { + ERR_FAIL_COND(p_cache_index < 0); _ensure_rid(p_cache_index); TS->font_render_range(cache[p_cache_index], p_size, p_start, p_end); } void FontData::render_glyph(int p_cache_index, const Vector2i &p_size, int32_t p_index) { + ERR_FAIL_COND(p_cache_index < 0); _ensure_rid(p_cache_index); TS->font_render_glyph(cache[p_cache_index], p_size, p_index); } RID FontData::get_cache_rid(int p_cache_index) const { + ERR_FAIL_COND_V(p_cache_index < 0, RID()); _ensure_rid(p_cache_index); return cache[p_cache_index]; } @@ -1008,10 +1053,8 @@ void Font::_data_changed() { void Font::_ensure_rid(int p_index) const { // Find or create cache record. - for (int i = 0; i < rids.size(); i++) { - if (!rids[i].is_valid() && data[i].is_valid()) { - rids.write[i] = data[i]->find_cache(variation_coordinates); - } + if (!rids[p_index].is_valid() && data[p_index].is_valid()) { + rids.write[p_index] = data[p_index]->find_cache(variation_coordinates); } } diff --git a/scene/resources/material.cpp b/scene/resources/material.cpp index 77a68151c4..3a6af3afb0 100644 --- a/scene/resources/material.cpp +++ b/scene/resources/material.cpp @@ -790,12 +790,10 @@ void BaseMaterial3D::_update_shader() { } } break; case BILLBOARD_FIXED_Y: { - code += " MODELVIEW_MATRIX = INV_CAMERA_MATRIX * mat4(CAMERA_MATRIX[0],WORLD_MATRIX[1],vec4(normalize(cross(CAMERA_MATRIX[0].xyz,WORLD_MATRIX[1].xyz)), 0.0),WORLD_MATRIX[3]);\n"; + code += " MODELVIEW_MATRIX = INV_CAMERA_MATRIX * mat4(vec4(normalize(cross(vec3(0.0, 1.0, 0.0), CAMERA_MATRIX[2].xyz)),0.0),vec4(0.0, 1.0, 0.0, 0.0),vec4(normalize(cross(CAMERA_MATRIX[0].xyz, vec3(0.0, 1.0, 0.0))),0.0),WORLD_MATRIX[3]);\n"; if (flags[FLAG_BILLBOARD_KEEP_SCALE]) { - code += " MODELVIEW_MATRIX = MODELVIEW_MATRIX * mat4(vec4(length(WORLD_MATRIX[0].xyz), 0.0, 0.0, 0.0),vec4(0.0, 1.0, 0.0, 0.0),vec4(0.0, 0.0, length(WORLD_MATRIX[2].xyz), 0.0), vec4(0.0, 0.0, 0.0, 1.0));\n"; - } else { - code += " MODELVIEW_MATRIX = MODELVIEW_MATRIX * mat4(vec4(1.0, 0.0, 0.0, 0.0),vec4(0.0, 1.0/length(WORLD_MATRIX[1].xyz), 0.0, 0.0), vec4(0.0, 0.0, 1.0, 0.0),vec4(0.0, 0.0, 0.0 ,1.0));\n"; + code += " MODELVIEW_MATRIX = MODELVIEW_MATRIX * mat4(vec4(length(WORLD_MATRIX[0].xyz), 0.0, 0.0, 0.0),vec4(0.0, length(WORLD_MATRIX[1].xyz), 0.0, 0.0),vec4(0.0, 0.0, length(WORLD_MATRIX[2].xyz), 0.0),vec4(0.0, 0.0, 0.0, 1.0));\n"; } } break; case BILLBOARD_PARTICLES: { @@ -1303,7 +1301,7 @@ void BaseMaterial3D::flush_changes() { void BaseMaterial3D::_queue_shader_change() { MutexLock lock(material_mutex); - if (!element.in_list()) { + if (is_initialized && !element.in_list()) { dirty_materials->add(&element); } } @@ -2779,6 +2777,7 @@ BaseMaterial3D::BaseMaterial3D(bool p_orm) : flags[FLAG_USE_TEXTURE_REPEAT] = true; + is_initialized = true; _queue_shader_change(); } diff --git a/scene/resources/material.h b/scene/resources/material.h index e2838e1399..5d7a5324ca 100644 --- a/scene/resources/material.h +++ b/scene/resources/material.h @@ -440,6 +440,7 @@ private: _FORCE_INLINE_ void _queue_shader_change(); _FORCE_INLINE_ bool _is_shader_dirty() const; + bool is_initialized = false; bool orm; Color albedo; diff --git a/scene/resources/packed_scene.cpp b/scene/resources/packed_scene.cpp index e74f759855..59faa50114 100644 --- a/scene/resources/packed_scene.cpp +++ b/scene/resources/packed_scene.cpp @@ -99,8 +99,9 @@ Node *SceneState::instantiate(GenEditState p_edit_state) const { #endif parent = nparent; } else { - // i == 0 is root node. Confirm that it doesn't have a parent defined. + // i == 0 is root node. ERR_FAIL_COND_V_MSG(n.parent != -1, nullptr, vformat("Invalid scene: root node %s cannot specify a parent node.", snames[n.name])); + ERR_FAIL_COND_V_MSG(n.type == TYPE_INSTANCED && base_scene_idx < 0, nullptr, vformat("Invalid scene: root node %s in an instance, but there's no base scene.", snames[n.name])); } Node *node = nullptr; diff --git a/scene/resources/particles_material.cpp b/scene/resources/particles_material.cpp index 0495a9e92c..d9ec0bfd69 100644 --- a/scene/resources/particles_material.cpp +++ b/scene/resources/particles_material.cpp @@ -741,7 +741,7 @@ void ParticlesMaterial::flush_changes() { void ParticlesMaterial::_queue_shader_change() { MutexLock lock(material_mutex); - if (!element.in_list()) { + if (is_initialized && !element.in_list()) { dirty_materials->add(&element); } } @@ -1533,6 +1533,7 @@ ParticlesMaterial::ParticlesMaterial() : current_key.invalid_key = 1; + is_initialized = true; _queue_shader_change(); } diff --git a/scene/resources/particles_material.h b/scene/resources/particles_material.h index 8ab26aff77..36bc456978 100644 --- a/scene/resources/particles_material.h +++ b/scene/resources/particles_material.h @@ -226,6 +226,7 @@ private: _FORCE_INLINE_ void _queue_shader_change(); _FORCE_INLINE_ bool _is_shader_dirty() const; + bool is_initialized = false; Vector3 direction; float spread; float flatness; diff --git a/servers/rendering/renderer_scene_occlusion_cull.h b/servers/rendering/renderer_scene_occlusion_cull.h index e06b3ba153..4e4b1b94db 100644 --- a/servers/rendering/renderer_scene_occlusion_cull.h +++ b/servers/rendering/renderer_scene_occlusion_cull.h @@ -76,26 +76,28 @@ public: return false; } - float min_depth; - if (p_cam_projection.is_orthogonal()) { - min_depth = (-closest_point_view.z) - p_near; - } else { - float r = -p_near / closest_point_view.z; - Vector3 closest_point_proj = Vector3(closest_point_view.x * r, closest_point_view.y * r, -p_near); - min_depth = closest_point_proj.distance_to(closest_point_view); - } + float min_depth = -closest_point_view.z * 0.95f; Vector2 rect_min = Vector2(FLT_MAX, FLT_MAX); Vector2 rect_max = Vector2(FLT_MIN, FLT_MIN); for (int j = 0; j < 8; j++) { - Vector3 c = RendererSceneOcclusionCull::HZBuffer::corners[j]; + const Vector3 &c = RendererSceneOcclusionCull::HZBuffer::corners[j]; Vector3 nc = Vector3(1, 1, 1) - c; Vector3 corner = Vector3(p_bounds[0] * c.x + p_bounds[3] * nc.x, p_bounds[1] * c.y + p_bounds[4] * nc.y, p_bounds[2] * c.z + p_bounds[5] * nc.z); Vector3 view = p_cam_inv_transform.xform(corner); - Vector3 projected = p_cam_projection.xform(view); - Vector2 normalized = Vector2(projected.x * 0.5f + 0.5f, projected.y * 0.5f + 0.5f); + Plane vp = Plane(view, 1.0); + Plane projected = p_cam_projection.xform4(vp); + + float w = projected.d; + if (w < 1.0) { + rect_min = Vector2(0.0f, 0.0f); + rect_max = Vector2(1.0f, 1.0f); + break; + } + + Vector2 normalized = Vector2(projected.normal.x / w * 0.5f + 0.5f, projected.normal.y / w * 0.5f + 0.5f); rect_min = rect_min.min(normalized); rect_max = rect_max.max(normalized); } diff --git a/servers/rendering/shader_language.cpp b/servers/rendering/shader_language.cpp index 4218214fda..89537f8b7c 100644 --- a/servers/rendering/shader_language.cpp +++ b/servers/rendering/shader_language.cpp @@ -2384,6 +2384,10 @@ bool ShaderLanguage::_validate_function_call(BlockNode *p_block, const FunctionI failed_builtin = true; bool fail = false; for (int i = 0; i < argcount; i++) { + if (p_func->arguments[i + 1]->type == Node::TYPE_ARRAY && !static_cast<const ArrayNode *>(p_func->arguments[i + 1])->is_indexed()) { + fail = true; + break; + } if (get_scalar_type(args[i]) == args[i] && p_func->arguments[i + 1]->type == Node::TYPE_CONSTANT && convert_constant(static_cast<ConstantNode *>(p_func->arguments[i + 1]), builtin_func_defs[idx].args[i])) { //all good, but needs implicit conversion later } else if (args[i] != builtin_func_defs[idx].args[i]) { @@ -2560,6 +2564,11 @@ bool ShaderLanguage::_validate_function_call(BlockNode *p_block, const FunctionI } else { arg_name = get_datatype_name(args[i]); } + if (args3[i] > 0) { + arg_name += "["; + arg_name += itos(args3[i]); + arg_name += "]"; + } err += arg_name; } err += ")"; diff --git a/servers/text_server.cpp b/servers/text_server.cpp index 2f343e8f80..4886a6f582 100644 --- a/servers/text_server.cpp +++ b/servers/text_server.cpp @@ -447,6 +447,8 @@ void TextServer::_bind_methods() { BIND_ENUM_CONSTANT(GRAPHEME_IS_TAB); BIND_ENUM_CONSTANT(GRAPHEME_IS_ELONGATION); BIND_ENUM_CONSTANT(GRAPHEME_IS_PUNCTUATION); + BIND_ENUM_CONSTANT(GRAPHEME_IS_UNDERSCORE); + BIND_ENUM_CONSTANT(GRAPHEME_IS_CONNECTED); /* Hinting */ BIND_ENUM_CONSTANT(HINTING_NONE); diff --git a/servers/text_server.h b/servers/text_server.h index 62e02e3c97..90ad9b493b 100644 --- a/servers/text_server.h +++ b/servers/text_server.h @@ -91,6 +91,7 @@ public: GRAPHEME_IS_ELONGATION = 1 << 7, // Elongation (e.g. kashida), glyph can be duplicated or truncated to fit line to width. GRAPHEME_IS_PUNCTUATION = 1 << 8, // Punctuation, except underscore (can be used as word break, but not line break or justifiction). GRAPHEME_IS_UNDERSCORE = 1 << 9, // Underscore (can be used as word break). + GRAPHEME_IS_CONNECTED = 1 << 10, // Connected to previous grapheme. }; enum Hinting { diff --git a/servers/xr/xr_interface.h b/servers/xr/xr_interface.h index 4f5d4bad10..534fa18d8a 100644 --- a/servers/xr/xr_interface.h +++ b/servers/xr/xr_interface.h @@ -110,7 +110,7 @@ public: virtual uint32_t get_view_count() = 0; /* returns the view count we need (1 is monoscopic, 2 is stereoscopic but can be more) */ virtual Transform3D get_camera_transform() = 0; /* returns the position of our camera for updating our camera node. For monoscopic this is equal to the views transform, for stereoscopic this should be an average */ virtual Transform3D get_transform_for_view(uint32_t p_view, const Transform3D &p_cam_transform) = 0; /* get each views transform */ - virtual CameraMatrix get_projection_for_view(uint32_t p_view, real_t p_aspect, real_t p_z_near, real_t p_z_far) = 0; /* get each view projection matrix */ + virtual CameraMatrix get_projection_for_view(uint32_t p_view, double p_aspect, double p_z_near, double p_z_far) = 0; /* get each view projection matrix */ // note, external color/depth/vrs texture support will be added here soon. diff --git a/servers/xr/xr_interface_extension.cpp b/servers/xr/xr_interface_extension.cpp index 6340485bde..315442fc57 100644 --- a/servers/xr/xr_interface_extension.cpp +++ b/servers/xr/xr_interface_extension.cpp @@ -186,7 +186,7 @@ Transform3D XRInterfaceExtension::get_transform_for_view(uint32_t p_view, const return Transform3D(); } -CameraMatrix XRInterfaceExtension::get_projection_for_view(uint32_t p_view, real_t p_aspect, real_t p_z_near, real_t p_z_far) { +CameraMatrix XRInterfaceExtension::get_projection_for_view(uint32_t p_view, double p_aspect, double p_z_near, double p_z_far) { CameraMatrix cm; PackedFloat64Array arr; @@ -202,7 +202,7 @@ CameraMatrix XRInterfaceExtension::get_projection_for_view(uint32_t p_view, real return CameraMatrix(); } -void XRInterfaceExtension::add_blit(RID p_render_target, Rect2 p_src_rect, Rect2i p_dst_rect, bool p_use_layer, uint32_t p_layer, bool p_apply_lens_distortion, Vector2 p_eye_center, float p_k1, float p_k2, float p_upscale, float p_aspect_ratio) { +void XRInterfaceExtension::add_blit(RID p_render_target, Rect2 p_src_rect, Rect2i p_dst_rect, bool p_use_layer, uint32_t p_layer, bool p_apply_lens_distortion, Vector2 p_eye_center, double p_k1, double p_k2, double p_upscale, double p_aspect_ratio) { BlitToScreen blit; ERR_FAIL_COND_MSG(!can_add_blits, "add_blit can only be called from an XR plugin from within _commit_views!"); diff --git a/servers/xr/xr_interface_extension.h b/servers/xr/xr_interface_extension.h index 94914a7b3f..3b7af4c0a2 100644 --- a/servers/xr/xr_interface_extension.h +++ b/servers/xr/xr_interface_extension.h @@ -83,15 +83,15 @@ public: virtual uint32_t get_view_count() override; virtual Transform3D get_camera_transform() override; virtual Transform3D get_transform_for_view(uint32_t p_view, const Transform3D &p_cam_transform) override; - virtual CameraMatrix get_projection_for_view(uint32_t p_view, real_t p_aspect, real_t p_z_near, real_t p_z_far) override; + virtual CameraMatrix get_projection_for_view(uint32_t p_view, double p_aspect, double p_z_near, double p_z_far) override; GDVIRTUAL0R(Size2, _get_render_target_size); GDVIRTUAL0R(uint32_t, _get_view_count); GDVIRTUAL0R(Transform3D, _get_camera_transform); GDVIRTUAL2R(Transform3D, _get_transform_for_view, uint32_t, const Transform3D &); - GDVIRTUAL4R(PackedFloat64Array, _get_projection_for_view, uint32_t, real_t, real_t, real_t); + GDVIRTUAL4R(PackedFloat64Array, _get_projection_for_view, uint32_t, double, double, double); - void add_blit(RID p_render_target, Rect2 p_src_rect, Rect2i p_dst_rect, bool p_use_layer = false, uint32_t p_layer = 0, bool p_apply_lens_distortion = false, Vector2 p_eye_center = Vector2(), float p_k1 = 0.0, float p_k2 = 0.0, float p_upscale = 1.0, float p_aspect_ratio = 1.0); + void add_blit(RID p_render_target, Rect2 p_src_rect, Rect2i p_dst_rect, bool p_use_layer = false, uint32_t p_layer = 0, bool p_apply_lens_distortion = false, Vector2 p_eye_center = Vector2(), double p_k1 = 0.0, double p_k2 = 0.0, double p_upscale = 1.0, double p_aspect_ratio = 1.0); virtual Vector<BlitToScreen> commit_views(RID p_render_target, const Rect2 &p_screen_rect) override; GDVIRTUAL2(_commit_views, RID, const Rect2 &); diff --git a/servers/xr_server.cpp b/servers/xr_server.cpp index c18a9f8b4e..f6e6e5953f 100644 --- a/servers/xr_server.cpp +++ b/servers/xr_server.cpp @@ -86,11 +86,11 @@ void XRServer::_bind_methods() { ADD_SIGNAL(MethodInfo("tracker_removed", PropertyInfo(Variant::STRING_NAME, "tracker_name"), PropertyInfo(Variant::INT, "type"), PropertyInfo(Variant::INT, "id"))); }; -real_t XRServer::get_world_scale() const { +double XRServer::get_world_scale() const { return world_scale; }; -void XRServer::set_world_scale(real_t p_world_scale) { +void XRServer::set_world_scale(double p_world_scale) { if (p_world_scale < 0.01) { p_world_scale = 0.01; } else if (p_world_scale > 1000.0) { diff --git a/servers/xr_server.h b/servers/xr_server.h index af183e175d..6d07263755 100644 --- a/servers/xr_server.h +++ b/servers/xr_server.h @@ -81,7 +81,7 @@ private: Ref<XRInterface> primary_interface; /* we'll identify one interface as primary, this will be used by our viewports */ - real_t world_scale; /* scale by which we multiply our tracker positions */ + double world_scale; /* scale by which we multiply our tracker positions */ Transform3D world_origin; /* our world origin point, maps a location in our virtual world to the origin point in our real world tracking volume */ Transform3D reference_frame; /* our reference frame */ @@ -107,8 +107,8 @@ public: I may remove access to this property in GDScript in favour of exposing it on the XROrigin3D node */ - real_t get_world_scale() const; - void set_world_scale(real_t p_world_scale); + double get_world_scale() const; + void set_world_scale(double p_world_scale); /* The world maps the 0,0,0 coordinate of our real world coordinate system for our tracking volume to a location in our diff --git a/tests/test_code_edit.h b/tests/test_code_edit.h index 9579d8ebef..fc8cec60af 100644 --- a/tests/test_code_edit.h +++ b/tests/test_code_edit.h @@ -808,6 +808,2261 @@ TEST_CASE("[SceneTree][CodeEdit] line gutters") { memdelete(code_edit); } +TEST_CASE("[SceneTree][CodeEdit] delimiters") { + CodeEdit *code_edit = memnew(CodeEdit); + SceneTree::get_singleton()->get_root()->add_child(code_edit); + + const Point2 OUTSIDE_DELIMETER = Point2(-1, -1); + + code_edit->clear_string_delimiters(); + code_edit->clear_comment_delimiters(); + + SUBCASE("[CodeEdit] add and remove delimiters") { + SUBCASE("[CodeEdit] add and remove string delimiters") { + /* Add a delimiter.*/ + code_edit->add_string_delimiter("\"", "\"", false); + CHECK(code_edit->has_string_delimiter("\"")); + CHECK(code_edit->get_string_delimiters().size() == 1); + + ERR_PRINT_OFF; + + /* Adding a duplicate start key is not allowed. */ + code_edit->add_string_delimiter("\"", "\'", false); + CHECK(code_edit->get_string_delimiters().size() == 1); + + /* Adding a duplicate end key is allowed. */ + code_edit->add_string_delimiter("'", "\"", false); + CHECK(code_edit->has_string_delimiter("'")); + CHECK(code_edit->get_string_delimiters().size() == 2); + + /* Both start and end keys have to be symbols. */ + code_edit->add_string_delimiter("f", "\"", false); + CHECK_FALSE(code_edit->has_string_delimiter("f")); + CHECK(code_edit->get_string_delimiters().size() == 2); + + code_edit->add_string_delimiter("f", "\"", false); + CHECK_FALSE(code_edit->has_string_delimiter("f")); + CHECK(code_edit->get_string_delimiters().size() == 2); + + code_edit->add_string_delimiter("@", "f", false); + CHECK_FALSE(code_edit->has_string_delimiter("@")); + CHECK(code_edit->get_string_delimiters().size() == 2); + + code_edit->add_string_delimiter("f", "f", false); + CHECK_FALSE(code_edit->has_string_delimiter("f")); + CHECK(code_edit->get_string_delimiters().size() == 2); + + /* Blank start keys are not allowed */ + code_edit->add_string_delimiter("", "#", false); + CHECK_FALSE(code_edit->has_string_delimiter("#")); + CHECK(code_edit->get_string_delimiters().size() == 2); + + ERR_PRINT_ON; + + /* Blank end keys are allowed. */ + code_edit->add_string_delimiter("#", "", false); + CHECK(code_edit->has_string_delimiter("#")); + CHECK(code_edit->get_string_delimiters().size() == 3); + + /* Remove a delimiter. */ + code_edit->remove_string_delimiter("#"); + CHECK_FALSE(code_edit->has_string_delimiter("#")); + CHECK(code_edit->get_string_delimiters().size() == 2); + + /* Set should override existing, and test multiline */ + TypedArray<String> delimiters; + delimiters.push_back("^^ ^^"); + + code_edit->set_string_delimiters(delimiters); + CHECK_FALSE(code_edit->has_string_delimiter("\"")); + CHECK(code_edit->has_string_delimiter("^^")); + CHECK(code_edit->get_string_delimiters().size() == 1); + + /* clear should remove all. */ + code_edit->clear_string_delimiters(); + CHECK_FALSE(code_edit->has_string_delimiter("^^")); + CHECK(code_edit->get_string_delimiters().size() == 0); + } + + SUBCASE("[CodeEdit] add and remove comment delimiters") { + /* Add a delimiter.*/ + code_edit->add_comment_delimiter("\"", "\"", false); + CHECK(code_edit->has_comment_delimiter("\"")); + CHECK(code_edit->get_comment_delimiters().size() == 1); + + ERR_PRINT_OFF; + + /* Adding a duplicate start key is not allowed. */ + code_edit->add_comment_delimiter("\"", "\'", false); + CHECK(code_edit->get_comment_delimiters().size() == 1); + + /* Adding a duplicate end key is allowed. */ + code_edit->add_comment_delimiter("'", "\"", false); + CHECK(code_edit->has_comment_delimiter("'")); + CHECK(code_edit->get_comment_delimiters().size() == 2); + + /* Both start and end keys have to be symbols. */ + code_edit->add_comment_delimiter("f", "\"", false); + CHECK_FALSE(code_edit->has_comment_delimiter("f")); + CHECK(code_edit->get_comment_delimiters().size() == 2); + + code_edit->add_comment_delimiter("f", "\"", false); + CHECK_FALSE(code_edit->has_comment_delimiter("f")); + CHECK(code_edit->get_comment_delimiters().size() == 2); + + code_edit->add_comment_delimiter("@", "f", false); + CHECK_FALSE(code_edit->has_comment_delimiter("@")); + CHECK(code_edit->get_comment_delimiters().size() == 2); + + code_edit->add_comment_delimiter("f", "f", false); + CHECK_FALSE(code_edit->has_comment_delimiter("f")); + CHECK(code_edit->get_comment_delimiters().size() == 2); + + /* Blank start keys are not allowed. */ + code_edit->add_comment_delimiter("", "#", false); + CHECK_FALSE(code_edit->has_comment_delimiter("#")); + CHECK(code_edit->get_comment_delimiters().size() == 2); + + ERR_PRINT_ON; + + /* Blank end keys are allowed. */ + code_edit->add_comment_delimiter("#", "", false); + CHECK(code_edit->has_comment_delimiter("#")); + CHECK(code_edit->get_comment_delimiters().size() == 3); + + /* Remove a delimiter. */ + code_edit->remove_comment_delimiter("#"); + CHECK_FALSE(code_edit->has_comment_delimiter("#")); + CHECK(code_edit->get_comment_delimiters().size() == 2); + + /* Set should override existing, and test multiline. */ + TypedArray<String> delimiters; + delimiters.push_back("^^ ^^"); + + code_edit->set_comment_delimiters(delimiters); + CHECK_FALSE(code_edit->has_comment_delimiter("\"")); + CHECK(code_edit->has_comment_delimiter("^^")); + CHECK(code_edit->get_comment_delimiters().size() == 1); + + /* clear should remove all. */ + code_edit->clear_comment_delimiters(); + CHECK_FALSE(code_edit->has_comment_delimiter("^^")); + CHECK(code_edit->get_comment_delimiters().size() == 0); + } + + SUBCASE("[CodeEdit] add and remove mixed delimiters") { + code_edit->add_comment_delimiter("#", "", false); + CHECK(code_edit->has_comment_delimiter("#")); + CHECK(code_edit->get_comment_delimiters().size() == 1); + + ERR_PRINT_OFF; + + /* Disallow adding a string with the same start key as comment. */ + code_edit->add_string_delimiter("#", "", false); + CHECK_FALSE(code_edit->has_string_delimiter("#")); + CHECK(code_edit->get_string_delimiters().size() == 0); + + code_edit->add_string_delimiter("\"", "\"", false); + CHECK(code_edit->has_string_delimiter("\"")); + CHECK(code_edit->get_comment_delimiters().size() == 1); + + /* Disallow adding a comment with the same start key as string. */ + code_edit->add_comment_delimiter("\"", "", false); + CHECK_FALSE(code_edit->has_comment_delimiter("\"")); + CHECK(code_edit->get_comment_delimiters().size() == 1); + + ERR_PRINT_ON; + + /* Cannot remove string with remove comment. */ + code_edit->remove_comment_delimiter("\""); + CHECK(code_edit->has_string_delimiter("\"")); + CHECK(code_edit->get_string_delimiters().size() == 1); + + /* Cannot remove comment with remove string. */ + code_edit->remove_string_delimiter("#"); + CHECK(code_edit->has_comment_delimiter("#")); + CHECK(code_edit->get_comment_delimiters().size() == 1); + + /* Clear comments leave strings. */ + code_edit->clear_comment_delimiters(); + CHECK(code_edit->has_string_delimiter("\"")); + CHECK(code_edit->get_string_delimiters().size() == 1); + + /* Clear string leave comments. */ + code_edit->add_comment_delimiter("#", "", false); + CHECK(code_edit->has_comment_delimiter("#")); + CHECK(code_edit->get_comment_delimiters().size() == 1); + + code_edit->clear_string_delimiters(); + CHECK(code_edit->has_comment_delimiter("#")); + CHECK(code_edit->get_comment_delimiters().size() == 1); + } + } + + SUBCASE("[CodeEdit] single line delimiters") { + SUBCASE("[CodeEdit] single line string delimiters") { + /* Blank end key should set lineonly to true. */ + code_edit->add_string_delimiter("#", "", false); + CHECK(code_edit->has_string_delimiter("#")); + CHECK(code_edit->get_string_delimiters().size() == 1); + + /* Insert line above, line with string then line below. */ + code_edit->insert_text_at_caret(" \n#\n "); + + /* Check line above is not in string. */ + CHECK(code_edit->is_in_string(0, 1) == -1); + CHECK(code_edit->get_delimiter_start_position(0, 1) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(0, 1) == OUTSIDE_DELIMETER); + + /* Check column before start key is not in string. */ + CHECK(code_edit->is_in_string(1, 0) == -1); + CHECK(code_edit->get_delimiter_start_position(1, 0) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(1, 0) == OUTSIDE_DELIMETER); + + /* Check column after start key is in string and start / end positions are correct. */ + CHECK(code_edit->is_in_string(1, 1) != -1); + CHECK(code_edit->get_delimiter_start_position(1, 1) == Point2(1, 1)); + CHECK(code_edit->get_delimiter_end_position(1, 1) == Point2(2, 1)); + + /* Check line after is not in string. */ + CHECK(code_edit->is_in_string(2, 1) == -1); + CHECK(code_edit->get_delimiter_start_position(2, 1) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(2, 1) == OUTSIDE_DELIMETER); + + /* Check region metadata. */ + int idx = code_edit->is_in_string(1, 1); + CHECK(code_edit->get_delimiter_start_key(idx) == "#"); + CHECK(code_edit->get_delimiter_end_key(idx) == ""); + + /* Check nested strings are handeled correctly. */ + code_edit->set_text(" \n# # \n "); + + /* Check line above is not in string. */ + CHECK(code_edit->is_in_string(0, 1) == -1); + CHECK(code_edit->get_delimiter_start_position(0, 1) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(0, 1) == OUTSIDE_DELIMETER); + + /* Check column before first start key is not in string. */ + CHECK(code_edit->is_in_string(1, 0) == -1); + CHECK(code_edit->get_delimiter_start_position(1, 0) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(1, 0) == OUTSIDE_DELIMETER); + + /* Check column after the first start key is in string and start / end positions are correct. */ + CHECK(code_edit->is_in_string(1, 1) != -1); + CHECK(code_edit->get_delimiter_start_position(1, 1) == Point2(1, 1)); + CHECK(code_edit->get_delimiter_end_position(1, 1) == Point2(6, 1)); + + /* Check column after the second start key returns data for the first. */ + CHECK(code_edit->is_in_string(1, 5) != -1); + CHECK(code_edit->get_delimiter_start_position(1, 5) == Point2(1, 1)); + CHECK(code_edit->get_delimiter_end_position(1, 5) == Point2(6, 1)); + + /* Check line after is not in string. */ + CHECK(code_edit->is_in_string(2, 1) == -1); + CHECK(code_edit->get_delimiter_start_position(2, 1) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(2, 1) == OUTSIDE_DELIMETER); + + /* Check is in string with no column retruns true if entire line is comment excluding whitespace. */ + code_edit->set_text(" \n # # \n "); + CHECK(code_edit->is_in_string(1) != -1); + + code_edit->set_text(" \n text # # \n "); + CHECK(code_edit->is_in_string(1) == -1); + + /* Removing delimiter should update. */ + code_edit->set_text(" \n # # \n "); + + code_edit->remove_string_delimiter("#"); + CHECK_FALSE(code_edit->has_string_delimiter("$")); + CHECK(code_edit->get_string_delimiters().size() == 0); + + CHECK(code_edit->is_in_string(1) == -1); + + /* Adding and clear should update. */ + code_edit->add_string_delimiter("#", "", false); + CHECK(code_edit->has_string_delimiter("#")); + CHECK(code_edit->get_string_delimiters().size() == 1); + CHECK(code_edit->is_in_string(1) != -1); + + code_edit->clear_string_delimiters(); + CHECK_FALSE(code_edit->has_string_delimiter("$")); + CHECK(code_edit->get_string_delimiters().size() == 0); + + CHECK(code_edit->is_in_string(1) == -1); + } + + SUBCASE("[CodeEdit] single line comment delimiters") { + /* Blank end key should set lineonly to true. */ + code_edit->add_comment_delimiter("#", "", false); + CHECK(code_edit->has_comment_delimiter("#")); + CHECK(code_edit->get_comment_delimiters().size() == 1); + + /* Insert line above, line with comment then line below. */ + code_edit->insert_text_at_caret(" \n#\n "); + + /* Check line above is not in comment. */ + CHECK(code_edit->is_in_comment(0, 1) == -1); + CHECK(code_edit->get_delimiter_start_position(0, 1) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(0, 1) == OUTSIDE_DELIMETER); + + /* Check column before start key is not in comment. */ + CHECK(code_edit->is_in_comment(1, 0) == -1); + CHECK(code_edit->get_delimiter_start_position(1, 0) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(1, 0) == OUTSIDE_DELIMETER); + + /* Check column after start key is in comment and start / end positions are correct. */ + CHECK(code_edit->is_in_comment(1, 1) != -1); + CHECK(code_edit->get_delimiter_start_position(1, 1) == Point2(1, 1)); + CHECK(code_edit->get_delimiter_end_position(1, 1) == Point2(2, 1)); + + /* Check line after is not in comment. */ + CHECK(code_edit->is_in_comment(2, 1) == -1); + CHECK(code_edit->get_delimiter_start_position(2, 1) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(2, 1) == OUTSIDE_DELIMETER); + + /* Check region metadata. */ + int idx = code_edit->is_in_comment(1, 1); + CHECK(code_edit->get_delimiter_start_key(idx) == "#"); + CHECK(code_edit->get_delimiter_end_key(idx) == ""); + + /* Check nested comments are handeled correctly. */ + code_edit->set_text(" \n# # \n "); + + /* Check line above is not in comment. */ + CHECK(code_edit->is_in_comment(0, 1) == -1); + CHECK(code_edit->get_delimiter_start_position(0, 1) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(0, 1) == OUTSIDE_DELIMETER); + + /* Check column before first start key is not in comment. */ + CHECK(code_edit->is_in_comment(1, 0) == -1); + CHECK(code_edit->get_delimiter_start_position(1, 0) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(1, 0) == OUTSIDE_DELIMETER); + + /* Check column after the first start key is in comment and start / end positions are correct. */ + CHECK(code_edit->is_in_comment(1, 1) != -1); + CHECK(code_edit->get_delimiter_start_position(1, 1) == Point2(1, 1)); + CHECK(code_edit->get_delimiter_end_position(1, 1) == Point2(6, 1)); + + /* Check column after the second start key returns data for the first. */ + CHECK(code_edit->is_in_comment(1, 5) != -1); + CHECK(code_edit->get_delimiter_start_position(1, 5) == Point2(1, 1)); + CHECK(code_edit->get_delimiter_end_position(1, 5) == Point2(6, 1)); + + /* Check line after is not in comment. */ + CHECK(code_edit->is_in_comment(2, 1) == -1); + CHECK(code_edit->get_delimiter_start_position(2, 1) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(2, 1) == OUTSIDE_DELIMETER); + + /* Check is in comment with no column retruns true if entire line is comment excluding whitespace. */ + code_edit->set_text(" \n # # \n "); + CHECK(code_edit->is_in_comment(1) != -1); + + code_edit->set_text(" \n text # # \n "); + CHECK(code_edit->is_in_comment(1) == -1); + + /* Removing delimiter should update. */ + code_edit->set_text(" \n # # \n "); + + code_edit->remove_comment_delimiter("#"); + CHECK_FALSE(code_edit->has_comment_delimiter("$")); + CHECK(code_edit->get_comment_delimiters().size() == 0); + + CHECK(code_edit->is_in_comment(1) == -1); + + /* Adding and clear should update. */ + code_edit->add_comment_delimiter("#", "", false); + CHECK(code_edit->has_comment_delimiter("#")); + CHECK(code_edit->get_comment_delimiters().size() == 1); + CHECK(code_edit->is_in_comment(1) != -1); + + code_edit->clear_comment_delimiters(); + CHECK_FALSE(code_edit->has_comment_delimiter("$")); + CHECK(code_edit->get_comment_delimiters().size() == 0); + + CHECK(code_edit->is_in_comment(1) == -1); + } + + SUBCASE("[CodeEdit] single line mixed delimiters") { + /* Blank end key should set lineonly to true. */ + /* Add string delimiter. */ + code_edit->add_string_delimiter("&", "", false); + CHECK(code_edit->has_string_delimiter("&")); + CHECK(code_edit->get_string_delimiters().size() == 1); + + /* Add comment delimiter. */ + code_edit->add_comment_delimiter("#", "", false); + CHECK(code_edit->has_comment_delimiter("#")); + CHECK(code_edit->get_comment_delimiters().size() == 1); + + /* Nest a string delimiter inside a comment. */ + code_edit->set_text(" \n# & \n "); + + /* Check line above is not in comment. */ + CHECK(code_edit->is_in_comment(0, 1) == -1); + CHECK(code_edit->get_delimiter_start_position(0, 1) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(0, 1) == OUTSIDE_DELIMETER); + + /* Check column before first start key is not in comment. */ + CHECK(code_edit->is_in_comment(1, 0) == -1); + CHECK(code_edit->get_delimiter_start_position(1, 0) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(1, 0) == OUTSIDE_DELIMETER); + + /* Check column after the first start key is in comment and start / end positions are correct. */ + CHECK(code_edit->is_in_comment(1, 1) != -1); + CHECK(code_edit->get_delimiter_start_position(1, 1) == Point2(1, 1)); + CHECK(code_edit->get_delimiter_end_position(1, 1) == Point2(6, 1)); + + /* Check column after the second start key returns data for the first, and does not state string. */ + CHECK(code_edit->is_in_comment(1, 5) != -1); + CHECK(code_edit->get_delimiter_start_position(1, 5) == Point2(1, 1)); + CHECK(code_edit->get_delimiter_end_position(1, 5) == Point2(6, 1)); + CHECK(code_edit->is_in_string(1, 5) == -1); + + /* Check line after is not in comment. */ + CHECK(code_edit->is_in_comment(2, 1) == -1); + CHECK(code_edit->get_delimiter_start_position(2, 1) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(2, 1) == OUTSIDE_DELIMETER); + + /* Remove the comment delimiter. */ + code_edit->remove_comment_delimiter("#"); + CHECK_FALSE(code_edit->has_comment_delimiter("$")); + CHECK(code_edit->get_comment_delimiters().size() == 0); + + /* The "first" comment region is no longer valid. */ + CHECK(code_edit->is_in_comment(1, 1) == -1); + CHECK(code_edit->get_delimiter_start_position(1, 1) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(1, 1) == OUTSIDE_DELIMETER); + + /* The "second" region as string is now valid. */ + CHECK(code_edit->is_in_string(1, 5) != -1); + CHECK(code_edit->get_delimiter_start_position(1, 5) == Point2(4, 1)); + CHECK(code_edit->get_delimiter_end_position(1, 5) == Point2(6, 1)); + } + } + + SUBCASE("[CodeEdit] multiline delimiters") { + SUBCASE("[CodeEdit] multiline string delimiters") { + code_edit->clear_string_delimiters(); + code_edit->clear_comment_delimiters(); + + /* Add string delimiter. */ + code_edit->add_string_delimiter("#", "#", false); + CHECK(code_edit->has_string_delimiter("#")); + CHECK(code_edit->get_string_delimiters().size() == 1); + + /* First test over a single line. */ + code_edit->set_text(" \n # # \n "); + + /* Check line above is not in string. */ + CHECK(code_edit->is_in_string(0, 1) == -1); + CHECK(code_edit->get_delimiter_start_position(0, 1) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(0, 1) == OUTSIDE_DELIMETER); + + /* Check column before start key is not in string. */ + CHECK(code_edit->is_in_string(1, 0) == -1); + CHECK(code_edit->get_delimiter_start_position(1, 0) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(1, 0) == OUTSIDE_DELIMETER); + + /* Check column before closing delimiter is in string. */ + CHECK(code_edit->is_in_string(1, 2) != -1); + CHECK(code_edit->get_delimiter_start_position(1, 2) == Point2(2, 1)); + CHECK(code_edit->get_delimiter_end_position(1, 2) == Point2(5, 1)); + + /* Check column after end key is not in string. */ + CHECK(code_edit->is_in_string(1, 6) == -1); + CHECK(code_edit->get_delimiter_start_position(1, 6) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(1, 6) == OUTSIDE_DELIMETER); + + /* Check line after is not in string. */ + CHECK(code_edit->is_in_string(2, 1) == -1); + CHECK(code_edit->get_delimiter_start_position(2, 1) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(2, 1) == OUTSIDE_DELIMETER); + + /* Check the region metadata. */ + int idx = code_edit->is_in_string(1, 2); + CHECK(code_edit->get_delimiter_start_key(idx) == "#"); + CHECK(code_edit->get_delimiter_end_key(idx) == "#"); + + /* Next test over a multiple blank lines. */ + code_edit->set_text(" \n # \n\n # \n "); + + /* Check line above is not in string. */ + CHECK(code_edit->is_in_string(0, 1) == -1); + CHECK(code_edit->get_delimiter_start_position(0, 1) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(0, 1) == OUTSIDE_DELIMETER); + + /* Check column before start key is not in string. */ + CHECK(code_edit->is_in_string(1, 0) == -1); + CHECK(code_edit->get_delimiter_start_position(1, 0) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(1, 0) == OUTSIDE_DELIMETER); + + /* Check column just after start key is in string. */ + CHECK(code_edit->is_in_string(1, 2) != -1); + CHECK(code_edit->get_delimiter_start_position(1, 2) == Point2(2, 1)); + CHECK(code_edit->get_delimiter_end_position(1, 2) == Point2(2, 3)); + + /* Check blank middle line. */ + CHECK(code_edit->is_in_string(2, 0) != -1); + CHECK(code_edit->get_delimiter_start_position(2, 0) == Point2(2, 1)); + CHECK(code_edit->get_delimiter_end_position(2, 0) == Point2(2, 3)); + + /* Check column just before end key is in string. */ + CHECK(code_edit->is_in_string(3, 0) != -1); + CHECK(code_edit->get_delimiter_start_position(3, 0) == Point2(2, 1)); + CHECK(code_edit->get_delimiter_end_position(3, 0) == Point2(2, 3)); + + /* Check column after end key is not in string. */ + CHECK(code_edit->is_in_string(3, 3) == -1); + CHECK(code_edit->get_delimiter_start_position(3, 3) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(3, 3) == OUTSIDE_DELIMETER); + + /* Check line after is not in string. */ + CHECK(code_edit->is_in_string(4, 1) == -1); + CHECK(code_edit->get_delimiter_start_position(4, 1) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(4, 1) == OUTSIDE_DELIMETER); + + /* Next test over a multiple non-blank lines. */ + code_edit->set_text(" \n # \n \n # \n "); + + /* Check line above is not in string. */ + CHECK(code_edit->is_in_string(0, 1) == -1); + CHECK(code_edit->get_delimiter_start_position(0, 1) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(0, 1) == OUTSIDE_DELIMETER); + + /* Check column before start key is not in string. */ + CHECK(code_edit->is_in_string(1, 0) == -1); + CHECK(code_edit->get_delimiter_start_position(1, 0) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(1, 0) == OUTSIDE_DELIMETER); + + /* Check column just after start key is in string. */ + CHECK(code_edit->is_in_string(1, 2) != -1); + CHECK(code_edit->get_delimiter_start_position(1, 2) == Point2(2, 1)); + CHECK(code_edit->get_delimiter_end_position(1, 2) == Point2(2, 3)); + + /* Check middle line. */ + CHECK(code_edit->is_in_string(2, 0) != -1); + CHECK(code_edit->get_delimiter_start_position(2, 0) == Point2(2, 1)); + CHECK(code_edit->get_delimiter_end_position(2, 0) == Point2(2, 3)); + + /* Check column just before end key is in string. */ + CHECK(code_edit->is_in_string(3, 0) != -1); + CHECK(code_edit->get_delimiter_start_position(3, 0) == Point2(2, 1)); + CHECK(code_edit->get_delimiter_end_position(3, 0) == Point2(2, 3)); + + /* Check column after end key is not in string. */ + CHECK(code_edit->is_in_string(3, 3) == -1); + CHECK(code_edit->get_delimiter_start_position(3, 3) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(3, 3) == OUTSIDE_DELIMETER); + + /* Check line after is not in string. */ + CHECK(code_edit->is_in_string(4, 1) == -1); + CHECK(code_edit->get_delimiter_start_position(4, 1) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(4, 1) == OUTSIDE_DELIMETER); + + /* check the region metadata. */ + idx = code_edit->is_in_string(1, 2); + CHECK(code_edit->get_delimiter_start_key(idx) == "#"); + CHECK(code_edit->get_delimiter_end_key(idx) == "#"); + + /* Next test nested strings. */ + code_edit->add_string_delimiter("^", "^", false); + CHECK(code_edit->has_string_delimiter("^")); + CHECK(code_edit->get_string_delimiters().size() == 2); + + code_edit->set_text(" \n # ^\n \n^ # \n "); + + /* Check line above is not in string. */ + CHECK(code_edit->is_in_string(0, 1) == -1); + CHECK(code_edit->get_delimiter_start_position(0, 1) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(0, 1) == OUTSIDE_DELIMETER); + + /* Check column before start key is not in string. */ + CHECK(code_edit->is_in_string(1, 0) == -1); + CHECK(code_edit->get_delimiter_start_position(1, 0) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(1, 0) == OUTSIDE_DELIMETER); + + /* Check column just after start key is in string. */ + CHECK(code_edit->is_in_string(1, 2) != -1); + CHECK(code_edit->get_delimiter_start_position(1, 2) == Point2(2, 1)); + CHECK(code_edit->get_delimiter_end_position(1, 2) == Point2(3, 3)); + + /* Check middle line. */ + CHECK(code_edit->is_in_string(2, 0) != -1); + CHECK(code_edit->get_delimiter_start_position(2, 0) == Point2(2, 1)); + CHECK(code_edit->get_delimiter_end_position(2, 0) == Point2(3, 3)); + + /* Check column just before end key is in string. */ + CHECK(code_edit->is_in_string(3, 0) != -1); + CHECK(code_edit->get_delimiter_start_position(3, 0) == Point2(2, 1)); + CHECK(code_edit->get_delimiter_end_position(3, 0) == Point2(3, 3)); + + /* Check column after end key is not in string. */ + CHECK(code_edit->is_in_string(3, 3) == -1); + CHECK(code_edit->get_delimiter_start_position(3, 3) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(3, 3) == OUTSIDE_DELIMETER); + + /* Check line after is not in string. */ + CHECK(code_edit->is_in_string(4, 1) == -1); + CHECK(code_edit->get_delimiter_start_position(4, 1) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(4, 1) == OUTSIDE_DELIMETER); + + /* check the region metadata. */ + idx = code_edit->is_in_string(1, 2); + CHECK(code_edit->get_delimiter_start_key(idx) == "#"); + CHECK(code_edit->get_delimiter_end_key(idx) == "#"); + + /* Next test no end key. */ + code_edit->set_text(" \n # \n "); + + /* check the region metadata. */ + idx = code_edit->is_in_string(1, 2); + CHECK(code_edit->get_delimiter_start_position(1, 2) == Point2(2, 1)); + CHECK(code_edit->get_delimiter_end_position(1, 2) == Point2(-1, -1)); + CHECK(code_edit->get_delimiter_start_key(idx) == "#"); + CHECK(code_edit->get_delimiter_end_key(idx) == "#"); + + /* Check is in string with no column retruns true if entire line is string excluding whitespace. */ + code_edit->set_text(" \n # \n\n #\n "); + CHECK(code_edit->is_in_string(1) != -1); + CHECK(code_edit->is_in_string(2) != -1); + CHECK(code_edit->is_in_string(3) != -1); + + code_edit->set_text(" \n test # \n\n # test \n "); + CHECK(code_edit->is_in_string(1) == -1); + CHECK(code_edit->is_in_string(2) != -1); + CHECK(code_edit->is_in_string(3) == -1); + } + + SUBCASE("[CodeEdit] multiline comment delimiters") { + /* Add comment delimiter. */ + code_edit->add_comment_delimiter("#", "#", false); + CHECK(code_edit->has_comment_delimiter("#")); + CHECK(code_edit->get_comment_delimiters().size() == 1); + + /* First test over a single line. */ + code_edit->set_text(" \n # # \n "); + + /* Check line above is not in comment. */ + CHECK(code_edit->is_in_comment(0, 1) == -1); + CHECK(code_edit->get_delimiter_start_position(0, 1) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(0, 1) == OUTSIDE_DELIMETER); + + /* Check column before start key is not in comment. */ + CHECK(code_edit->is_in_comment(1, 0) == -1); + CHECK(code_edit->get_delimiter_start_position(1, 0) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(1, 0) == OUTSIDE_DELIMETER); + + /* Check column before closing delimiter is in comment. */ + CHECK(code_edit->is_in_comment(1, 2) != -1); + CHECK(code_edit->get_delimiter_start_position(1, 2) == Point2(2, 1)); + CHECK(code_edit->get_delimiter_end_position(1, 2) == Point2(5, 1)); + + /* Check column after end key is not in comment. */ + CHECK(code_edit->is_in_comment(1, 6) == -1); + CHECK(code_edit->get_delimiter_start_position(1, 6) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(1, 6) == OUTSIDE_DELIMETER); + + /* Check line after is not in comment. */ + CHECK(code_edit->is_in_comment(2, 1) == -1); + CHECK(code_edit->get_delimiter_start_position(2, 1) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(2, 1) == OUTSIDE_DELIMETER); + + /* Check the region metadata. */ + int idx = code_edit->is_in_comment(1, 2); + CHECK(code_edit->get_delimiter_start_key(idx) == "#"); + CHECK(code_edit->get_delimiter_end_key(idx) == "#"); + + /* Next test over a multiple blank lines. */ + code_edit->set_text(" \n # \n\n # \n "); + + /* Check line above is not in comment. */ + CHECK(code_edit->is_in_comment(0, 1) == -1); + CHECK(code_edit->get_delimiter_start_position(0, 1) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(0, 1) == OUTSIDE_DELIMETER); + + /* Check column before start key is not in comment. */ + CHECK(code_edit->is_in_comment(1, 0) == -1); + CHECK(code_edit->get_delimiter_start_position(1, 0) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(1, 0) == OUTSIDE_DELIMETER); + + /* Check column just after start key is in comment. */ + CHECK(code_edit->is_in_comment(1, 2) != -1); + CHECK(code_edit->get_delimiter_start_position(1, 2) == Point2(2, 1)); + CHECK(code_edit->get_delimiter_end_position(1, 2) == Point2(2, 3)); + + /* Check blank middle line. */ + CHECK(code_edit->is_in_comment(2, 0) != -1); + CHECK(code_edit->get_delimiter_start_position(2, 0) == Point2(2, 1)); + CHECK(code_edit->get_delimiter_end_position(2, 0) == Point2(2, 3)); + + /* Check column just before end key is in comment. */ + CHECK(code_edit->is_in_comment(3, 0) != -1); + CHECK(code_edit->get_delimiter_start_position(3, 0) == Point2(2, 1)); + CHECK(code_edit->get_delimiter_end_position(3, 0) == Point2(2, 3)); + + /* Check column after end key is not in comment. */ + CHECK(code_edit->is_in_comment(3, 3) == -1); + CHECK(code_edit->get_delimiter_start_position(3, 3) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(3, 3) == OUTSIDE_DELIMETER); + + /* Check line after is not in comment. */ + CHECK(code_edit->is_in_comment(4, 1) == -1); + CHECK(code_edit->get_delimiter_start_position(4, 1) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(4, 1) == OUTSIDE_DELIMETER); + + /* Next test over a multiple non-blank lines. */ + code_edit->set_text(" \n # \n \n # \n "); + + /* Check line above is not in comment. */ + CHECK(code_edit->is_in_comment(0, 1) == -1); + CHECK(code_edit->get_delimiter_start_position(0, 1) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(0, 1) == OUTSIDE_DELIMETER); + + /* Check column before start key is not in comment. */ + CHECK(code_edit->is_in_comment(1, 0) == -1); + CHECK(code_edit->get_delimiter_start_position(1, 0) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(1, 0) == OUTSIDE_DELIMETER); + + /* Check column just after start key is in comment. */ + CHECK(code_edit->is_in_comment(1, 2) != -1); + CHECK(code_edit->get_delimiter_start_position(1, 2) == Point2(2, 1)); + CHECK(code_edit->get_delimiter_end_position(1, 2) == Point2(2, 3)); + + /* Check middle line. */ + CHECK(code_edit->is_in_comment(2, 0) != -1); + CHECK(code_edit->get_delimiter_start_position(2, 0) == Point2(2, 1)); + CHECK(code_edit->get_delimiter_end_position(2, 0) == Point2(2, 3)); + + /* Check column just before end key is in comment. */ + CHECK(code_edit->is_in_comment(3, 0) != -1); + CHECK(code_edit->get_delimiter_start_position(3, 0) == Point2(2, 1)); + CHECK(code_edit->get_delimiter_end_position(3, 0) == Point2(2, 3)); + + /* Check column after end key is not in comment. */ + CHECK(code_edit->is_in_comment(3, 3) == -1); + CHECK(code_edit->get_delimiter_start_position(3, 3) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(3, 3) == OUTSIDE_DELIMETER); + + /* Check line after is not in comment. */ + CHECK(code_edit->is_in_comment(4, 1) == -1); + CHECK(code_edit->get_delimiter_start_position(4, 1) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(4, 1) == OUTSIDE_DELIMETER); + + /* check the region metadata. */ + idx = code_edit->is_in_comment(1, 2); + CHECK(code_edit->get_delimiter_start_key(idx) == "#"); + CHECK(code_edit->get_delimiter_end_key(idx) == "#"); + + /* Next test nested comments. */ + code_edit->add_comment_delimiter("^", "^", false); + CHECK(code_edit->has_comment_delimiter("^")); + CHECK(code_edit->get_comment_delimiters().size() == 2); + + code_edit->set_text(" \n # ^\n \n^ # \n "); + + /* Check line above is not in comment. */ + CHECK(code_edit->is_in_comment(0, 1) == -1); + CHECK(code_edit->get_delimiter_start_position(0, 1) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(0, 1) == OUTSIDE_DELIMETER); + + /* Check column before start key is not in comment. */ + CHECK(code_edit->is_in_comment(1, 0) == -1); + CHECK(code_edit->get_delimiter_start_position(1, 0) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(1, 0) == OUTSIDE_DELIMETER); + + /* Check column just after start key is in comment. */ + CHECK(code_edit->is_in_comment(1, 2) != -1); + CHECK(code_edit->get_delimiter_start_position(1, 2) == Point2(2, 1)); + CHECK(code_edit->get_delimiter_end_position(1, 2) == Point2(3, 3)); + + /* Check middle line. */ + CHECK(code_edit->is_in_comment(2, 0) != -1); + CHECK(code_edit->get_delimiter_start_position(2, 0) == Point2(2, 1)); + CHECK(code_edit->get_delimiter_end_position(2, 0) == Point2(3, 3)); + + /* Check column just before end key is in comment. */ + CHECK(code_edit->is_in_comment(3, 0) != -1); + CHECK(code_edit->get_delimiter_start_position(3, 0) == Point2(2, 1)); + CHECK(code_edit->get_delimiter_end_position(3, 0) == Point2(3, 3)); + + /* Check column after end key is not in comment. */ + CHECK(code_edit->is_in_comment(3, 3) == -1); + CHECK(code_edit->get_delimiter_start_position(3, 3) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(3, 3) == OUTSIDE_DELIMETER); + + /* Check line after is not in comment. */ + CHECK(code_edit->is_in_comment(4, 1) == -1); + CHECK(code_edit->get_delimiter_start_position(4, 1) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(4, 1) == OUTSIDE_DELIMETER); + + /* check the region metadata. */ + idx = code_edit->is_in_comment(1, 2); + CHECK(code_edit->get_delimiter_start_key(idx) == "#"); + CHECK(code_edit->get_delimiter_end_key(idx) == "#"); + + /* Next test no end key. */ + code_edit->set_text(" \n # \n "); + + /* check the region metadata. */ + idx = code_edit->is_in_comment(1, 2); + CHECK(code_edit->get_delimiter_start_position(1, 2) == Point2(2, 1)); + CHECK(code_edit->get_delimiter_end_position(1, 2) == Point2(-1, -1)); + CHECK(code_edit->get_delimiter_start_key(idx) == "#"); + CHECK(code_edit->get_delimiter_end_key(idx) == "#"); + + /* Check is in comment with no column retruns true if entire line is comment excluding whitespace. */ + code_edit->set_text(" \n # \n\n #\n "); + CHECK(code_edit->is_in_comment(1) != -1); + CHECK(code_edit->is_in_comment(2) != -1); + CHECK(code_edit->is_in_comment(3) != -1); + + code_edit->set_text(" \n test # \n\n # test \n "); + CHECK(code_edit->is_in_comment(1) == -1); + CHECK(code_edit->is_in_comment(2) != -1); + CHECK(code_edit->is_in_comment(3) == -1); + } + + SUBCASE("[CodeEdit] multiline mixed delimiters") { + /* Add comment delimiter. */ + code_edit->add_comment_delimiter("#", "#", false); + CHECK(code_edit->has_comment_delimiter("#")); + CHECK(code_edit->get_comment_delimiters().size() == 1); + + /* Add string delimiter. */ + code_edit->add_string_delimiter("^", "^", false); + CHECK(code_edit->has_string_delimiter("^")); + CHECK(code_edit->get_string_delimiters().size() == 1); + + /* Nest a string inside a comment. */ + code_edit->set_text(" \n # ^\n \n^ # \n "); + + /* Check line above is not in comment. */ + CHECK(code_edit->is_in_comment(0, 1) == -1); + CHECK(code_edit->get_delimiter_start_position(0, 1) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(0, 1) == OUTSIDE_DELIMETER); + + /* Check column before start key is not in comment. */ + CHECK(code_edit->is_in_comment(1, 0) == -1); + CHECK(code_edit->get_delimiter_start_position(1, 0) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(1, 0) == OUTSIDE_DELIMETER); + + /* Check column just after start key is in comment. */ + CHECK(code_edit->is_in_comment(1, 2) != -1); + CHECK(code_edit->get_delimiter_start_position(1, 2) == Point2(2, 1)); + CHECK(code_edit->get_delimiter_end_position(1, 2) == Point2(3, 3)); + + /* Check middle line. */ + CHECK(code_edit->is_in_comment(2, 0) != -1); + CHECK(code_edit->get_delimiter_start_position(2, 0) == Point2(2, 1)); + CHECK(code_edit->get_delimiter_end_position(2, 0) == Point2(3, 3)); + + /* Check column just before end key is in comment. */ + CHECK(code_edit->is_in_comment(3, 0) != -1); + CHECK(code_edit->get_delimiter_start_position(3, 0) == Point2(2, 1)); + CHECK(code_edit->get_delimiter_end_position(3, 0) == Point2(3, 3)); + + /* Check column after end key is not in comment. */ + CHECK(code_edit->is_in_comment(3, 3) == -1); + CHECK(code_edit->get_delimiter_start_position(3, 3) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(3, 3) == OUTSIDE_DELIMETER); + + /* Check line after is not in comment. */ + CHECK(code_edit->is_in_comment(4, 1) == -1); + CHECK(code_edit->get_delimiter_start_position(4, 1) == OUTSIDE_DELIMETER); + CHECK(code_edit->get_delimiter_end_position(4, 1) == OUTSIDE_DELIMETER); + + /* check the region metadata. */ + int idx = code_edit->is_in_comment(1, 2); + CHECK(code_edit->get_delimiter_start_key(idx) == "#"); + CHECK(code_edit->get_delimiter_end_key(idx) == "#"); + + /* Check is in comment with no column retruns true as inner delimiter should not be counted. */ + CHECK(code_edit->is_in_comment(1) != -1); + CHECK(code_edit->is_in_comment(2) != -1); + CHECK(code_edit->is_in_comment(3) != -1); + } + } + + memdelete(code_edit); +} + +TEST_CASE("[SceneTree][CodeEdit] indent") { + CodeEdit *code_edit = memnew(CodeEdit); + SceneTree::get_singleton()->get_root()->add_child(code_edit); + + SUBCASE("[CodeEdit] indent settings") { + code_edit->set_indent_size(10); + CHECK(code_edit->get_indent_size() == 10); + CHECK(code_edit->get_tab_size() == 10); + + code_edit->set_auto_indent_enabled(false); + CHECK_FALSE(code_edit->is_auto_indent_enabled()); + + code_edit->set_auto_indent_enabled(true); + CHECK(code_edit->is_auto_indent_enabled()); + + code_edit->set_indent_using_spaces(false); + CHECK_FALSE(code_edit->is_indent_using_spaces()); + + code_edit->set_indent_using_spaces(true); + CHECK(code_edit->is_indent_using_spaces()); + + /* Only the first char is registered. */ + TypedArray<String> auto_indent_prefixes; + auto_indent_prefixes.push_back("::"); + auto_indent_prefixes.push_back("s"); + auto_indent_prefixes.push_back("1"); + code_edit->set_auto_indent_prefixes(auto_indent_prefixes); + + auto_indent_prefixes = code_edit->get_auto_indent_prefixes(); + CHECK(auto_indent_prefixes.has(":")); + CHECK(auto_indent_prefixes.has("s")); + CHECK(auto_indent_prefixes.has("1")); + } + + SUBCASE("[CodeEdit] indent tabs") { + code_edit->set_indent_size(4); + code_edit->set_auto_indent_enabled(true); + code_edit->set_indent_using_spaces(false); + + /* Do nothing if not editable. */ + code_edit->set_editable(false); + + code_edit->do_indent(); + CHECK(code_edit->get_line(0).is_empty()); + + code_edit->indent_lines(); + CHECK(code_edit->get_line(0).is_empty()); + + code_edit->set_editable(true); + + /* Simple indent. */ + code_edit->do_indent(); + CHECK(code_edit->get_line(0) == "\t"); + + /* Check input action. */ + SEND_GUI_ACTION(code_edit, "ui_text_indent"); + CHECK(code_edit->get_line(0) == "\t\t"); + + /* Insert in place. */ + code_edit->set_text(""); + code_edit->insert_text_at_caret("test"); + code_edit->do_indent(); + CHECK(code_edit->get_line(0) == "test\t"); + + /* Indent lines does entire line and works without selection. */ + code_edit->set_text(""); + code_edit->insert_text_at_caret("test"); + code_edit->indent_lines(); + CHECK(code_edit->get_line(0) == "\ttest"); + + /* Selection does entire line. */ + code_edit->set_text("test"); + code_edit->select_all(); + code_edit->do_indent(); + CHECK(code_edit->get_line(0) == "\ttest"); + + /* Handles multiple lines. */ + code_edit->set_text("test\ntext"); + code_edit->select_all(); + code_edit->do_indent(); + CHECK(code_edit->get_line(0) == "\ttest"); + CHECK(code_edit->get_line(1) == "\ttext"); + + /* Do not indent line if last col is zero. */ + code_edit->set_text("test\ntext"); + code_edit->select(0, 0, 1, 0); + code_edit->do_indent(); + CHECK(code_edit->get_line(0) == "\ttest"); + CHECK(code_edit->get_line(1) == "text"); + + /* Indent even if last column of first line. */ + code_edit->set_text("test\ntext"); + code_edit->select(0, 4, 1, 0); + code_edit->do_indent(); + CHECK(code_edit->get_line(0) == "\ttest"); + CHECK(code_edit->get_line(1) == "text"); + + /* Check selection is adjusted. */ + code_edit->set_text("test"); + code_edit->select(0, 1, 0, 2); + code_edit->do_indent(); + CHECK(code_edit->get_selection_from_column() == 2); + CHECK(code_edit->get_selection_to_column() == 3); + CHECK(code_edit->get_line(0) == "\ttest"); + code_edit->undo(); + } + + SUBCASE("[CodeEdit] indent spaces") { + code_edit->set_indent_size(4); + code_edit->set_auto_indent_enabled(true); + code_edit->set_indent_using_spaces(true); + + /* Do nothing if not editable. */ + code_edit->set_editable(false); + + code_edit->do_indent(); + CHECK(code_edit->get_line(0).is_empty()); + + code_edit->indent_lines(); + CHECK(code_edit->get_line(0).is_empty()); + + code_edit->set_editable(true); + + /* Simple indent. */ + code_edit->do_indent(); + CHECK(code_edit->get_line(0) == " "); + + /* Check input action. */ + SEND_GUI_ACTION(code_edit, "ui_text_indent"); + CHECK(code_edit->get_line(0) == " "); + + /* Insert in place. */ + code_edit->set_text(""); + code_edit->insert_text_at_caret("test"); + code_edit->do_indent(); + CHECK(code_edit->get_line(0) == "test "); + + /* Indent lines does entire line and works without selection. */ + code_edit->set_text(""); + code_edit->insert_text_at_caret("test"); + code_edit->indent_lines(); + CHECK(code_edit->get_line(0) == " test"); + + /* Selection does entire line. */ + code_edit->set_text("test"); + code_edit->select_all(); + code_edit->do_indent(); + CHECK(code_edit->get_line(0) == " test"); + + /* single indent only add required spaces. */ + code_edit->set_text(" test"); + code_edit->select_all(); + code_edit->do_indent(); + CHECK(code_edit->get_line(0) == " test"); + + /* Handles multiple lines. */ + code_edit->set_text("test\ntext"); + code_edit->select_all(); + code_edit->do_indent(); + CHECK(code_edit->get_line(0) == " test"); + CHECK(code_edit->get_line(1) == " text"); + + /* Do not indent line if last col is zero. */ + code_edit->set_text("test\ntext"); + code_edit->select(0, 0, 1, 0); + code_edit->do_indent(); + CHECK(code_edit->get_line(0) == " test"); + CHECK(code_edit->get_line(1) == "text"); + + /* Indent even if last column of first line. */ + code_edit->set_text("test\ntext"); + code_edit->select(0, 4, 1, 0); + code_edit->do_indent(); + CHECK(code_edit->get_line(0) == " test"); + CHECK(code_edit->get_line(1) == "text"); + + /* Check selection is adjusted. */ + code_edit->set_text("test"); + code_edit->select(0, 1, 0, 2); + code_edit->do_indent(); + CHECK(code_edit->get_selection_from_column() == 5); + CHECK(code_edit->get_selection_to_column() == 6); + CHECK(code_edit->get_line(0) == " test"); + } + + SUBCASE("[CodeEdit] unindent tabs") { + code_edit->set_indent_size(4); + code_edit->set_auto_indent_enabled(true); + code_edit->set_indent_using_spaces(false); + + /* Do nothing if not editable. */ + code_edit->set_text("\t"); + + code_edit->set_editable(false); + + code_edit->do_unindent(); + CHECK(code_edit->get_line(0) == "\t"); + + code_edit->unindent_lines(); + CHECK(code_edit->get_line(0) == "\t"); + + code_edit->set_editable(true); + + /* Simple unindent. */ + code_edit->do_unindent(); + CHECK(code_edit->get_line(0) == ""); + + /* Should inindent inplace. */ + code_edit->set_text(""); + code_edit->insert_text_at_caret("test\t"); + + code_edit->do_unindent(); + CHECK(code_edit->get_line(0) == "test"); + + /* Backspace does a simple unindent. */ + code_edit->set_text(""); + code_edit->insert_text_at_caret("\t"); + code_edit->backspace(); + CHECK(code_edit->get_line(0) == ""); + + /* Unindent lines does entire line and works without selection. */ + code_edit->set_text(""); + code_edit->insert_text_at_caret("\ttest"); + code_edit->unindent_lines(); + CHECK(code_edit->get_line(0) == "test"); + + /* Caret on col zero unindent line. */ + code_edit->set_text("\t\ttest"); + code_edit->do_unindent(); + CHECK(code_edit->get_line(0) == "\ttest"); + + /* Check input action. */ + code_edit->set_text("\t\ttest"); + SEND_GUI_ACTION(code_edit, "ui_text_dedent"); + CHECK(code_edit->get_line(0) == "\ttest"); + + /* Selection does entire line. */ + code_edit->set_text("\t\ttest"); + code_edit->select_all(); + code_edit->do_unindent(); + CHECK(code_edit->get_line(0) == "\ttest"); + + /* Handles multiple lines. */ + code_edit->set_text("\ttest\n\ttext"); + code_edit->select_all(); + code_edit->do_unindent(); + CHECK(code_edit->get_line(0) == "test"); + CHECK(code_edit->get_line(1) == "text"); + + /* Do not unindent line if last col is zero. */ + code_edit->set_text("\ttest\n\ttext"); + code_edit->select(0, 0, 1, 0); + code_edit->do_unindent(); + CHECK(code_edit->get_line(0) == "test"); + CHECK(code_edit->get_line(1) == "\ttext"); + + /* Unindent even if last column of first line. */ + code_edit->set_text("\ttest\n\ttext"); + code_edit->select(0, 5, 1, 1); + code_edit->do_unindent(); + CHECK(code_edit->get_line(0) == "test"); + CHECK(code_edit->get_line(1) == "text"); + + /* Check selection is adjusted. */ + code_edit->set_text("\ttest"); + code_edit->select(0, 1, 0, 2); + code_edit->do_unindent(); + CHECK(code_edit->get_selection_from_column() == 0); + CHECK(code_edit->get_selection_to_column() == 1); + CHECK(code_edit->get_line(0) == "test"); + } + + SUBCASE("[CodeEdit] unindent spaces") { + code_edit->set_indent_size(4); + code_edit->set_auto_indent_enabled(true); + code_edit->set_indent_using_spaces(true); + + /* Do nothing if not editable. */ + code_edit->set_text(" "); + + code_edit->set_editable(false); + + code_edit->do_unindent(); + CHECK(code_edit->get_line(0) == " "); + + code_edit->unindent_lines(); + CHECK(code_edit->get_line(0) == " "); + + code_edit->set_editable(true); + + /* Simple unindent. */ + code_edit->do_unindent(); + CHECK(code_edit->get_line(0) == ""); + + /* Should inindent inplace. */ + code_edit->set_text(""); + code_edit->insert_text_at_caret("test "); + + code_edit->do_unindent(); + CHECK(code_edit->get_line(0) == "test"); + + /* Backspace does a simple unindent. */ + code_edit->set_text(""); + code_edit->insert_text_at_caret(" "); + code_edit->backspace(); + CHECK(code_edit->get_line(0) == ""); + + /* Backspace with letter. */ + code_edit->set_text(""); + code_edit->insert_text_at_caret(" a"); + code_edit->backspace(); + CHECK(code_edit->get_line(0) == " "); + + /* Unindent lines does entire line and works without selection. */ + code_edit->set_text(""); + code_edit->insert_text_at_caret(" test"); + code_edit->unindent_lines(); + CHECK(code_edit->get_line(0) == "test"); + + /* Caret on col zero unindent line. */ + code_edit->set_text(" test"); + code_edit->do_unindent(); + CHECK(code_edit->get_line(0) == " test"); + + /* Only as far as needed */ + code_edit->set_text(" test"); + code_edit->do_unindent(); + CHECK(code_edit->get_line(0) == " test"); + + /* Check input action. */ + code_edit->set_text(" test"); + SEND_GUI_ACTION(code_edit, "ui_text_dedent"); + CHECK(code_edit->get_line(0) == " test"); + + /* Selection does entire line. */ + code_edit->set_text(" test"); + code_edit->select_all(); + code_edit->do_unindent(); + CHECK(code_edit->get_line(0) == " test"); + + /* Handles multiple lines. */ + code_edit->set_text(" test\n text"); + code_edit->select_all(); + code_edit->do_unindent(); + CHECK(code_edit->get_line(0) == "test"); + CHECK(code_edit->get_line(1) == "text"); + + /* Do not unindent line if last col is zero. */ + code_edit->set_text(" test\n text"); + code_edit->select(0, 0, 1, 0); + code_edit->do_unindent(); + CHECK(code_edit->get_line(0) == "test"); + CHECK(code_edit->get_line(1) == " text"); + + /* Unindent even if last column of first line. */ + code_edit->set_text(" test\n text"); + code_edit->select(0, 5, 1, 1); + code_edit->do_unindent(); + CHECK(code_edit->get_line(0) == "test"); + CHECK(code_edit->get_line(1) == "text"); + + /* Check selection is adjusted. */ + code_edit->set_text(" test"); + code_edit->select(0, 4, 0, 5); + code_edit->do_unindent(); + CHECK(code_edit->get_selection_from_column() == 0); + CHECK(code_edit->get_selection_to_column() == 1); + CHECK(code_edit->get_line(0) == "test"); + } + + SUBCASE("[CodeEdit] auto indent") { + SUBCASE("[CodeEdit] auto indent tabs") { + code_edit->set_indent_size(4); + code_edit->set_auto_indent_enabled(true); + code_edit->set_indent_using_spaces(false); + + /* Simple indent on new line. */ + code_edit->set_text(""); + code_edit->insert_text_at_caret("test:"); + SEND_GUI_ACTION(code_edit, "ui_text_newline"); + CHECK(code_edit->get_line(0) == "test:"); + CHECK(code_edit->get_line(1) == "\t"); + + /* new blank line should still indent. */ + code_edit->set_text(""); + code_edit->insert_text_at_caret("test:"); + SEND_GUI_ACTION(code_edit, "ui_text_newline_blank"); + CHECK(code_edit->get_line(0) == "test:"); + CHECK(code_edit->get_line(1) == "\t"); + + /* new line above should not indent. */ + code_edit->set_text(""); + code_edit->insert_text_at_caret("test:"); + SEND_GUI_ACTION(code_edit, "ui_text_newline_above"); + CHECK(code_edit->get_line(0) == ""); + CHECK(code_edit->get_line(1) == "test:"); + + /* Whitespace between symbol and caret is okay. */ + code_edit->set_text(""); + code_edit->insert_text_at_caret("test: "); + SEND_GUI_ACTION(code_edit, "ui_text_newline"); + CHECK(code_edit->get_line(0) == "test: "); + CHECK(code_edit->get_line(1) == "\t"); + + /* Comment between symbol and caret is okay. */ + code_edit->add_comment_delimiter("#", ""); + code_edit->set_text(""); + code_edit->insert_text_at_caret("test: # comment"); + SEND_GUI_ACTION(code_edit, "ui_text_newline"); + CHECK(code_edit->get_line(0) == "test: # comment"); + CHECK(code_edit->get_line(1) == "\t"); + code_edit->remove_comment_delimiter("#"); + + /* Strings between symbol and caret are not okay. */ + code_edit->add_string_delimiter("#", ""); + code_edit->set_text(""); + code_edit->insert_text_at_caret("test: # string"); + SEND_GUI_ACTION(code_edit, "ui_text_newline"); + CHECK(code_edit->get_line(0) == "test: # string"); + CHECK(code_edit->get_line(1) == ""); + code_edit->remove_comment_delimiter("#"); + + /* If between brace pairs an extra line is added. */ + code_edit->set_text(""); + code_edit->insert_text_at_caret("test{}"); + code_edit->set_caret_column(5); + SEND_GUI_ACTION(code_edit, "ui_text_newline"); + CHECK(code_edit->get_line(0) == "test{"); + CHECK(code_edit->get_line(1) == "\t"); + CHECK(code_edit->get_line(2) == "}"); + + /* Except when we are going above. */ + code_edit->set_text(""); + code_edit->insert_text_at_caret("test{}"); + code_edit->set_caret_column(5); + SEND_GUI_ACTION(code_edit, "ui_text_newline_above"); + CHECK(code_edit->get_line(0) == ""); + CHECK(code_edit->get_line(1) == "test{}"); + + /* or below. */ + code_edit->set_text(""); + code_edit->insert_text_at_caret("test{}"); + code_edit->set_caret_column(5); + SEND_GUI_ACTION(code_edit, "ui_text_newline_blank"); + CHECK(code_edit->get_line(0) == "test{}"); + CHECK(code_edit->get_line(1) == ""); + } + + SUBCASE("[CodeEdit] auto indent spaces") { + code_edit->set_indent_size(4); + code_edit->set_auto_indent_enabled(true); + code_edit->set_indent_using_spaces(true); + + /* Simple indent on new line. */ + code_edit->set_text(""); + code_edit->insert_text_at_caret("test:"); + SEND_GUI_ACTION(code_edit, "ui_text_newline"); + CHECK(code_edit->get_line(0) == "test:"); + CHECK(code_edit->get_line(1) == " "); + + /* new blank line should still indent. */ + code_edit->set_text(""); + code_edit->insert_text_at_caret("test:"); + SEND_GUI_ACTION(code_edit, "ui_text_newline_blank"); + CHECK(code_edit->get_line(0) == "test:"); + CHECK(code_edit->get_line(1) == " "); + + /* new line above should not indent. */ + code_edit->set_text(""); + code_edit->insert_text_at_caret("test:"); + SEND_GUI_ACTION(code_edit, "ui_text_newline_above"); + CHECK(code_edit->get_line(0) == ""); + CHECK(code_edit->get_line(1) == "test:"); + + /* Whitespace between symbol and caret is okay. */ + code_edit->set_text(""); + code_edit->insert_text_at_caret("test: "); + SEND_GUI_ACTION(code_edit, "ui_text_newline"); + CHECK(code_edit->get_line(0) == "test: "); + CHECK(code_edit->get_line(1) == " "); + + /* Comment between symbol and caret is okay. */ + code_edit->add_comment_delimiter("#", ""); + code_edit->set_text(""); + code_edit->insert_text_at_caret("test: # comment"); + SEND_GUI_ACTION(code_edit, "ui_text_newline"); + CHECK(code_edit->get_line(0) == "test: # comment"); + CHECK(code_edit->get_line(1) == " "); + code_edit->remove_comment_delimiter("#"); + + /* Strings between symbol and caret are not okay. */ + code_edit->add_string_delimiter("#", ""); + code_edit->set_text(""); + code_edit->insert_text_at_caret("test: # string"); + SEND_GUI_ACTION(code_edit, "ui_text_newline"); + CHECK(code_edit->get_line(0) == "test: # string"); + CHECK(code_edit->get_line(1) == ""); + code_edit->remove_comment_delimiter("#"); + + /* If between brace pairs an extra line is added. */ + code_edit->set_text(""); + code_edit->insert_text_at_caret("test{}"); + code_edit->set_caret_column(5); + SEND_GUI_ACTION(code_edit, "ui_text_newline"); + CHECK(code_edit->get_line(0) == "test{"); + CHECK(code_edit->get_line(1) == " "); + CHECK(code_edit->get_line(2) == "}"); + + /* Except when we are going above. */ + code_edit->set_text(""); + code_edit->insert_text_at_caret("test{}"); + code_edit->set_caret_column(5); + SEND_GUI_ACTION(code_edit, "ui_text_newline_above"); + CHECK(code_edit->get_line(0) == ""); + CHECK(code_edit->get_line(1) == "test{}"); + + /* or below. */ + code_edit->set_text(""); + code_edit->insert_text_at_caret("test{}"); + code_edit->set_caret_column(5); + SEND_GUI_ACTION(code_edit, "ui_text_newline_blank"); + CHECK(code_edit->get_line(0) == "test{}"); + CHECK(code_edit->get_line(1) == ""); + } + } + + memdelete(code_edit); +} + +TEST_CASE("[SceneTree][CodeEdit] folding") { + CodeEdit *code_edit = memnew(CodeEdit); + SceneTree::get_singleton()->get_root()->add_child(code_edit); + + SUBCASE("[CodeEdit] folding settings") { + code_edit->set_line_folding_enabled(true); + CHECK(code_edit->is_line_folding_enabled()); + + code_edit->set_line_folding_enabled(false); + CHECK_FALSE(code_edit->is_line_folding_enabled()); + } + + SUBCASE("[CodeEdit] folding") { + code_edit->set_line_folding_enabled(true); + + // No indent. + code_edit->set_text("line1\nline2\nline3"); + for (int i = 0; i < 2; i++) { + CHECK_FALSE(code_edit->can_fold_line(i)); + code_edit->fold_line(i); + CHECK_FALSE(code_edit->is_line_folded(i)); + } + CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1); + + // Indented lines. + code_edit->set_text("\tline1\n\tline2\n\tline3"); + for (int i = 0; i < 2; i++) { + CHECK_FALSE(code_edit->can_fold_line(i)); + code_edit->fold_line(i); + CHECK_FALSE(code_edit->is_line_folded(i)); + } + CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1); + + // Indent. + code_edit->set_text("line1\n\tline2\nline3"); + CHECK(code_edit->can_fold_line(0)); + for (int i = 1; i < 2; i++) { + CHECK_FALSE(code_edit->can_fold_line(i)); + code_edit->fold_line(i); + CHECK_FALSE(code_edit->is_line_folded(i)); + } + code_edit->fold_line(0); + CHECK(code_edit->is_line_folded(0)); + CHECK_FALSE(code_edit->is_line_folded(1)); + CHECK_FALSE(code_edit->is_line_folded(2)); + CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 2); + + // Nested indents. + code_edit->set_text("line1\n\tline2\n\t\tline3\nline4"); + CHECK(code_edit->can_fold_line(0)); + CHECK(code_edit->can_fold_line(1)); + for (int i = 2; i < 3; i++) { + CHECK_FALSE(code_edit->can_fold_line(i)); + code_edit->fold_line(i); + CHECK_FALSE(code_edit->is_line_folded(i)); + } + code_edit->fold_line(1); + CHECK_FALSE(code_edit->is_line_folded(0)); + CHECK(code_edit->is_line_folded(1)); + CHECK_FALSE(code_edit->is_line_folded(2)); + CHECK_FALSE(code_edit->is_line_folded(3)); + CHECK(code_edit->get_next_visible_line_offset_from(2, 1) == 2); + + code_edit->fold_line(0); + CHECK(code_edit->is_line_folded(0)); + CHECK_FALSE(code_edit->is_line_folded(1)); + CHECK_FALSE(code_edit->is_line_folded(2)); + CHECK_FALSE(code_edit->is_line_folded(3)); + CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 3); + + // Check metadata. + CHECK(code_edit->get_folded_lines().size() == 1); + CHECK((int)code_edit->get_folded_lines()[0] == 0); + + // Cannot unfold nested. + code_edit->unfold_line(1); + CHECK_FALSE(code_edit->is_line_folded(0)); + CHECK_FALSE(code_edit->is_line_folded(1)); + CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1); + + // (un)Fold all / toggle. + code_edit->unfold_line(0); + CHECK_FALSE(code_edit->is_line_folded(0)); + CHECK_FALSE(code_edit->is_line_folded(1)); + CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1); + + // Check metadata. + CHECK(code_edit->get_folded_lines().size() == 0); + + code_edit->fold_all_lines(); + CHECK(code_edit->is_line_folded(0)); + CHECK_FALSE(code_edit->is_line_folded(1)); + CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 3); + + code_edit->unfold_all_lines(); + CHECK_FALSE(code_edit->is_line_folded(0)); + CHECK_FALSE(code_edit->is_line_folded(1)); + CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1); + + code_edit->toggle_foldable_line(0); + CHECK(code_edit->is_line_folded(0)); + CHECK_FALSE(code_edit->is_line_folded(1)); + CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 3); + + // Can also unfold from hidden line. + code_edit->unfold_line(1); + CHECK_FALSE(code_edit->is_line_folded(0)); + CHECK_FALSE(code_edit->is_line_folded(1)); + CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1); + + // Blank lines. + code_edit->set_text("line1\n\tline2\n\n\n\ttest\n\nline3"); + CHECK(code_edit->can_fold_line(0)); + for (int i = 1; i < code_edit->get_line_count(); i++) { + CHECK_FALSE(code_edit->can_fold_line(i)); + code_edit->fold_line(i); + CHECK_FALSE(code_edit->is_line_folded(i)); + } + code_edit->fold_line(0); + CHECK(code_edit->is_line_folded(0)); + for (int i = 1; i < code_edit->get_line_count(); i++) { + CHECK_FALSE(code_edit->is_line_folded(i)); + } + CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 6); + + // End of file. + code_edit->set_text("line1\n\tline2"); + CHECK(code_edit->can_fold_line(0)); + CHECK_FALSE(code_edit->can_fold_line(1)); + code_edit->fold_line(1); + CHECK_FALSE(code_edit->is_line_folded(1)); + code_edit->fold_line(0); + CHECK(code_edit->is_line_folded(0)); + CHECK_FALSE(code_edit->is_line_folded(1)); + CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1); + + // Comment & string blocks. + // Single line block + code_edit->add_comment_delimiter("#", "", true); + code_edit->set_text("#line1\n#\tline2"); + CHECK(code_edit->can_fold_line(0)); + CHECK_FALSE(code_edit->can_fold_line(1)); + code_edit->fold_line(1); + CHECK_FALSE(code_edit->is_line_folded(1)); + code_edit->fold_line(0); + CHECK(code_edit->is_line_folded(0)); + CHECK_FALSE(code_edit->is_line_folded(1)); + CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1); + + // Has to be full line. + code_edit->set_text("test #line1\n#\tline2"); + CHECK_FALSE(code_edit->can_fold_line(0)); + CHECK_FALSE(code_edit->can_fold_line(1)); + code_edit->fold_line(1); + CHECK_FALSE(code_edit->is_line_folded(1)); + code_edit->fold_line(0); + CHECK_FALSE(code_edit->is_line_folded(0)); + CHECK_FALSE(code_edit->is_line_folded(1)); + CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1); + + code_edit->set_text("#line1\ntest #\tline2"); + CHECK_FALSE(code_edit->can_fold_line(0)); + CHECK_FALSE(code_edit->can_fold_line(1)); + code_edit->fold_line(1); + CHECK_FALSE(code_edit->is_line_folded(1)); + code_edit->fold_line(0); + CHECK_FALSE(code_edit->is_line_folded(0)); + CHECK_FALSE(code_edit->is_line_folded(1)); + CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1); + + // String. + code_edit->add_string_delimiter("^", "", true); + code_edit->set_text("^line1\n^\tline2"); + CHECK(code_edit->can_fold_line(0)); + CHECK_FALSE(code_edit->can_fold_line(1)); + code_edit->fold_line(1); + CHECK_FALSE(code_edit->is_line_folded(1)); + code_edit->fold_line(0); + CHECK(code_edit->is_line_folded(0)); + CHECK_FALSE(code_edit->is_line_folded(1)); + CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1); + + // Has to be full line. + code_edit->set_text("test ^line1\n^\tline2"); + CHECK_FALSE(code_edit->can_fold_line(0)); + CHECK_FALSE(code_edit->can_fold_line(1)); + code_edit->fold_line(1); + CHECK_FALSE(code_edit->is_line_folded(1)); + code_edit->fold_line(0); + CHECK_FALSE(code_edit->is_line_folded(0)); + CHECK_FALSE(code_edit->is_line_folded(1)); + CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1); + + code_edit->set_text("^line1\ntest ^\tline2"); + CHECK_FALSE(code_edit->can_fold_line(0)); + CHECK_FALSE(code_edit->can_fold_line(1)); + code_edit->fold_line(1); + CHECK_FALSE(code_edit->is_line_folded(1)); + code_edit->fold_line(0); + CHECK_FALSE(code_edit->is_line_folded(0)); + CHECK_FALSE(code_edit->is_line_folded(1)); + CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1); + + // Multiline blocks. + code_edit->add_comment_delimiter("&", "&", false); + code_edit->set_text("&line1\n\tline2&"); + CHECK(code_edit->can_fold_line(0)); + CHECK_FALSE(code_edit->can_fold_line(1)); + code_edit->fold_line(1); + CHECK_FALSE(code_edit->is_line_folded(1)); + code_edit->fold_line(0); + CHECK(code_edit->is_line_folded(0)); + CHECK_FALSE(code_edit->is_line_folded(1)); + CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1); + + // Has to be full line. + code_edit->set_text("test &line1\n\tline2&"); + CHECK_FALSE(code_edit->can_fold_line(0)); + CHECK_FALSE(code_edit->can_fold_line(1)); + code_edit->fold_line(1); + CHECK_FALSE(code_edit->is_line_folded(1)); + code_edit->fold_line(0); + CHECK_FALSE(code_edit->is_line_folded(0)); + CHECK_FALSE(code_edit->is_line_folded(1)); + CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1); + + code_edit->set_text("&line1\n\tline2& test"); + CHECK_FALSE(code_edit->can_fold_line(0)); + CHECK_FALSE(code_edit->can_fold_line(1)); + code_edit->fold_line(1); + CHECK_FALSE(code_edit->is_line_folded(1)); + code_edit->fold_line(0); + CHECK_FALSE(code_edit->is_line_folded(0)); + CHECK_FALSE(code_edit->is_line_folded(1)); + CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1); + + // Strings. + code_edit->add_string_delimiter("$", "$", false); + code_edit->set_text("$line1\n\tline2$"); + CHECK(code_edit->can_fold_line(0)); + CHECK_FALSE(code_edit->can_fold_line(1)); + code_edit->fold_line(1); + CHECK_FALSE(code_edit->is_line_folded(1)); + code_edit->fold_line(0); + CHECK(code_edit->is_line_folded(0)); + CHECK_FALSE(code_edit->is_line_folded(1)); + CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1); + + // Has to be full line. + code_edit->set_text("test $line1\n\tline2$"); + CHECK_FALSE(code_edit->can_fold_line(0)); + CHECK_FALSE(code_edit->can_fold_line(1)); + code_edit->fold_line(1); + CHECK_FALSE(code_edit->is_line_folded(1)); + code_edit->fold_line(0); + CHECK_FALSE(code_edit->is_line_folded(0)); + CHECK_FALSE(code_edit->is_line_folded(1)); + CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1); + + code_edit->set_text("$line1\n\tline2$ test"); + CHECK_FALSE(code_edit->can_fold_line(0)); + CHECK_FALSE(code_edit->can_fold_line(1)); + code_edit->fold_line(1); + CHECK_FALSE(code_edit->is_line_folded(1)); + code_edit->fold_line(0); + CHECK_FALSE(code_edit->is_line_folded(0)); + CHECK_FALSE(code_edit->is_line_folded(1)); + CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 1); + + // Non-indented comments/ strings. + // Single line + code_edit->set_text("test\n\tline1\n#line1\n#line2\n\ttest"); + CHECK(code_edit->can_fold_line(0)); + CHECK_FALSE(code_edit->can_fold_line(1)); + code_edit->fold_line(1); + CHECK_FALSE(code_edit->is_line_folded(1)); + code_edit->fold_line(0); + CHECK(code_edit->is_line_folded(0)); + CHECK_FALSE(code_edit->is_line_folded(1)); + CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 4); + + code_edit->set_text("test\n\tline1\n^line1\n^line2\n\ttest"); + CHECK(code_edit->can_fold_line(0)); + CHECK_FALSE(code_edit->can_fold_line(1)); + code_edit->fold_line(1); + CHECK_FALSE(code_edit->is_line_folded(1)); + code_edit->fold_line(0); + CHECK(code_edit->is_line_folded(0)); + CHECK_FALSE(code_edit->is_line_folded(1)); + CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 4); + + // Multiline + code_edit->set_text("test\n\tline1\n&line1\nline2&\n\ttest"); + CHECK(code_edit->can_fold_line(0)); + CHECK_FALSE(code_edit->can_fold_line(1)); + code_edit->fold_line(1); + CHECK_FALSE(code_edit->is_line_folded(1)); + code_edit->fold_line(0); + CHECK(code_edit->is_line_folded(0)); + CHECK_FALSE(code_edit->is_line_folded(1)); + CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 4); + + code_edit->set_text("test\n\tline1\n$line1\nline2$\n\ttest"); + CHECK(code_edit->can_fold_line(0)); + CHECK_FALSE(code_edit->can_fold_line(1)); + code_edit->fold_line(1); + CHECK_FALSE(code_edit->is_line_folded(1)); + code_edit->fold_line(0); + CHECK(code_edit->is_line_folded(0)); + CHECK_FALSE(code_edit->is_line_folded(1)); + CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 4); + } + + memdelete(code_edit); +} + +TEST_CASE("[SceneTree][CodeEdit] completion") { + CodeEdit *code_edit = memnew(CodeEdit); + SceneTree::get_singleton()->get_root()->add_child(code_edit); + + SUBCASE("[CodeEdit] auto brace completion") { + code_edit->set_auto_brace_completion_enabled(true); + CHECK(code_edit->is_auto_brace_completion_enabled()); + + code_edit->set_highlight_matching_braces_enabled(true); + CHECK(code_edit->is_highlight_matching_braces_enabled()); + + /* Try setters, any length. */ + Dictionary auto_brace_completion_pairs; + auto_brace_completion_pairs["["] = "]"; + auto_brace_completion_pairs["'"] = "'"; + auto_brace_completion_pairs[";"] = "'"; + auto_brace_completion_pairs["'''"] = "'''"; + code_edit->set_auto_brace_completion_pairs(auto_brace_completion_pairs); + CHECK(code_edit->get_auto_brace_completion_pairs().size() == 4); + CHECK(code_edit->get_auto_brace_completion_pairs()["["] == "]"); + CHECK(code_edit->get_auto_brace_completion_pairs()["'"] == "'"); + CHECK(code_edit->get_auto_brace_completion_pairs()[";"] == "'"); + CHECK(code_edit->get_auto_brace_completion_pairs()["'''"] == "'''"); + + ERR_PRINT_OFF; + + /* No duplicate start keys. */ + code_edit->add_auto_brace_completion_pair("[", "]"); + CHECK(code_edit->get_auto_brace_completion_pairs().size() == 4); + + /* No empty keys. */ + code_edit->add_auto_brace_completion_pair("[", ""); + CHECK(code_edit->get_auto_brace_completion_pairs().size() == 4); + + code_edit->add_auto_brace_completion_pair("", "]"); + CHECK(code_edit->get_auto_brace_completion_pairs().size() == 4); + + code_edit->add_auto_brace_completion_pair("", ""); + CHECK(code_edit->get_auto_brace_completion_pairs().size() == 4); + + /* Must be a symbol. */ + code_edit->add_auto_brace_completion_pair("a", "]"); + CHECK(code_edit->get_auto_brace_completion_pairs().size() == 4); + + code_edit->add_auto_brace_completion_pair("[", "a"); + CHECK(code_edit->get_auto_brace_completion_pairs().size() == 4); + + code_edit->add_auto_brace_completion_pair("a", "a"); + CHECK(code_edit->get_auto_brace_completion_pairs().size() == 4); + + ERR_PRINT_ON; + + /* Check metadata. */ + CHECK(code_edit->has_auto_brace_completion_open_key("[")); + CHECK(code_edit->has_auto_brace_completion_open_key("'")); + CHECK(code_edit->has_auto_brace_completion_open_key(";")); + CHECK(code_edit->has_auto_brace_completion_open_key("'''")); + CHECK_FALSE(code_edit->has_auto_brace_completion_open_key("(")); + + CHECK(code_edit->has_auto_brace_completion_close_key("]")); + CHECK(code_edit->has_auto_brace_completion_close_key("'")); + CHECK(code_edit->has_auto_brace_completion_close_key("'''")); + CHECK_FALSE(code_edit->has_auto_brace_completion_close_key(")")); + + CHECK(code_edit->get_auto_brace_completion_close_key("[") == "]"); + CHECK(code_edit->get_auto_brace_completion_close_key("'") == "'"); + CHECK(code_edit->get_auto_brace_completion_close_key(";") == "'"); + CHECK(code_edit->get_auto_brace_completion_close_key("'''") == "'''"); + CHECK(code_edit->get_auto_brace_completion_close_key("(").is_empty()); + + /* Check typing inserts closing pair. */ + code_edit->clear(); + SEND_GUI_KEY_EVENT(code_edit, KEY_BRACKETLEFT); + CHECK(code_edit->get_line(0) == "[]"); + + /* Should first match and insert smaller key. */ + code_edit->clear(); + SEND_GUI_KEY_EVENT(code_edit, KEY_APOSTROPHE); + CHECK(code_edit->get_line(0) == "''"); + CHECK(code_edit->get_caret_column() == 1); + + /* Move out from centre, Should match and insert larger key. */ + SEND_GUI_ACTION(code_edit, "ui_text_caret_right"); + SEND_GUI_KEY_EVENT(code_edit, KEY_APOSTROPHE); + CHECK(code_edit->get_line(0) == "''''''"); + CHECK(code_edit->get_caret_column() == 3); + + /* Backspace should remove all. */ + SEND_GUI_ACTION(code_edit, "ui_text_backspace"); + CHECK(code_edit->get_line(0).is_empty()); + + /* If in between and typing close key should "skip". */ + SEND_GUI_KEY_EVENT(code_edit, KEY_BRACKETLEFT); + CHECK(code_edit->get_line(0) == "[]"); + CHECK(code_edit->get_caret_column() == 1); + SEND_GUI_KEY_EVENT(code_edit, KEY_BRACKETRIGHT); + CHECK(code_edit->get_line(0) == "[]"); + CHECK(code_edit->get_caret_column() == 2); + + /* If current is char and inserting a string, do not autocomplete. */ + code_edit->clear(); + SEND_GUI_KEY_EVENT(code_edit, KEY_A); + SEND_GUI_KEY_EVENT(code_edit, KEY_APOSTROPHE); + CHECK(code_edit->get_line(0) == "A'"); + + /* If in comment, do not complete. */ + code_edit->add_comment_delimiter("#", ""); + code_edit->clear(); + SEND_GUI_KEY_EVENT(code_edit, KEY_NUMBERSIGN); + SEND_GUI_KEY_EVENT(code_edit, KEY_APOSTROPHE); + CHECK(code_edit->get_line(0) == "#'"); + + /* If in string, and inserting string do not complete. */ + code_edit->clear(); + SEND_GUI_KEY_EVENT(code_edit, KEY_APOSTROPHE); + SEND_GUI_KEY_EVENT(code_edit, KEY_QUOTEDBL); + CHECK(code_edit->get_line(0) == "'\"'"); + } + + SUBCASE("[CodeEdit] autocomplete") { + code_edit->set_code_completion_enabled(true); + CHECK(code_edit->is_code_completion_enabled()); + + /* Set prefixes, single char only, disallow empty. */ + TypedArray<String> completion_prefixes; + completion_prefixes.push_back(""); + completion_prefixes.push_back("."); + completion_prefixes.push_back("."); + completion_prefixes.push_back(",,"); + + ERR_PRINT_OFF; + code_edit->set_code_completion_prefixes(completion_prefixes); + ERR_PRINT_ON; + completion_prefixes = code_edit->get_code_completion_prefixes(); + CHECK(completion_prefixes.size() == 2); + CHECK(completion_prefixes.has(".")); + CHECK(completion_prefixes.has(",")); + + code_edit->set_text("test\ntest"); + CHECK(code_edit->get_text_for_code_completion() == String::chr(0xFFFF) + "test\ntest"); + } + + SUBCASE("[CodeEdit] autocomplete request") { + SIGNAL_WATCH(code_edit, "request_code_completion"); + code_edit->set_code_completion_enabled(true); + + Array signal_args; + signal_args.push_back(Array()); + + /* Force request. */ + code_edit->request_code_completion(); + SIGNAL_CHECK_FALSE("request_code_completion"); + code_edit->request_code_completion(true); + SIGNAL_CHECK("request_code_completion", signal_args); + + /* Manual request should force. */ + SEND_GUI_ACTION(code_edit, "ui_text_completion_query"); + SIGNAL_CHECK("request_code_completion", signal_args); + + /* Insert prefix. */ + TypedArray<String> completion_prefixes; + completion_prefixes.push_back("."); + code_edit->set_code_completion_prefixes(completion_prefixes); + + code_edit->insert_text_at_caret("."); + code_edit->request_code_completion(); + SIGNAL_CHECK("request_code_completion", signal_args); + + /* Should work with space too. */ + code_edit->insert_text_at_caret(" "); + code_edit->request_code_completion(); + SIGNAL_CHECK("request_code_completion", signal_args); + + /* Should work when complete ends with prefix. */ + code_edit->clear(); + code_edit->insert_text_at_caret("t"); + code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "test.", "test."); + code_edit->update_code_completion_options(); + code_edit->confirm_code_completion(); + CHECK(code_edit->get_line(0) == "test."); + SIGNAL_CHECK("request_code_completion", signal_args); + + SIGNAL_UNWATCH(code_edit, "request_code_completion"); + } + + SUBCASE("[CodeEdit] autocomplete completion") { + CHECK(code_edit->get_code_completion_selected_index() == -1); + code_edit->set_code_completion_enabled(true); + CHECK(code_edit->get_code_completion_selected_index() == -1); + + code_edit->update_code_completion_options(); + code_edit->set_code_completion_selected_index(1); + CHECK(code_edit->get_code_completion_selected_index() == -1); + CHECK(code_edit->get_code_completion_option(0).size() == 0); + CHECK(code_edit->get_code_completion_options().size() == 0); + + /* Adding does not update the list. */ + code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_VARIABLE, "item_0.", "item_0"); + + code_edit->set_code_completion_selected_index(1); + CHECK(code_edit->get_code_completion_selected_index() == -1); + CHECK(code_edit->get_code_completion_option(0).size() == 0); + CHECK(code_edit->get_code_completion_options().size() == 0); + + /* After update, pending add should not be counted, */ + /* also does not work on col 0 */ + code_edit->insert_text_at_caret("i"); + code_edit->update_code_completion_options(); + code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0.", "item_0", Color(1, 0, 0), RES(), Color(1, 0, 0)); + code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_VARIABLE, "item_1.", "item_1"); + code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_VARIABLE, "item_2.", "item_2"); + + ERR_PRINT_OFF; + code_edit->set_code_completion_selected_index(1); + ERR_PRINT_ON; + CHECK(code_edit->get_code_completion_selected_index() == 0); + CHECK(code_edit->get_code_completion_option(0).size() == 6); + CHECK(code_edit->get_code_completion_options().size() == 1); + + /* Check cancel closes completion. */ + SEND_GUI_ACTION(code_edit, "ui_cancel"); + CHECK(code_edit->get_code_completion_selected_index() == -1); + + code_edit->update_code_completion_options(); + CHECK(code_edit->get_code_completion_selected_index() == 0); + code_edit->set_code_completion_selected_index(1); + CHECK(code_edit->get_code_completion_selected_index() == 1); + CHECK(code_edit->get_code_completion_option(0).size() == 6); + CHECK(code_edit->get_code_completion_options().size() == 3); + + /* Check data. */ + Dictionary option = code_edit->get_code_completion_option(0); + CHECK((int)option["kind"] == (int)CodeEdit::CodeCompletionKind::KIND_CLASS); + CHECK(option["display_text"] == "item_0."); + CHECK(option["insert_text"] == "item_0"); + CHECK(option["font_color"] == Color(1, 0, 0)); + CHECK(option["icon"] == RES()); + CHECK(option["default_value"] == Color(1, 0, 0)); + + /* Set size for mouse input. */ + code_edit->set_size(Size2(100, 100)); + + /* Check input. */ + SEND_GUI_ACTION(code_edit, "ui_end"); + CHECK(code_edit->get_code_completion_selected_index() == 2); + + SEND_GUI_ACTION(code_edit, "ui_home"); + CHECK(code_edit->get_code_completion_selected_index() == 0); + + SEND_GUI_ACTION(code_edit, "ui_page_down"); + CHECK(code_edit->get_code_completion_selected_index() == 2); + + SEND_GUI_ACTION(code_edit, "ui_page_up"); + CHECK(code_edit->get_code_completion_selected_index() == 0); + + SEND_GUI_ACTION(code_edit, "ui_up"); + CHECK(code_edit->get_code_completion_selected_index() == 2); + + SEND_GUI_ACTION(code_edit, "ui_down"); + CHECK(code_edit->get_code_completion_selected_index() == 0); + + SEND_GUI_KEY_EVENT(code_edit, KEY_T); + CHECK(code_edit->get_code_completion_selected_index() == 0); + + SEND_GUI_ACTION(code_edit, "ui_left"); + CHECK(code_edit->get_code_completion_selected_index() == 0); + + SEND_GUI_ACTION(code_edit, "ui_right"); + CHECK(code_edit->get_code_completion_selected_index() == 0); + + SEND_GUI_ACTION(code_edit, "ui_text_backspace"); + CHECK(code_edit->get_code_completion_selected_index() == 0); + + Point2 caret_pos = code_edit->get_caret_draw_pos(); + caret_pos.y -= code_edit->get_line_height(); + SEND_GUI_MOUSE_EVENT(code_edit, caret_pos, MOUSE_BUTTON_WHEEL_DOWN, MOUSE_BUTTON_NONE); + CHECK(code_edit->get_code_completion_selected_index() == 1); + + SEND_GUI_MOUSE_EVENT(code_edit, caret_pos, MOUSE_BUTTON_WHEEL_UP, MOUSE_BUTTON_NONE); + CHECK(code_edit->get_code_completion_selected_index() == 0); + + /* Single click selects. */ + SEND_GUI_MOUSE_EVENT(code_edit, caret_pos, MOUSE_BUTTON_LEFT, MOUSE_BUTTON_MASK_LEFT); + CHECK(code_edit->get_code_completion_selected_index() == 2); + + /* Double click inserts. */ + SEND_GUI_DOUBLE_CLICK(code_edit, caret_pos); + CHECK(code_edit->get_code_completion_selected_index() == -1); + CHECK(code_edit->get_line(0) == "item_2"); + + code_edit->set_auto_brace_completion_enabled(false); + + /* Does nothing in readonly. */ + code_edit->undo(); + code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0.", "item_0"); + code_edit->update_code_completion_options(); + code_edit->set_editable(false); + code_edit->confirm_code_completion(); + code_edit->set_editable(true); + CHECK(code_edit->get_line(0) == "i"); + + /* Replace */ + code_edit->clear(); + code_edit->insert_text_at_caret("item_1 test"); + code_edit->set_caret_column(2); + code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0.", "item_0"); + code_edit->update_code_completion_options(); + SEND_GUI_ACTION(code_edit, "ui_text_completion_replace"); + CHECK(code_edit->get_line(0) == "item_0 test"); + + /* Replace string. */ + code_edit->clear(); + code_edit->insert_text_at_caret("\"item_1 test\""); + code_edit->set_caret_column(2); + code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0.", "item_0"); + code_edit->update_code_completion_options(); + SEND_GUI_ACTION(code_edit, "ui_text_completion_replace"); + CHECK(code_edit->get_line(0) == "\"item_0\""); + + /* Normal replace if no end is given. */ + code_edit->clear(); + code_edit->insert_text_at_caret("\"item_1 test"); + code_edit->set_caret_column(2); + code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0.", "item_0"); + code_edit->update_code_completion_options(); + SEND_GUI_ACTION(code_edit, "ui_text_completion_replace"); + CHECK(code_edit->get_line(0) == "\"item_0\" test"); + + /* Insert at completion. */ + code_edit->clear(); + code_edit->insert_text_at_caret("item_1 test"); + code_edit->set_caret_column(2); + code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0.", "item_0"); + code_edit->update_code_completion_options(); + SEND_GUI_ACTION(code_edit, "ui_text_completion_accept"); + CHECK(code_edit->get_line(0) == "item_01 test"); + + /* Insert at completion with string should have same output. */ + code_edit->clear(); + code_edit->insert_text_at_caret("\"item_1 test\""); + code_edit->set_caret_column(2); + code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0.", "item_0"); + code_edit->update_code_completion_options(); + SEND_GUI_ACTION(code_edit, "ui_text_completion_accept"); + CHECK(code_edit->get_line(0) == "\"item_0\"1 test\""); + + /* Merge symbol at end on insert text. */ + /* End on completion entry. */ + code_edit->clear(); + code_edit->insert_text_at_caret("item_1 test"); + code_edit->set_caret_column(2); + code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0(", "item_0("); + code_edit->update_code_completion_options(); + SEND_GUI_ACTION(code_edit, "ui_text_completion_replace"); + CHECK(code_edit->get_line(0) == "item_0( test"); + CHECK(code_edit->get_caret_column() == 7); + + /* End of text*/ + code_edit->clear(); + code_edit->insert_text_at_caret("item_1( test"); + code_edit->set_caret_column(2); + code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0", "item_0"); + code_edit->update_code_completion_options(); + SEND_GUI_ACTION(code_edit, "ui_text_completion_replace"); + CHECK(code_edit->get_line(0) == "item_0( test"); + CHECK(code_edit->get_caret_column() == 6); + + /* End of both. */ + code_edit->clear(); + code_edit->insert_text_at_caret("item_1( test"); + code_edit->set_caret_column(2); + code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0(", "item_0("); + code_edit->update_code_completion_options(); + SEND_GUI_ACTION(code_edit, "ui_text_completion_replace"); + CHECK(code_edit->get_line(0) == "item_0( test"); + CHECK(code_edit->get_caret_column() == 7); + + /* Full set. */ + /* End on completion entry. */ + code_edit->clear(); + code_edit->insert_text_at_caret("item_1 test"); + code_edit->set_caret_column(2); + code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0()", "item_0()"); + code_edit->update_code_completion_options(); + SEND_GUI_ACTION(code_edit, "ui_text_completion_replace"); + CHECK(code_edit->get_line(0) == "item_0() test"); + CHECK(code_edit->get_caret_column() == 8); + + /* End of text*/ + code_edit->clear(); + code_edit->insert_text_at_caret("item_1() test"); + code_edit->set_caret_column(2); + code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0", "item_0"); + code_edit->update_code_completion_options(); + SEND_GUI_ACTION(code_edit, "ui_text_completion_replace"); + CHECK(code_edit->get_line(0) == "item_0() test"); + CHECK(code_edit->get_caret_column() == 6); + + /* End of both. */ + code_edit->clear(); + code_edit->insert_text_at_caret("item_1() test"); + code_edit->set_caret_column(2); + code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0()", "item_0()"); + code_edit->update_code_completion_options(); + SEND_GUI_ACTION(code_edit, "ui_text_completion_replace"); + CHECK(code_edit->get_line(0) == "item_0() test"); + CHECK(code_edit->get_caret_column() == 8); + + /* Autobrace completion. */ + code_edit->set_auto_brace_completion_enabled(true); + + /* End on completion entry. */ + code_edit->clear(); + code_edit->insert_text_at_caret("item_1 test"); + code_edit->set_caret_column(2); + code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0(", "item_0("); + code_edit->update_code_completion_options(); + SEND_GUI_ACTION(code_edit, "ui_text_completion_replace"); + CHECK(code_edit->get_line(0) == "item_0() test"); + CHECK(code_edit->get_caret_column() == 7); + + /* End of text*/ + code_edit->clear(); + code_edit->insert_text_at_caret("item_1( test"); + code_edit->set_caret_column(2); + code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0", "item_0"); + code_edit->update_code_completion_options(); + SEND_GUI_ACTION(code_edit, "ui_text_completion_replace"); + CHECK(code_edit->get_line(0) == "item_0( test"); + CHECK(code_edit->get_caret_column() == 6); + + /* End of both. */ + code_edit->clear(); + code_edit->insert_text_at_caret("item_1( test"); + code_edit->set_caret_column(2); + code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0(", "item_0("); + code_edit->update_code_completion_options(); + SEND_GUI_ACTION(code_edit, "ui_text_completion_replace"); + CHECK(code_edit->get_line(0) == "item_0( test"); + CHECK(code_edit->get_caret_column() == 7); + + /* Full set. */ + /* End on completion entry. */ + code_edit->clear(); + code_edit->insert_text_at_caret("item_1 test"); + code_edit->set_caret_column(2); + code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0()", "item_0()"); + code_edit->update_code_completion_options(); + SEND_GUI_ACTION(code_edit, "ui_text_completion_replace"); + CHECK(code_edit->get_line(0) == "item_0() test"); + CHECK(code_edit->get_caret_column() == 8); + + /* End of text*/ + code_edit->clear(); + code_edit->insert_text_at_caret("item_1() test"); + code_edit->set_caret_column(2); + code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0", "item_0"); + code_edit->update_code_completion_options(); + SEND_GUI_ACTION(code_edit, "ui_text_completion_replace"); + CHECK(code_edit->get_line(0) == "item_0() test"); + CHECK(code_edit->get_caret_column() == 6); + + /* End of both. */ + code_edit->clear(); + code_edit->insert_text_at_caret("item_1() test"); + code_edit->set_caret_column(2); + code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0()", "item_0()"); + code_edit->update_code_completion_options(); + SEND_GUI_ACTION(code_edit, "ui_text_completion_replace"); + CHECK(code_edit->get_line(0) == "item_0() test"); + CHECK(code_edit->get_caret_column() == 8); + } + + memdelete(code_edit); +} + +TEST_CASE("[SceneTree][CodeEdit] symbol lookup") { + CodeEdit *code_edit = memnew(CodeEdit); + SceneTree::get_singleton()->get_root()->add_child(code_edit); + + code_edit->set_symbol_lookup_on_click_enabled(true); + CHECK(code_edit->is_symbol_lookup_on_click_enabled()); + + /* Set size for mouse input. */ + code_edit->set_size(Size2(100, 100)); + + code_edit->set_text("this is some text"); + + Point2 caret_pos = code_edit->get_caret_draw_pos(); + caret_pos.x += 55; + SEND_GUI_MOUSE_EVENT(code_edit, caret_pos, MOUSE_BUTTON_NONE, MOUSE_BUTTON_NONE); + CHECK(code_edit->get_text_for_symbol_lookup() == "this is s" + String::chr(0xFFFF) + "ome text"); + + SIGNAL_WATCH(code_edit, "symbol_validate"); + +#ifdef OSX_ENABLED + SEND_GUI_KEY_EVENT(code_edit, KEY_META); +#else + SEND_GUI_KEY_EVENT(code_edit, KEY_CTRL); +#endif + + Array signal_args; + Array arg; + arg.push_back("some"); + signal_args.push_back(arg); + SIGNAL_CHECK("symbol_validate", signal_args); + + SIGNAL_UNWATCH(code_edit, "symbol_validate"); + + memdelete(code_edit); +} + +TEST_CASE("[SceneTree][CodeEdit] line length guidelines") { + CodeEdit *code_edit = memnew(CodeEdit); + SceneTree::get_singleton()->get_root()->add_child(code_edit); + + TypedArray<int> guide_lines; + + code_edit->set_line_length_guidelines(guide_lines); + CHECK(code_edit->get_line_length_guidelines().size() == 0); + + guide_lines.push_back(80); + guide_lines.push_back(120); + + /* Order should be preserved. */ + code_edit->set_line_length_guidelines(guide_lines); + CHECK((int)code_edit->get_line_length_guidelines()[0] == 80); + CHECK((int)code_edit->get_line_length_guidelines()[1] == 120); + + memdelete(code_edit); +} + } // namespace TestCodeEdit #endif // TEST_CODE_EDIT_H diff --git a/tests/test_macros.h b/tests/test_macros.h index bf1001fa67..2f0bc6dcfa 100644 --- a/tests/test_macros.h +++ b/tests/test_macros.h @@ -131,8 +131,12 @@ int register_test_command(String p_command, TestFunc p_function); register_test_command(m_command, m_function); \ DOCTEST_GLOBAL_NO_WARNINGS_END() -// Utility macro to send an action event to a given object +// Utility macros to send an event actions to a given object // Requires Message Queue and InputMap to be setup. +// SEND_GUI_ACTION - takes an object and a input map key. e.g SEND_GUI_ACTION(code_edit, "ui_text_newline"). +// SEND_GUI_KEY_EVENT - takes an object and a keycode set. e.g SEND_GUI_KEY_EVENT(code_edit, KEY_A | KEY_MASK_CMD). +// SEND_GUI_MOUSE_EVENT - takes an object, position, mouse button and mouse mask e.g SEND_GUI_MOUSE_EVENT(code_edit, Vector2(50, 50), MOUSE_BUTTON_NONE, MOUSE_BUTTON_NONE); +// SEND_GUI_DOUBLE_CLICK - takes an object and a postion. e.g SEND_GUI_DOUBLE_CLICK(code_edit, Vector2(50, 50)); #define SEND_GUI_ACTION(m_object, m_action) \ { \ @@ -144,6 +148,37 @@ int register_test_command(String p_command, TestFunc p_function); MessageQueue::get_singleton()->flush(); \ } +#define SEND_GUI_KEY_EVENT(m_object, m_input) \ + { \ + Ref<InputEventKey> event = InputEventKey::create_reference(m_input); \ + event->set_pressed(true); \ + m_object->gui_input(event); \ + MessageQueue::get_singleton()->flush(); \ + } + +#define _CREATE_GUI_MOUSE_EVENT(m_object, m_local_pos, m_input, m_mask) \ + Ref<InputEventMouseButton> event; \ + event.instantiate(); \ + event->set_position(m_local_pos); \ + event->set_button_index(m_input); \ + event->set_button_mask(m_mask); \ + event->set_pressed(true); + +#define SEND_GUI_MOUSE_EVENT(m_object, m_local_pos, m_input, m_mask) \ + { \ + _CREATE_GUI_MOUSE_EVENT(m_object, m_local_pos, m_input, m_mask); \ + m_object->get_viewport()->push_input(event); \ + MessageQueue::get_singleton()->flush(); \ + } + +#define SEND_GUI_DOUBLE_CLICK(m_object, m_local_pos) \ + { \ + _CREATE_GUI_MOUSE_EVENT(m_object, m_local_pos, MOUSE_BUTTON_LEFT, MOUSE_BUTTON_LEFT); \ + event->set_double_click(true); \ + m_object->get_viewport()->push_input(event); \ + MessageQueue::get_singleton()->flush(); \ + } + // Utility class / macros for testing signals // // Use SIGNAL_WATCH(*object, "signal_name") to start watching diff --git a/thirdparty/README.md b/thirdparty/README.md index 3b5ec77b73..081c18acae 100644 --- a/thirdparty/README.md +++ b/thirdparty/README.md @@ -192,13 +192,13 @@ Files extracted from upstream source: ## harfbuzz - Upstream: https://github.com/harfbuzz/harfbuzz -- Version: 2.8.0 (03538e872a0610a65fad692b33d3646f387cf578, 2021) +- Version: 3.0.0 (9c387e20d65a7a366ac270d789f6ad266014c9e0, 2021) - License: MIT Files extracted from upstream source: - the `src` folder -- `AUTHORS`, `COPYING`, `NEWS`, `THANKS` +- `AUTHORS`, `COPYING`, `THANKS` ## icu4c diff --git a/thirdparty/harfbuzz/COPYING b/thirdparty/harfbuzz/COPYING index 57343164f2..48d1b30f90 100644 --- a/thirdparty/harfbuzz/COPYING +++ b/thirdparty/harfbuzz/COPYING @@ -4,14 +4,14 @@ files names COPYING in subdirectories where applicable. Copyright © 2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020 Google, Inc. Copyright © 2018,2019,2020 Ebrahim Byagowi -Copyright © 2019,2020 Facebook, Inc. +Copyright © 2019,2020 Facebook, Inc. Copyright © 2012 Mozilla Foundation Copyright © 2011 Codethink Limited Copyright © 2008,2010 Nokia Corporation and/or its subsidiary(-ies) Copyright © 2009 Keith Stribley Copyright © 2009 Martin Hosken and SIL International Copyright © 2007 Chris Wilson -Copyright © 2006 Behdad Esfahbod +Copyright © 2005,2006,2020,2021 Behdad Esfahbod Copyright © 2005 David Turner Copyright © 2004,2007,2008,2009,2010 Red Hat, Inc. Copyright © 1998-2004 David Turner and Werner Lemberg diff --git a/thirdparty/harfbuzz/NEWS b/thirdparty/harfbuzz/NEWS deleted file mode 100644 index 321c550188..0000000000 --- a/thirdparty/harfbuzz/NEWS +++ /dev/null @@ -1,2457 +0,0 @@ -Overview of changes leading to 2.8.0 -Tuesday, March 16, 2021 -==================================== -- Shape joining scripts other than Arabic/Syriac using the Universal Shaping Engine. - Previously these were shaped using the generalized Arabic shaper. (David Corbett) -- Fix regression in shaping of U+0B55 ORIYA SIGN OVERLINE. (David Corbett) -- Update language tags. (David Corbett) -- Variations: reduce error: do not round each interpolated delta. (Just van Rossum) -- Documentation improvements. (Khaled Hosny, Nathan Willis) -- Subsetter improvements: subsets most, if not all, lookup types now. (Garret Rieger, Qunxin Liu) -- Fuzzer-found fixes and other improvements when memory failures happen. (Behdad) -- Removed most atomic implementations now that we have C++11 atomic impl. (Behdad) -- General codebase upkeep; using more C++11 features: constexpr constructors, etc. (Behdad) - - -Overview of changes leading to 2.7.4 -Sunday, December 27, 2020 -==================================== -- Fix missing --enable-introspection configure option from previous release - tarball. -- Documentation updates. - -Overview of changes leading to 2.7.3 -Wednesday, December 23, 2020 -==================================== -- Update USE shaper to 2020-08-13 specification, and other improvements. -- Don’t disable liga feature in myanmar shaper, to match Uniscribe. -- Improvements to language and script tags handling. -- Update language system tag registry to OpenType 1.8.4 -- Support for serializing and deserializing Unicode buffers. Serialized buffers - are now delimited with `<>` or `[]` based on whether it is a Unicode or - glyphs buffer. -- Increase buffer work limits to handle fonts with many complex lookups. -- Handle more shaping operations in trace output. -- Memory access fixes. -- More OOM fixes. -- Improved documentation. -- Build system improvements. -- New API: -+hb_buffer_has_positions() -+hb_buffer_serialize() -+hb_buffer_serialize_unicode() -+hb_buffer_deserialize_unicode() - - -Overview of changes leading to 2.7.2 -Saturday, August 29, 2020 -==================================== -- Fix a regression in the previous release that caused a crash with Kaithi. -- More OOM fixes. - - -Overview of changes leading to 2.7.1 -Thursday, August 13, 2020 -==================================== -- ot-funcs now handles variable empty glyphs better when hvar/vvar isn't present. -- Reverted a GDEF processing regression. -- A couple of fixes to handle OOM better. - - -Overview of changes leading to 2.7.0 -Saturday, July 25, 2020 -==================================== -- Use an implementation for round that always rounds up, some minor fluctuations - are expected on var font specially when hb-ot callback is used. -- Fix an AAT's `kerx` issue on broken rendering of Devanagari Sangam MN. -- Remove AAT's `lcar` table support from _get_ligature_carets API, not even much - use on macOS installed fonts (only two files). GDEF support is the recommended - one and expected to work properly after issues fixed two releases ago. -- Minor memory fixes to handle OOM better specially in hb-ft. -- Minor .so files versioning scheme change and remove stable/unstable scheme - differences, was never used in practice (always default to stable scheme). -- We are now suggesting careful packaging of the library using meson, - https://github.com/harfbuzz/harfbuzz/wiki/Notes-on-migration-to-meson - for more information. -- Distribution package URL is changed, either use GitHub generated tarballs, - `https://github.com/harfbuzz/harfbuzz/archive/$pkgver.tar.gz` - or, even more preferably use commit hash of the release and git checkouts like, - `git+https://github.com/harfbuzz/harfbuzz#commit=$commit` - - -Overview of changes leading to 2.6.8 -Monday, June 22, 2020 -==================================== -- New API to fetch glyph alternates from GSUB table. -- hb-coretext build fix for macOS < 10.10. -- Meson build fixes, cmake port removal is postponed but please prepare for - it and give us feedback. - Autotools is still our main build system however please consider - experimenting with meson also for packaging the library. -- New API: -+hb_ot_layout_lookup_get_glyph_alternates() - - -Overview of changes leading to 2.6.7 -Wednesday, June 3, 2020 -==================================== -- Update to Unicode 13.0.0. -- Fix hb_ot_layout_get_ligature_carets for fonts without lcar table, it was - completely broken for all the other fonts since 2.1.2. -- As a part of our migration to meson, this release will be the last one - to provide cmake port files but autotools still is our main build system. - There is a possibility that the next version or the after be released - using meson. - - -Overview of changes leading to 2.6.6 -Tuesday, May 12, 2020 -==================================== -- A fix in AAT kerning for Geeza Pro. -- Better support for resource fork fonts on macOS. - - -Overview of changes leading to 2.6.5 -Friday, April 17, 2020 -==================================== -- Add experimental meson build system. Autotools is still the primary - and supported build system. -- AAT is now always preferred for horizontal scripts when both AAT and OT - layout tables exist at the same time. -- Subsetter improvements. -- New API: -+hb_ft_font_lock_face() -+hb_ft_font_unlock_face() - - -Overview of changes leading to 2.6.4 -Monday, October 29, 2019 -==================================== -- Small bug fix. -- Build fixes. - - -Overview of changes leading to 2.6.3 -Monday, October 28, 2019 -==================================== -- Misc small fixes, mostly to build-related issues. -- New API: -+hb_font_get_nominal_glyphs() - - -Overview of changes leading to 2.6.2 -Monday, September 30, 2019 -==================================== -- Misc small fixes, mostly to build-related issues. - - -Overview of changes leading to 2.6.1 -Thursday, August 22, 2019 -==================================== -- Fix regression with hb_font_create_sub_font scaling introduced in 2.6.0. -- Change interpretation of font PTEM size / CoreText font size handling. - See https://github.com/harfbuzz/harfbuzz/pull/1484 -- hb-ot-font: Prefer symbol cmap subtable if present. -- Apply 'dist'/'abvm'/'blwm' features to all scripts. -- Drop experimental DirectWrite API. - - -Overview of changes leading to 2.6.0 -Tuesday, August 13, 2019 -==================================== -- New OpenType metrics, baseline, and metadata table access APIs. -- New API to set font variations to a named-instance. -- New hb-gdi.h header and API for creating hb_face_t from HFONT. -- Amalgam: Provide a single-file harfbuzz.cc file for easier alternate building. -- More size-reduction configurable options, enabled by HB_TINY. -- New API: -+hb_font_set_var_named_instance() -+hb_gdi_face_create() -+hb_ot_layout_baseline_tag_t -+hb_ot_layout_get_baseline() -+hb_ot_meta_tag_t -+hb_ot_meta_get_entry_tags() -+hb_ot_meta_reference_entry() -+hb_ot_metrics_tag_t -+hb_ot_metrics_get_position() -+hb_ot_metrics_get_variation() -+hb_ot_metrics_get_x_variation() -+hb_ot_metrics_get_y_variation() - - -Overview of changes leading to 2.5.3 -Wednesday, June 26, 2019 -==================================== -- Fix UCD script data for Unicode 10+ scripts. This was broken since 2.5.0. -- More optimizations for HB_TINY. - - -Overview of changes leading to 2.5.2 -Thursday, June 20, 2019 -==================================== -- More hb-config.hh facilities to shrink library size, namely when built as - HB_TINY. -- New documentation of custom configurations in CONFIG.md. -- Fix build on gcc 4.8. That's supported again. -- Universal Shaping Engine improvements thanks to David Corbett. -- API Changes: Undeprecate some horizontal-kerning API and re-enable in hb-ft, - such that Type1 fonts will continue kerning. - - -Overview of changes leading to 2.5.1 -Friday, May 31, 2019 -==================================== -- Fix build with various versions of Visual Studio. -- Improved documentation, thanks to Nathan Willis. -- Bugfix in subsetting glyf table. -- Improved scripts for cross-compiling for Windows using mingw. -- Rename HB_MATH_GLYPH_PART_FLAG_EXTENDER to HB_OT_MATH_GLYPH_PART_FLAG_EXTENDER. - A deprecated macro is added for backwards-compatibility. - - -Overview of changes leading to 2.5.0 -Friday, May 24, 2019 -==================================== -- This release does not include much functional changes, but includes major internal - code-base changes. We now require C++11. Support for gcc 4.8 and earlier has been - dropped. -- New hb-config.hh facility for compiling smaller library for embedded and web usecases. -- New Unicode Character Databse implementation that is half the size of previously-used - UCDN. -- Subsetter improvements. -- Improved documentation, thanks to Nathan Willis. -- Misc shaping fixes. - - -Overview of changes leading to 2.4.0 -Monday, March 25, 2019 -==================================== -- Unicode 12. -- Misc fixes. -- Subsetter improvements. -- New API: -HB_BUFFER_FLAG_DO_NOT_INSERT_DOTTED_CIRCLE -hb_directwrite_face_create() - - -Overview of changes leading to 2.3.1 -Wednesday, January 30, 2019 -==================================== -- AAT bug fixes. -- Misc internal housekeeping cleanup. - - -Overview of changes leading to 2.3.0 -Thursday, December 20, 2018 -==================================== -- Fix regression on big-endian architectures. Ouch! -- Misc bug and build fixes. -- Fix subsetting of simple GSUB/GDEF. -- Merge CFF / CFF2 support contributed by Adobe. This mostly involves - the subsetter, but also get_glyph_extents on CFF fonts. - -New API in hb-aat.h: -+hb_aat_layout_has_substitution() -+hb_aat_layout_has_positioning() -+hb_aat_layout_has_tracking() - - -Overview of changes leading to 2.2.0 -Thursday, November 29, 2018 -==================================== -- Misc shaping bug fixes. -- Add font variations named-instance API. -- Deprecate font variations axis enumeration API and add replacement. -- AAT shaping improvements: - o Fixed 'kern' table Format 2 implementation. - o Implement 'feat' table API for feature detection. - o Blacklist 'GSUB' table of fonts from 'MUTF' foundry that also have 'morx'. - -New API: -+hb_aat_layout_feature_type_t -+hb_aat_layout_feature_selector_t -+hb_aat_layout_get_feature_types() -+hb_aat_layout_feature_type_get_name_id -+hb_aat_layout_feature_selector_info_t -+HB_AAT_LAYOUT_NO_SELECTOR_INDEX -+hb_aat_layout_feature_type_get_selector_infos() -+hb_ot_var_axis_flags_t -+hb_ot_var_axis_info_t -+hb_ot_var_get_axis_infos() -+hb_ot_var_find_axis_info() -+hb_ot_var_get_named_instance_count() -+hb_ot_var_named_instance_get_subfamily_name_id() -+hb_ot_var_named_instance_get_postscript_name_id() -+hb_ot_var_named_instance_get_design_coords() - -Deprecated API: -+HB_OT_VAR_NO_AXIS_INDEX -+hb_ot_var_axis_t -+hb_ot_var_get_axes() -+hb_ot_var_find_axis() - - -Overview of changes leading to 2.1.3 -Friday, November 16, 2018 -==================================== -- Fix AAT 'mort' shaping, which was broken in 2.1.2 - - -Overview of changes leading to 2.1.2 -Friday, November 16, 2018 -==================================== -- Various internal changes. -- AAT shaping improvements: - o Implement kern table Format 1 state-machine-based kerning. - o Implement cross-stream kerning (cursive positioning, etc). - o Ignore emptyish GSUB tables (zero scripts) if morx present. - o Don't apply GPOS if morx is being applied. Matches Apple. - - --Overview of changes leading to 2.1.1 -Monday, November 5, 2018 -==================================== -- AAT improvements: - o Implement 'mort' table. - o Implement 'kern' subtables Format 1 and Format 3. - - -Overview of changes leading to 2.1.0 -Tuesday, October 30, 2018 -==================================== -- AAT shaping improvements: - o Allow user controlling AAT features, for whole buffer only currently. - o Several 'morx' fixes. - o Implement tuple-kerns in 'kerx'; Fixes kerning with Apple default - San Francisco fonts. -- Support for color fonts: - o COLR/CPAL API to fetch color layers. - o SVG table to fetch SVG documents. - o CBDT/sbix API to fetch PNG images. -- New 'name' table API. -- hb-ot-font now uses 'VORG' table to correctly position CFF glyphs - in vertical layout. -- Various fuzzer-found bug fixes. - -Changed API: - -A type and a macro added in 2.0.0 were renamed: - -hb_name_id_t -> hb_ot_name_id_t -HB_NAME_ID_INVALID -> HB_OT_NAME_ID_INVALID - -New API: - -+hb_color_t -+HB_COLOR -+hb_color_get_alpha() -+hb_color_get_red() -+hb_color_get_green() -+hb_color_get_blue() -+hb_ot_color_has_palettes() -+hb_ot_color_palette_get_count() -+hb_ot_color_palette_get_name_id() -+hb_ot_color_palette_color_get_name_id() -+hb_ot_color_palette_flags_t -+hb_ot_color_palette_get_flags() -+hb_ot_color_palette_get_colors() -+hb_ot_color_has_layers() -+hb_ot_color_layer_t -+hb_ot_color_glyph_get_layers() -+hb_ot_color_has_svg() -+hb_ot_color_glyph_reference_svg() -+hb_ot_color_has_png() -+hb_ot_color_glyph_reference_png() - -+hb_ot_name_id_t -+HB_OT_NAME_ID_INVALID -+HB_OT_NAME_ID_COPYRIGHT -+HB_OT_NAME_ID_FONT_FAMILY -+HB_OT_NAME_ID_FONT_SUBFAMILY -+HB_OT_NAME_ID_UNIQUE_ID -+HB_OT_NAME_ID_FULL_NAME -+HB_OT_NAME_ID_VERSION_STRING -+HB_OT_NAME_ID_POSTSCRIPT_NAME -+HB_OT_NAME_ID_TRADEMARK -+HB_OT_NAME_ID_MANUFACTURER -+HB_OT_NAME_ID_DESIGNER -+HB_OT_NAME_ID_DESCRIPTION -+HB_OT_NAME_ID_VENDOR_URL -+HB_OT_NAME_ID_DESIGNER_URL -+HB_OT_NAME_ID_LICENSE -+HB_OT_NAME_ID_LICENSE_URL -+HB_OT_NAME_ID_TYPOGRAPHIC_FAMILY -+HB_OT_NAME_ID_TYPOGRAPHIC_SUBFAMILY -+HB_OT_NAME_ID_MAC_FULL_NAME -+HB_OT_NAME_ID_SAMPLE_TEXT -+HB_OT_NAME_ID_CID_FINDFONT_NAME -+HB_OT_NAME_ID_WWS_FAMILY -+HB_OT_NAME_ID_WWS_SUBFAMILY -+HB_OT_NAME_ID_LIGHT_BACKGROUND -+HB_OT_NAME_ID_DARK_BACKGROUND -+HB_OT_NAME_ID_VARIATIONS_PS_PREFIX -+hb_ot_name_entry_t -+hb_ot_name_list_names() -+hb_ot_name_get_utf8() -+hb_ot_name_get_utf16() -+hb_ot_name_get_utf32() - - -Overview of changes leading to 2.0.2 -Saturday, October 20, 2018 -==================================== -- Fix two minor memory access issues in AAT tables. - - -Overview of changes leading to 2.0.1 -Friday, October 19, 2018 -==================================== -- Fix hb-version.h reported release version that went wrong (1.8.0) - with previous release. -- Fix extrapolation in 'trak' table. -- Fix hb-font infinite-recursion issue with some font funcs and - subclassed fonts. -- Implement variation-kerning format in kerx table, although without - variation. -- Fix return value of hb_map_is_empty(). - - -Overview of changes leading to 2.0.0 -Thursday, October 18, 2018 -==================================== -- Added AAT shaping support (morx/kerx/trak). - Automatically used if GSUB/GPOS are not available respectively. - Set HB_OPTIONS=aat env var to have morx/kerx preferred over - GSUB/GPOS. -- Apply TrueType kern table internally, instead of relying on - hb_font_t callbacks. -- Khmer shaper significantly rewritten to better match Uniscribe. -- Indic3 tags ('dev3', etc) are passed to USE shaper. -- .dfont Mac font containers implemented. -- Script- and language-mapping revamped to better use BCP 47. -- Misc USE and Indic fixes. -- Misc everything fixes. -- Too many things to list. Biggest release since 0.9.1, with - over 500 commits in just over 5 weeks! Didn't intend it to - be a big release. Just happened to become. -- hb-ft now locks underlying FT_Face during use. - -API changes: - -- Newly-created hb_font_t's now have our internal "hb-ot-font" - callbacks set on them, so they should work out of the box - without any callbacks set. If callbacks are set, everything - is back to what it was before, the fallback callbacks are - null. If you to get the internal implementation modified, - sub_font it. - -- New hb_font_funcs_set_nominal_glyphs_func() allows speeding - up character to glyph mapping. - -New API: -+HB_FEATURE_GLOBAL_START -+HB_FEATURE_GLOBAL_END -+hb_buffer_set_invisible_glyph() -+hb_buffer_get_invisible_glyph() -+hb_font_funcs_set_nominal_glyphs_func() -+hb_ot_layout_table_select_script() -+hb_ot_layout_script_select_language() -+hb_ot_layout_feature_get_name_ids() -+hb_ot_layout_feature_get_characters() -+hb_name_id_t -+HB_NAME_ID_INVALID -+HB_OT_MAX_TAGS_PER_SCRIPT -+hb_ot_tags_from_script_and_language() -+hb_ot_tags_to_script_and_language() - -Deprecated API: --hb_font_funcs_set_glyph_func() --hb_unicode_eastasian_width_func_t --hb_unicode_funcs_set_eastasian_width_func() --hb_unicode_eastasian_width() --hb_unicode_decompose_compatibility_func_t --HB_UNICODE_MAX_DECOMPOSITION_LEN --hb_unicode_funcs_set_decompose_compatibility_func() --hb_unicode_decompose_compatibility() --hb_font_funcs_set_glyph_h_kerning_func() --hb_font_funcs_set_glyph_v_kerning_func() --hb_font_get_glyph_h_kerning() --hb_font_get_glyph_v_kerning() --hb_font_get_glyph_kerning_for_direction() --hb_ot_layout_table_choose_script() --hb_ot_layout_script_find_language() --hb_ot_tags_from_script() --hb_ot_tag_from_language() - - -Overview of changes leading to 1.9.0 -Monday, September 10, 2018 -==================================== -- Added 'cmap' API to hb_face_t. -- Face-builder API. -- hb-ot-font re-creation should be much leaner now, as the - font tables it uses are cached on hb_face_t now. -- Internal source header file name changes: - hb-*-private.hh is renamed to hb-*.hh. - -New API: -+HB_UNICODE_MAX -+hb_face_collect_unicodes() -+hb_face_collect_variation_selectors() -+hb_face_collect_variation_unicodes() -+hb_face_builder_create() -+hb_face_builder_add_table() - - -Overview of changes leading to 1.8.8 -Tuesday, August 14, 2018 -==================================== -- Fix hb-icu crash on architectures where compare_exchange_weak() can - fail falsely. This bug was introduced in 1.8.4. - https://bugs.chromium.org/p/chromium/issues/detail?id=873568 -- More internal refactoring of atomic operations and singletons. -- API changes: - The following functions do NOT reference their return value before - returning: - * hb_unicode_funcs_get_default() - * hb_glib_get_unicode_funcs() - * hb_icu_get_unicode_funcs() - This is consistent with their naming ("get", instead of "reference") - as well as how they are used in the wild (ie. no one calls destroy() - on their return value.) - - -Overview of changes leading to 1.8.7 -Wednesday, August 8, 2018 -==================================== -- Fix assertion failure with GDEF-blacklisted fonts. - - -Overview of changes leading to 1.8.6 -Tuesday, August 7, 2018 -==================================== -- Internal code shuffling. -- New API to speed up getting advance widths for implementations - that have heavy overhead in get_h_advance callback: -+hb_font_funcs_set_glyph_h_advances_func -+hb_font_funcs_set_glyph_v_advances_func -+hb_font_get_glyph_advances_for_direction -+hb_font_get_glyph_h_advances -+hb_font_get_glyph_h_advances_func_t -+hb_font_get_glyph_v_advances -+hb_font_get_glyph_v_advances_func_t - - -Overview of changes leading to 1.8.5 -Wednesday, August 1, 2018 -==================================== -- Major Khmer shaper improvements to better match Microsoft. -- Indic bug fixes. -- Internal improvements to atomic operations. - - -Overview of changes leading to 1.8.4 -Tuesday, July 17, 2018 -==================================== -- Fix build on non-C++11. -- Use C++-style GCC atomics and C++11 atomics. - - -Overview of changes leading to 1.8.3 -Wednesday, July 11, 2018 -==================================== -- A couple of Indic / USE bug fixes. -- Disable vectorization, as it was causing unaligned access bus error on - certain 32bit architectures. - - -Overview of changes leading to 1.8.2 -Tuesday, July 3, 2018 -==================================== -- Fix infinite loop in Khmer shaper. -- Improve hb_blob_create_from_file() for streams. - - -Overview of changes leading to 1.8.1 -Tuesday, June 12, 2018 -==================================== -- Fix hb-version.h file generation; last two releases went out with wrong ones. -- Add correctness bug in hb_set_t operations, introduced in 1.7.7. -- Remove HB_SUBSET_BUILTIN build option. Not necessary. - - -Overview of changes leading to 1.8.0 -Tuesday, June 5, 2018 -==================================== -- Update to Unicode 11.0.0. - - -Overview of changes leading to 1.7.7 -Tuesday, June 5, 2018 -==================================== -- Lots of internal changes, but not yet exposed externally. -- All HarfBuzz objects are significantly smaller in size now. -- Sinhala: Position repha on top of post-consonant, not base. - This better matches Windows 10 behavior, which was changed - from previous Windows versions. -- New build options: - o New cpp macro HB_NO_ATEXIT - o New cpp macro HB_SUBSET_BUILTIN -- Significant libharfbuzz-subset changes. API subject to change. -- New API in libharfbuzz: - -+hb_blob_create_from_file() -+hb_face_count() - -A hashmap implementation: -+hb-map.h -+HB_MAP_VALUE_INVALID -+hb_map_t -+hb_map_create() -+hb_map_get_empty() -+hb_map_reference() -+hb_map_destroy() -+hb_map_set_user_data() -+hb_map_get_user_data() -+hb_map_allocation_successful() -+hb_map_clear() -+hb_map_is_empty() -+hb_map_get_population() -+hb_map_set() -+hb_map_get() -+hb_map_del() -+hb_map_has() - - -Overview of changes leading to 1.7.6 -Wednesday, March 7, 2018 -==================================== - -- Fix to hb_set_t binary operations. Ouch. -- New experimental harfbuzz-subset library. All of hb-subset.h - is experimental right now and API WILL change. - -- New API: -hb_blob_copy_writable_or_fail() -HB_OT_TAG_BASE -hb_set_previous() -hb_set_previous_range() - - -Overview of changes leading to 1.7.5 -Tuesday, January 30, 2018 -==================================== - -- Separate Khmer shaper from Indic. -- First stab at AAT morx. Not hooked up. -- Misc bug fixes. - - -Overview of changes leading to 1.7.4 -Wednesday, December 20, 2017 -==================================== - -- Fix collect_glyphs() regression caused by hb_set_t changes. - - -Overview of changes leading to 1.7.3 -Monday, December 18, 2017 -==================================== - -- hb_set_t performance tuning and optimizations. -- Speed up collect_glyphs() and reject garbage data. -- In hb_coretext_font_create() set font point-size (ptem). -- Misc fixes. - - -Overview of changes leading to 1.7.2 -Monday, December 4, 2017 -==================================== - -- Optimize hb_set_add_range(). -- Misc fixes. -- New API: -hb_coretext_font_create() - - -Overview of changes leading to 1.7.1 -Tuesday, November 14, 2017 -==================================== - -- Fix atexit object destruction regression. -- Fix minor integer-overflow. - - -Overview of changes leading to 1.7.0 -Monday, November 13, 2017 -==================================== - -- Minor Indic fixes. -- Implement kerning and glyph names in hb-ot-font. -- Various DSO optimization re .data and .bss sizes. -- Make C++11 optional; build fixes. -- Mark all other backends "unsafe-to-break". -- Graphite fix. - - -Overview of changes leading to 1.6.3 -Thursday, October 26th, 2017 -==================================== - -- Fix hb_set_t some more. Should be solid now. -- Implement get_glyph_name() for hb-ot-font. -- Misc fixes. - - -Overview of changes leading to 1.6.2 -Monday, October 23nd, 2017 -==================================== - -- Yesterday's release had a bad crasher; don't use it. That's what - happens when one works on Sunday... - https://github.com/harfbuzz/harfbuzz/issues/578 -- Build fixes for FreeBSD and Chrome Android. - - -Overview of changes leading to 1.6.1 -Sunday, October 22nd, 2017 -==================================== - -- Don't skip over COMBINING GRAPHEME JOINER when ligating, etc. - To be refined: https://github.com/harfbuzz/harfbuzz/issues/554 -- Faster hb_set_t implementation. -- Don't use deprecated ICU API. -- Fix undefined-behavior in Myanmar shaper, introduced in 1.6.0 -- Deprecated API: - hb_set_invert() - - -Overview of changes leading to 1.6.0 -Friday, October the 13th, 2017 -==================================== - -- Update to Unicode 10. - -- Various Indic and Universal Shaping Engine fixes as a result of - HarfBuzz Hackfest with Jonathan Kew at Web Engines Hackfest at - the Igalia offices in A Coruña, Spain. Thanks Igalia for having - us! - -- Implement Unicode Arabic Mark Ordering Algorithm UTR#53. - -- Implement optical sizing / tracking in CoreText backend, using - new API hb_font_set_ptem(). - -- Allow notifying hb_font_t that underlying FT_Face changed sizing, - using new API hb_ft_font_changed(). - -- More Graphite backend RTL fixes. - -- Fix caching of variable font shaping plans. - -- hb-view / hb-shape now accept following new arguments: - - o --unicodes: takes a list of hex numbers that represent Unicode - codepoints. - -New API: -+hb_face_get_table_tags() -+hb_font_set_ptem() -+hb_font_get_ptem() -+hb_ft_font_changed() - - -Overview of changes leading to 1.5.1 -Tuesday, September 5, 2017 -==================================== - -- Fix "unsafe-to-break" in fallback shaping and other corner cases. - All our tests pass with --verify now, meaning unsafe-to-break API - works as expected. -- Add --unicodes to hb-view / hb-shape. -- [indic] Treat Consonant_With_Stacker as consonant. This will need - further tweaking. -- hb_buffer_diff() tweaks. - - -Overview of changes leading to 1.5.0 -Wednesday, August 23, 2017 -==================================== - -- Misc new API, for appending a buffer to another, and for comparing - contents of two buffers for types of differences. - -- New "unsafe-to-break" API. Can be used to speed up reshaping - in line-breaking situations. Essentially, after shaping, it returns - positions in the input string (some of the cluster boundaries) that - are "safe to break" in that if the text is segmented at that position - and two sides reshaped and concatenated, the shaping result is - exactly the same as shaping the text in one piece. - - hb-view and hb-shape and hb-shape now take --verify, which verifies - the above property. - - Some corner cases of the implementation are still not quite working. - Those will be fixed in subsequent releases. - -- New API: - -hb_buffer_append() - -hb_glyph_flags_t -HB_GLYPH_FLAG_UNSAFE_TO_BREAK -HB_GLYPH_FLAG_DEFINED -hb_glyph_info_get_glyph_flags() - -HB_BUFFER_SERIALIZE_FLAG_GLYPH_FLAGS - -hb_buffer_diff_flags_t -HB_BUFFER_DIFF_FLAG_EQUAL -HB_BUFFER_DIFF_FLAG_CONTENT_TYPE_MISMATCH -HB_BUFFER_DIFF_FLAG_LENGTH_MISMATCH -HB_BUFFER_DIFF_FLAG_NOTDEF_PRESENT -HB_BUFFER_DIFF_FLAG_DOTTED_CIRCLE_PRESENT -HB_BUFFER_DIFF_FLAG_CODEPOINT_MISMATCH -HB_BUFFER_DIFF_FLAG_CLUSTER_MISMATCH -HB_BUFFER_DIFF_FLAG_GLYPH_FLAGS_MISMATCH -HB_BUFFER_DIFF_FLAG_POSITION_MISMATCH -hb_buffer_diff - - -Overview of changes leading to 1.4.8 -Tuesday, August 8, 2017 -==================================== - -- Major fix to avar table handling. -- Rename hb-shape --show-message to --trace. -- Build fixes. - - -Overview of changes leading to 1.4.7 -Tuesday, July 18, 2017 -==================================== - -- Multiple Indic, Tibetan, and Cham fixes. -- CoreText: Allow disabling kerning. -- Adjust Arabic feature order again. -- Misc build fixes. - - -Overview of changes leading to 1.4.6 -Sunday, April 23, 2017 -==================================== - -- Graphite2: Fix RTL positioning issue. -- Backlist GDEF of more versions of Padauk and Tahoma. -- New, experimental, cmake alternative build system. - - -Overview of changes leading to 1.4.5 -Friday, March 10, 2017 -==================================== - -- Revert "Fix Context lookup application when moving back after a glyph..." - This introduced memory access problems. To be fixed properly soon. - - -Overview of changes leading to 1.4.4 -Sunday, March 5, 2017 -==================================== - -- Fix Context lookup application when moving back after a glyph deletion. -- Fix buffer-overrun in Bengali. - - -Overview of changes leading to 1.4.3 -Saturday, February 25, 2017 -==================================== - -- Route Adlam script to Arabic shaper. -- Misc fixes. -- New API: - hb_font_set_face() -- Deprecate API: - hb_graphite2_font_get_gr_font() - - -Overview of changes leading to 1.4.2 -Monday, January 23, 2017 -==================================== - -- Implement OpenType Font Variation tables avar/fvar/HVAR/VVAR. -- hb-shape and hb-view now accept --variations. -- New API: - -hb_variation_t -hb_variation_from_string() -hb_variation_to_string() - -hb_font_set_variations() -hb_font_set_var_coords_design() -hb_font_get_var_coords_normalized() - -hb-ot-var.h: -hb_ot_var_axis_t -hb_ot_var_has_data() -hb_ot_var_get_axis_count() -hb_ot_var_get_axes() -hb_ot_var_find_axis() -hb_ot_var_normalize_variations() -hb_ot_var_normalize_coords() - -- MVAR to be implemented later. Access to named instances to be - implemented later as well. - -- Misc fixes. - - -Overview of changes leading to 1.4.1 -Thursday, January 5, 2017 -==================================== - -- Always build and use UCDN for Unicode data by default. - Reduces dependence on version of Unicode data in glib, - specially in the Windows bundles we are shipping, which - have very old glib. - - -Overview of changes leading to 1.4.0 -Thursday, January 5, 2017 -==================================== - -- Merged "OpenType GX" branch which adds core of support for - OpenType 1.8 Font Variations. To that extent, the relevant - new API is: - -New API: -hb_font_set_var_coords_normalized() - - with supporting API: - -New API: -HB_OT_LAYOUT_NO_VARIATIONS_INDEX -hb_ot_layout_table_find_feature_variations() -hb_ot_layout_feature_with_variations_get_lookups() -hb_shape_plan_create2() -hb_shape_plan_create_cached2() - - Currently variations in GSUB/GPOS/GDEF are fully supported, - and no other tables are supported. In particular, fvar/avar - are NOT supported, hence the hb_font_set_var_coords_normalized() - taking normalized coordinates. API to take design coordinates - will be added in the future. - - HVAR/VVAR/MVAR support will also be added to hb-ot-font in the - future. - -- Fix regression in GDEF glyph class processing. -- Add decompositions for Chakma, Limbu, and Balinese in USE shaper. -- Misc fixes. - - -Overview of changes leading to 1.3.4 -Monday, December 5, 2016 -==================================== - -- Fix vertical glyph origin in hb-ot-font. -- Implement CBDT/CBLC color font glyph extents in hb-ot-font. - - -Overview of changes leading to 1.3.3 -Wednesday, September 28, 2016 -==================================== - -- Implement parsing of OpenType MATH table. -New API: -HB_OT_TAG_MATH -HB_OT_MATH_SCRIPT -hb_ot_math_constant_t -hb_ot_math_kern_t -hb_ot_math_glyph_variant_t -hb_ot_math_glyph_part_flags_t -hb_ot_math_glyph_part_t -hb_ot_math_has_data -hb_ot_math_get_constant -hb_ot_math_get_glyph_italics_correction -hb_ot_math_get_glyph_top_accent_attachment -hb_ot_math_get_glyph_kerning -hb_ot_math_is_glyph_extended_shape -hb_ot_math_get_glyph_variants -hb_ot_math_get_min_connector_overlap -hb_ot_math_get_glyph_assembly - - -Overview of changes leading to 1.3.2 -Wednesday, September 27, 2016 -==================================== - -- Fix build of hb-coretext on older OS X versions. - - -Overview of changes leading to 1.3.1 -Wednesday, September 7, 2016 -==================================== - -- Blacklist bad GDEF of more fonts (Padauk). -- More CoreText backend crash fixes with OS X 10.9.5. -- Misc fixes. - - -Overview of changes leading to 1.3.0 -Thursday, July 21, 2016 -==================================== - -- Update to Unicode 9.0.0 -- Move Javanese from Indic shaper to Universal Shaping Engine. -- Allow MultipleSubst to delete a glyph (matching Windows engine). -- Update Universal Shaping Engine to latest draft from Microsoft. -- DirectWrite backend improvements. Note: this backend is for testing ONLY. -- CoreText backend improvements with unreachable fonts. -- Implement symbol fonts (cmap 3.0.0) in hb-ft and hb-ot-font. -- Blacklist bad GDEF of more fonts (Tahoma & others). -- Misc fixes. - - -Overview of changes leading to 1.2.7 -Monday, May 2, 2016 -==================================== - -- Blacklist another version of Times New Roman (Bold) Italic from Windows 7. -- Fix Mongolian Free Variation Selectors shaping with certain fonts. -- Fix Tibetan shorthand contractions shaping. -- Improved list of language tag mappings. -- Unbreak build on Windows CE. -- Make 'glyf' table loading lazy in hb-ot-font. - - -Overview of changes leading to 1.2.6 -Friday, April 8, 2016 -==================================== - -- Blacklist GDEF table of another set of Times New Roman (Bold) Italic. -- DirectWrite backend improvements. Note: DirectWrite backend is - exclusively for our internal testing and should NOT be used in any - production system whatsoever. - - -Overview of changes leading to 1.2.5 -Monday, April 4, 2016 -==================================== - -- Fix GDEF mark-filtering-set, which was broken in 1.2.3. - - -Overview of changes leading to 1.2.4 -Thursday, March 17, 2016 -==================================== - -- Synthesize GDEF glyph class for any glyph that does not have one in GDEF. - I really hope we don't discover broken fonts that shape badly with this - change. -- Misc build and other minor fixes. -- API changes: - - Added HB_NDEBUG. It's fine for production systems to define this to - disable high-overhead debugging checks. However, I also reduced the - overhead of those checks, so it's a non-issue right now. You can - forget it. Just not defining anything at all is fine. - - -Overview of changes leading to 1.2.3 -Thursday, February 25, 2016 -==================================== - -- Blacklist GDEF table of certain versions of Times New Roman (Bold) Italic, - due to bug in glyph class of ASCII double-quote character. This should - address "regression" introduced in 1.2.0 when we switched mark zeroing - in most shapers from BY_UNICODE_LATE to BY_GDEF_LATE. - This fourth release in a week should finally stablize things... - -- hb-ot-font's get_glyph() implementation saw some optimizations. Though, - might be really hard to measure in real-world situations. - -- Also, two rather small API changes: - -We now disable some time-consuming internal bookkeeping if built with NDEBUG -defined. This is a first time that we use NDEBUG to disable debug code. If -there exist production systems that do NOT want to enable NDEBUG, please let -me know and I'll add HB_NDEBUG. - -Added get_nominal_glyph() and get_variation_glyph() instead of get_glyph() - -New API: -- hb_font_get_nominal_glyph_func_t -- hb_font_get_variation_glyph_func_t -- hb_font_funcs_set_nominal_glyph_func() -- hb_font_funcs_set_variation_glyph_func() -- hb_font_get_nominal_glyph() -- hb_font_get_variation_glyph() - -Deprecated API: -- hb_font_get_glyph_func_t -- hb_font_funcs_set_glyph_func() - -Clients that implement their own font-funcs are encouraged to replace -their get_glyph() implementation with a get_nominal_glyph() and -get_variation_glyph() pair. The variation version can assume that -variation_selector argument is not zero. Old (deprecated) functions -will continue working indefinitely using internal gymnastics; it is -just more efficient to use the new functions. - - -Overview of changes leading to 1.2.2 -Wednesday, February 24, 2016 -==================================== - -- Fix regression with mark positioning with fonts that have - non-zero mark advances. This was introduced in 1.2.0 while - trying to make mark and cursive attachments to work together. - I have partially reverted that, so this version is much more - like what we had before. All clients who updated to 1.2.0 - should update to this version. - - -Overview of changes leading to 1.2.1 -Tuesday, February 23, 2016 -==================================== - -- CoreText: Fix bug with wrong scale if font scale was changed later. - https://github.com/libass/libass/issues/212 -- CoreText: Drastically speed up font initialization. -- CoreText: Fix tiny leak. -- Group ZWJ/ZWNJ with previous syllable under cluster-level=0. - https://github.com/harfbuzz/harfbuzz/issues/217 -- Add test/shaping/README.md about how to add tests to the suite. - - -Overview of changes leading to 1.2.0 -Friday, February 19, 2016 -==================================== - -- Fix various issues (hangs mostly) in case of memory allocation failure. -- Change mark zeroing types of most shapers from BY_UNICODE_LATE to - BY_GDEF_LATE. This seems to be what Uniscribe does. -- Change mark zeroing of USE shaper from NONE to BY_GDEF_EARLY. That's - what Windows does. -- Allow GPOS cursive connection on marks, and fix the interaction with - mark attachment. This work resulted in some changes to how mark - attachments work. See: - https://github.com/harfbuzz/harfbuzz/issues/211 - https://github.com/harfbuzz/harfbuzz/commit/86c68c7a2c971efe8e35b1f1bd99401dc8b688d2 -- Graphite2 shaper: improved negative advance handling (eg. Nastaliq). -- Add nmake-based build system for Windows. -- Minor speedup. -- Misc. improvements. - - -Overview of changes leading to 1.1.3 -Monday, January 11, 2016 -==================================== - -- Ported Indic shaper to Unicode 8.0 data. -- Universal Shaping Engine fixes. -- Speed up CoreText shaper when font fallback happens in CoreText. -- Documentation improvements, thanks to Khaled Hosny. -- Very rough directwrite shaper for testing, thanks to Ebrahim Byagowi. -- Misc bug fixes. -- New API: - - * Font extents: - hb_font_extents_t - hb_font_get_font_extents_func_t - hb_font_get_font_h_extents_func_t - hb_font_get_font_v_extents_func_t - hb_font_funcs_set_font_h_extents_func - hb_font_funcs_set_font_v_extents_func - hb_font_get_h_extents - hb_font_get_v_extents - hb_font_get_extents_for_direction - - * Buffer message (aka debug): - hb_buffer_message_func_t - hb_buffer_set_message_func() - Actual message protocol to be fleshed out later. - - -Overview of changes leading to 1.1.2 -Wednesday, November 26, 2015 -==================================== - -- Fix badly-broken fallback shaper that affected terminology. - https://github.com/harfbuzz/harfbuzz/issues/187 -- Fix y_scaling in Graphite shaper. -- API changes: - * An unset glyph_h_origin() function in font-funcs now (sensibly) - implies horizontal origin at 0,0. Ie, the nil callback returns - true instead of false. As such, implementations that have a - glyph_h_origin() that simply returns true, can remove that function - with HarfBuzz >= 1.1.2. This results in a tiny speedup. - - -Overview of changes leading to 1.1.1 -Wednesday, November 24, 2015 -==================================== - -- Build fixes, specially for hb-coretext. - - -Overview of changes leading to 1.1.0 -Wednesday, November 18, 2015 -==================================== - -- Implement 'stch' stretch feature for Syriac Abbreviation Mark. - https://github.com/harfbuzz/harfbuzz/issues/141 -- Disable use of decompose_compatibility() callback. -- Implement "shaping" of various Unicode space characters, even - if the font does not support them. - https://github.com/harfbuzz/harfbuzz/issues/153 -- If font does not support U+2011 NO-BREAK HYPHEN, fallback to - U+2010 HYPHEN. -- Changes resulting from libFuzzer continuous fuzzing: - * Reject font tables that need more than 8 edits, - * Bound buffer growth during shaping to 32x, - * Fix assertions and other issues at OOM / buffer max-growth. -- Misc fixes and optimizations. -- API changes: - * All fonts created with hb_font_create() now inherit from - (ie. have parent) hb_font_get_empty(). - - -Overview of changes leading to 1.0.6 -Thursday, October 15, 2015 -==================================== - -- Reduce max nesting level in OT lookups from 8 to 6. - Should not affect any real font as far as I know. -- Fix memory access issue in ot-font. -- Revert default load-flags of fonts created using hb_ft_font_create() - back to FT_LOAD_DEFAULT|FT_LOAD_NO_HINTING. This was changed in - last release (1.0.5), but caused major issues, so revert. - https://github.com/harfbuzz/harfbuzz/issues/143 - - -Overview of changes leading to 1.0.5 -Tuesday, October 13, 2015 -==================================== - -- Fix multiple memory access bugs discovered using libFuzzer. - https://github.com/harfbuzz/harfbuzz/issues/139 - Everyone should upgrade to this version as soon as possible. - We now have continuous fuzzing set up, to avoid issues like - these creeping in again. -- Misc fixes. - -- New API: - * hb_font_set_parent(). - * hb_ft_font_[sg]et_load_flags() - The default flags for fonts created using hb_ft_font_create() - has changed to default to FT_LOAD_DEFAULT now. Previously it - was defaulting to FT_LOAD_DFEAULT|FT_LOAD_NO_HINTING. - -- API changes: - * Fonts now default to units-per-EM as their scale, instead of 0. - * hb_font_create_sub_font() does NOT make parent font immutable - anymore. hb_font_make_immutable() does. - - -Overview of changes leading to 1.0.4 -Wednesday, September 30, 2015 -==================================== - -- Fix minor out-of-bounds read error. - - -Overview of changes leading to 1.0.3 -Tuesday, September 1, 2015 -==================================== - -- Start of user documentation, from Simon Cozens! -- Implement glyph_extents() for TrueType fonts in hb-ot-font. -- Improve GPOS cursive attachments with conflicting lookups. -- More fixes for cluster-level = 1. -- Uniscribe positioning fix. - - -Overview of changes leading to 1.0.2 -Wednesday, August 19, 2015 -==================================== - -- Fix shaping with cluster-level > 0. -- Fix Uniscribe backend font-size scaling. -- Declare dependencies in harfbuzz.pc. - FreeType is not declared though, to avoid bugs in pkg-config - 0.26 with recursive dependencies. -- Slightly improved debug infrastructure. More to come later. -- Misc build fixes. - - -Overview of changes leading to 1.0.1 -Monday, July 27, 2015 -==================================== - -- Fix out-of-bounds access in USE shaper. - - -Overview of changes leading to 1.0.0 -Sunday, July 26, 2015 -==================================== - -- Implement Universal Shaping Engine: - https://www.microsoft.com/typography/OpenTypeDev/USE/intro.htm - http://blogs.windows.com/bloggingwindows/2015/02/23/windows-shapes-the-worlds-languages/ -- Bump version to 1.0.0. The soname was NOT bumped. - - -Overview of changes leading to 0.9.42 -Thursday, July 26, 2015 -===================================== - -- New API to allow for retrieving finer-grained cluster - mappings if the client desires to handle them. Default - behavior is unchanged. -- Fix cluster merging when removing default-ignorables. -- Update to Unicode 8.0 -- hb-graphite2 fixes. -- Misc fixes. -- Removed HB_NO_MERGE_CLUSTERS hack. -- New API: - hb_buffer_cluster_level_t enum - hb_buffer_get_cluster_level() - hb_buffer_set_cluster_level() - hb-shape / hb-view --cluster-level - - -Overview of changes leading to 0.9.41 -Thursday, June 18, 2015 -===================================== - -- Fix hb-coretext with trailing whitespace in right-to-left. -- New API: hb_buffer_reverse_range(). -- Allow implementing atomic ops in config.h. -- Fix hb_language_t in language bindings. -- Misc fixes. - - -Overview of changes leading to 0.9.40 -Friday, March 20, 2015 -===================================== - -- Another hb-coretext crasher fix. Ouch! -- Happy Norouz! - - -Overview of changes leading to 0.9.39 -Wednesday, March 4, 2015 -===================================== - -- Critical hb-coretext fixes. -- Optimizations and refactoring; no functional change - expected. -- Misc build fixes. - - -Overview of changes leading to 0.9.38 -Friday, January 23, 2015 -===================================== - -- Fix minor out-of-bounds access in Indic shaper. -- Change New Tai Lue shaping engine from South-East Asian to default, - reflecting change in Unicode encoding model. -- Add hb-shape --font-size. Can take up to two numbers for separate - x / y size. -- Fix CoreText and FreeType scale issues with negative scales. -- Reject blobs larger than 2GB. This might break some icu-le-hb clients - that need security fixes. See: - http://www.icu-project.org/trac/ticket/11450 -- Avoid accessing font tables during face destruction, in casce rogue - clients released face data already. -- Fix up gobject-introspection a bit. Python bindings kinda working. - See README.python. -- Misc fixes. -- API additions: - hb_ft_face_create_referenced() - hb_ft_font_create_referenced() - - -Overview of changes leading to 0.9.37 -Wednesday, December 17, 2014 -===================================== - -- Fix out-of-bounds access in Context lookup format 3. -- Indic: Allow ZWJ/ZWNJ before syllable modifiers. - - -Overview of changes leading to 0.9.36 -Thursday, November 20, 2014 -===================================== - -- First time that three months went by without a release since - 0.9.2 was released on August 10, 2012! -- Fix performance bug in hb_ot_collect_glyphs(): - https://bugzilla.mozilla.org/show_bug.cgi?id=1090869 -- Add basic vertical-text support to hb-ot-font. -- Misc build fixes. - - -Overview of changes leading to 0.9.35 -Saturday, August 13, 2014 -===================================== - -- Fix major shape-plan caching bug when more than one shaper were - provided to hb_shape_full() (as exercised by XeTeX). - http://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg1246370.html -- Fix Arabic fallback shaping regression. This was broken in 0.9.32. -- Major hb-coretext fixes. That backend is complete now, including - respecing buffer direction and language, down to vertical writing. -- Build fixes for Windows CE. Should build fine now. -- Misc fixes: - Use atexit() only if it's safe to call from shared library - https://bugs.freedesktop.org/show_bug.cgi?id=82246 - Mandaic had errors in its Unicode Joining_Type - https://bugs.freedesktop.org/show_bug.cgi?id=82306 -- API changes: - - * hb_buffer_clear_contents() does not reset buffer flags now. - - After 763e5466c0a03a7c27020e1e2598e488612529a7, one doesn't - need to set flags for different pieces of text. The flags now - are something the client sets up once, depending on how it - actually uses the buffer. As such, don't clear it in - clear_contents(). - - I don't expect any changes to be needed to any existing client. - - -Overview of changes leading to 0.9.34 -Saturday, August 2, 2014 -===================================== - -- hb_feature_from_string() now accepts CSS font-feature-settings format. -- As a result, hb-shape / hb-view --features also accept CSS-style strings. - Eg, "'liga' off" is accepted now. -- Add old-spec Myanmar shaper: - https://bugs.freedesktop.org/show_bug.cgi?id=81775 -- Don't apply 'calt' in Hangul shaper. -- Fix mark advance zeroing for Hebrew shaper: - https://bugs.freedesktop.org/show_bug.cgi?id=76767 -- Implement Windows-1256 custom Arabic shaping. Only built on Windows, - and requires help from get_glyph(). Used by Firefox. - https://bugzilla.mozilla.org/show_bug.cgi?id=1045139 -- Disable 'liga' in vertical text. -- Build fixes. -- API changes: - - * Make HB_BUFFER_FLAG_BOT/EOT easier to use. - - Previously, we expected users to provide BOT/EOT flags when the - text *segment* was at paragraph boundaries. This meant that for - clients that provide full paragraph to HarfBuzz (eg. Pango), they - had code like this: - - hb_buffer_set_flags (hb_buffer, - (item_offset == 0 ? HB_BUFFER_FLAG_BOT : 0) | - (item_offset + item_length == paragraph_length ? - HB_BUFFER_FLAG_EOT : 0)); - - hb_buffer_add_utf8 (hb_buffer, - paragraph_text, paragraph_length, - item_offset, item_length); - - After this change such clients can simply say: - - hb_buffer_set_flags (hb_buffer, - HB_BUFFER_FLAG_BOT | HB_BUFFER_FLAG_EOT); - - hb_buffer_add_utf8 (hb_buffer, - paragraph_text, paragraph_length, - item_offset, item_length); - - Ie, HarfBuzz itself checks whether the segment is at the beginning/end - of the paragraph. Clients that only pass item-at-a-time to HarfBuzz - continue not setting any flags whatsoever. - - Another way to put it is: if there's pre-context text in the buffer, - HarfBuzz ignores the BOT flag. If there's post-context, it ignores - EOT flag. - - -Overview of changes leading to 0.9.33 -Tuesday, July 22, 2014 -===================================== - -- Turn off ARabic 'cswh' feature that was accidentally turned on. -- Add HB_TAG_MAX_SIGNED. -- Make hb_face_make_immutable() really make face immutable! -- Windows build fixes. - - -Overview of changes leading to 0.9.32 -Thursday, July 17, 2014 -===================================== - -- Apply Arabic shaping features in spec order exactly. -- Another fix for Mongolian free variation selectors. -- For non-Arabic scripts in Arabic shaper apply 'rlig' and 'calt' - together. -- Minor adjustment to U+FFFD logic. -- Fix hb-coretext build. - - -Overview of changes leading to 0.9.31 -Wednesday, July 16, 2014 -===================================== - -- Only accept valid UTF-8/16/32; we missed many cases before. -- Better shaping of invalid UTF-8/16/32. Falls back to - U+FFFD REPLACEMENT CHARACTER now. -- With all changes in this release, the buffer will contain fully - valid Unicode after hb_buffer_add_utf8/16/32 no matter how - broken the input is. This can be overridden though. See below. -- Fix Mongolian Variation Selectors for fonts without GDEF. -- Fix minor invalid buffer access. -- Accept zh-Hant and zh-Hans language tags. hb_ot_tag_to_language() - now uses these instead of private tags. -- Build fixes. -- New API: - * hb_buffer_add_codepoints(). This does what hb_buffer_add_utf32() - used to do, ie. no validity check on the input at all. add_utf32 - now replaces invalid Unicode codepoints with the replacement - character (see below). - * hb_buffer_set_replacement_codepoint() - * hb_buffer_get_replacement_codepoint() - Previously, in hb_buffer_add_utf8 and hb_buffer_add_utf16, when - we detected broken input, we replaced that with (hb_codepoint_t)-1. - This has changed to use U+FFFD now, but can be changed using these - new API. - - -Overview of changes leading to 0.9.30 -Wednesday, July 9, 2014 -===================================== - -- Update to Unicode 7.0.0: - * New scripts Manichaean and Psalter Pahlavi are shaped using - Arabic shaper. - * All the other new scripts to through the generic shaper for - now. -- Minor Indic improvements. -- Fix graphite2 backend cluster mapping [crasher!] -- API changes: - * New HB_SCRIPT_* values for Unicode 7.0 scripts. - * New function hb_ot_layout_language_get_required_feature(). -- Build fixes. - - -Overview of changes leading to 0.9.29 -Thursday, May 29, 2014 -===================================== - -- Implement cmap in hb-ot-font.h. No variation-selectors yet. -- Myanmar: Allow MedialYa+Asat. -- Various Indic fixes: - * Support most characters in Extended Devanagary and Vedic - Unicode blocks. - * Allow digits and a some punctuation as consonant placeholders. -- Build fixes. - - -Overview of changes leading to 0.9.28 -Monday, April 28, 2014 -===================================== - -- Unbreak old-spec Indic shaping. (bug 76705) -- Fix shaping of U+17DD and U+0FC6. -- Add HB_NO_MERGE_CLUSTERS build option. NOT to be enabled by default - for shipping libraries. It's an option for further experimentation - right now. When we are sure how to do it properly, we will add - public run-time API for the functionality. -- Build fixes. - - -Overview of changes leading to 0.9.27 -Tuesday, March 18, 2014 -===================================== - -- Don't use "register" storage class specifier -- Wrap definition of free_langs() with HAVE_ATEXIT -- Add coretext_aat shaper and hb_coretext_face_create() constructor -- If HAVE_ICU_BUILTIN is defined, use hb-icu Unicode callbacks -- Add Myanmar test case from OpenType Myanmar spec -- Only do fallback Hebrew composition if no GPOS 'mark' available -- Allow bootstrapping without gtk-doc -- Use AM_MISSING_PROG for ragel and git -- Typo in ucdn's Makefile.am -- Improve MemoryBarrier() implementation - - -Overview of changes leading to 0.9.26 -Thursday, January 30, 2014 -===================================== - -- Misc fixes. -- Fix application of 'rtlm' feature. -- Automatically apply frac/numr/dnom around U+2044 FRACTION SLASH. -- New header: hb-ot-shape.h -- Uniscribe: fix scratch-buffer accounting. -- Reorder Tai Tham SAKOT to after tone-marks. -- Add Hangul shaper. -- New files: - hb-ot-shape-complex-hangul.cc - hb-ot-shape-complex-hebrew.cc - hb-ot-shape-complex-tibetan.cc -- Disable 'cswh' feature in Arabic shaper. -- Coretext: better handle surrogate pairs. -- Add HB_TAG_MAX and _HB_SCRIPT_MAX_VALUE. - - -Overview of changes leading to 0.9.25 -Wednesday, December 4, 2013 -===================================== - -- Myanmar shaper improvements. -- Avoid font fallback in CoreText backend. -- Additional OpenType language tag mappiongs. -- More aggressive shape-plan caching. -- Build with / require automake 1.13. -- Build with libtool 2.4.2.418 alpha to support ppc64le. - - -Overview of changes leading to 0.9.24 -Tuesday, November 13, 2013 -===================================== - -- Misc compiler warning fixes with clang. -- No functional changes. - - -Overview of changes leading to 0.9.23 -Monday, October 28, 2013 -===================================== - -- "Udupi HarfBuzz Hackfest", Paris, October 14..18 2013. -- Fix (Chain)Context recursion with non-monotone lookup positions. -- Misc Indic bug fixes. -- New Javanese / Buginese shaping, similar to Windows 8.1. - - -Overview of changes leading to 0.9.22 -Thursday, October 3, 2013 -===================================== - -- Fix use-after-end-of-scope in hb_language_from_string(). -- Fix hiding of default_ignorables if font doesn't have space glyph. -- Protect against out-of-range lookup indices. - -- API Changes: - - * Added hb_ot_layout_table_get_lookup_count() - - -Overview of changes leading to 0.9.21 -Monday, September 16, 2013 -===================================== - -- Rename gobject-introspection library name from harfbuzz to HarfBuzz. -- Remove (long disabled) hb-old and hb-icu-le test shapers. -- Misc gtk-doc and gobject-introspection annotations. -- Misc fixes. -- API changes: - - * Add HB_SET_VALUE_INVALID - -Overview of changes leading to 0.9.20 -Thursday, August 29, 2013 -===================================== - -General: -- Misc substitute_closure() fixes. -- Build fixes. - -Documentation: -- gtk-doc boilerplate integrated. Docs are built now, but - contain no contents. By next release hopefully we have - some content in. Enable using --enable-gtk-doc. - -GObject and Introspection: -- Added harfbuzz-gobject library (hb-gobject.h) that has type - bindings for all HarfBuzz objects and enums. Enable using - --with-gobject. -- Added gobject-introspection boilerplate. Nothing useful - right now. Work in progress. Gets enabled automatically if - --with-gobject is used. Override with --disable-introspection. - -OpenType shaper: -- Apply 'mark' in Myanmar shaper. -- Don't apply 'dlig' by default. - -Uniscribe shaper: -- Support user features. -- Fix loading of fonts that are also installed on the system. -- Fix shaping of Arabic Presentation Forms. -- Fix build with wide chars. - -CoreText shaper: -- Support user features. - -Source changes: -- hb_face_t code moved to hb-face.h / hb-face.cc. -- Added hb-deprecated.h. - -API changes: -- Added HB_DISABLE_DEPRECATED. -- Deprecated HB_SCRIPT_CANADIAN_ABORIGINAL; replaced by - HB_SCRIPT_CANADIAN_SYLLABICS. -- Deprecated HB_BUFFER_FLAGS_DEFAULT; replaced by - HB_BUFFER_FLAG_DEFAULT. -- Deprecated HB_BUFFER_SERIALIZE_FLAGS_DEFAULT; replaced by - HB_BUFFER_SERIALIZE_FLAG_DEFAULT. - - -Overview of changes leading to 0.9.19 -Tuesday, July 16, 2013 -===================================== - -- Build fixes. -- Better handling of multiple variation selectors in a row. -- Pass on variation selector to GSUB if not consumed by cmap. -- Fix undefined memory access. -- Add Javanese config to Indic shaper. -- Misc bug fixes. - -Overview of changes leading to 0.9.18 -Tuesday, May 28, 2013 -===================================== - -New build system: - -- All unneeded code is all disabled by default, - -- Uniscribe and CoreText shapers can be enabled with their --with options, - -- icu_le and old shapers cannot be enabled for now, - -- glib, freetype, and cairo will be detected automatically. - They can be force on/off'ed with their --with options, - -- icu and graphite2 are default off, can be enabled with their --with - options, - -Moreover, ICU support is now build into a separate library: -libharfbuzz-icu.so, and a new harfbuzz-icu.pc is shipped for it. -Distros can enable ICU now without every application on earth -getting linked to via libharfbuzz.so. - -For distros I recommend that they make sure they are building --with-glib ---with-freetype --with-cairo, --with-icu, and optionally --with-graphite2; -And package harfbuzz and harfbuzz-icu separately. - - -Overview of changes leading to 0.9.17 -Monday, May 20, 2013 -===================================== - -- Build fixes. -- Fix bug in hb_set_get_min(). -- Fix regression with Arabic mark positioning / width-zeroing. - -Overview of changes leading to 0.9.16 -Friday, April 19, 2013 -===================================== - -- Major speedup in OpenType lookup processing. With the Amiri - Arabic font, this release is over 3x faster than previous - release. All scripts / languages should see this speedup. - -- New --num-iterations option for hb-shape / hb-view; useful for - profiling. - -Overview of changes leading to 0.9.15 -Friday, April 05, 2013 -===================================== - -- Build fixes. -- Fix crasher in graphite2 shaper. -- Fix Arabic mark width zeroing regression. -- Don't compose Hangul jamo into Unicode syllables. - - -Overview of changes leading to 0.9.14 -Thursday, March 21, 2013 -===================================== - -- Build fixes. -- Fix time-consuming sanitize with malicious fonts. -- Implement hb_buffer_deserialize_glyphs() for both json and text. -- Do not ignore Hangul filler characters. -- Indic fixes: - * Fix Malayalam pre-base reordering interaction with post-forms. - * Further adjust ZWJ handling. Should fix known regressions from - 0.9.13. - - -Overview of changes leading to 0.9.13 -Thursday, February 25, 2013 -===================================== - -- Build fixes. -- Ngapi HarfBuzz Hackfest in London (February 2013): - * Fixed all known Indic bugs, - * New Win8-style Myanmar shaper, - * New South-East Asian shaper for Tai Tham, Cham, and New Tai Lue, - * Smartly ignore Default_Ignorable characters (joiners, etc) wheb - matching GSUB/GPOS lookups, - * Fix 'Phags-Pa U+A872 shaping, - * Fix partial disabling of default-on features, - * Allow disabling of TrueType kerning. -- Fix possible crasher with broken fonts with overlapping tables. -- Removed generated files from git again. So, one needs ragel to - bootstrap from the git tree. - -API changes: -- hb_shape() and related APIs now abort if buffer direction is - HB_DIRECTION_INVALID. Previously, hb_shape() was calling - hb_buffer_guess_segment_properties() on the buffer before - shaping. The heuristics in that function are fragile. If the - user really wants the old behvaior, they can call that function - right before calling hb_shape() to get the old behavior. -- hb_blob_create_sub_blob() always creates sub-blob with - HB_MEMORY_MODE_READONLY. See comments for the reason. - - -Overview of changes leading to 0.9.12 -Thursday, January 18, 2013 -===================================== - -- Build fixes for Sun compiler. -- Minor bug fix. - -Overview of changes leading to 0.9.11 -Thursday, January 10, 2013 -===================================== - -- Build fixes. -- Fix GPOS mark attachment with null Anchor offsets. -- [Indic] Fix old-spec reordering of viramas if sequence ends in one. -- Fix multi-threaded shaper data creation crash. -- Add atomic ops for Solaris. - -API changes: -- Rename hb_buffer_clear() to hb_buffer_clear_contents(). - - -Overview of changes leading to 0.9.10 -Thursday, January 3, 2013 -===================================== - -- [Indic] Fixed rendering of Malayalam dot-reph -- Updated OT language tags. -- Updated graphite2 backend. -- Improved hb_ot_layout_get_size_params() logic. -- Improve hb-shape/hb-view help output. -- Fixed hb-set.h implementation to not crash. -- Fixed various issues with hb_ot_layout_collect_lookups(). -- Various build fixes. - -New API: - -hb_graphite2_face_get_gr_face() -hb_graphite2_font_get_gr_font() -hb_coretext_face_get_cg_font() - -Modified API: - -hb_ot_layout_get_size_params() - - -Overview of changes leading to 0.9.9 -Wednesday, December 5, 2012 -==================================== - -- Fix build on Windows. -- Minor improvements. - - -Overview of changes leading to 0.9.8 -Tuesday, December 4, 2012 -==================================== - - -- Actually implement hb_shape_plan_get_shaper (). -- Make UCDB data tables const. -- Lots of internal refactoring in OTLayout tables. -- Flesh out hb_ot_layout_lookup_collect_glyphs(). - -New API: - -hb_ot_layout_collect_lookups() -hb_ot_layout_get_size_params() - - -Overview of changes leading to 0.9.7 -Sunday, November 21, 2012 -==================================== - - -HarfBuzz "All-You-Can-Eat-Sushi" (aka Vancouver) Hackfest and follow-on fixes. - -- Fix Arabic contextual joining using pre-context text. -- Fix Sinhala "split matra" mess. -- Fix Khmer shaping with broken fonts. -- Implement Thai "PUA" shaping for old fonts. -- Do NOT route Kharoshthi script through the Indic shaper. -- Disable fallback positioning for Indic and Thai shapers. -- Misc fixes. - - -hb-shape / hb-view changes: - -- Add --text-before and --text-after -- Add --bot / --eot / --preserve-default-ignorables -- hb-shape --output-format=json - - -New API: - -hb_buffer_clear() - -hb_buffer_flags_t - -HB_BUFFER_FLAGS_DEFAULT -HB_BUFFER_FLAG_BOT -HB_BUFFER_FLAG_EOT -HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES - -hb_buffer_set_flags() -hb_buffer_get_flags() - -HB_BUFFER_SERIALIZE_FLAGS -hb_buffer_serialize_glyphs() -hb_buffer_deserialize_glyphs() -hb_buffer_serialize_list_formats() - -hb_set_add_range() -hb_set_del_range() -hb_set_get_population() -hb_set_next_range() - -hb_face_[sg]et_glyph_count() - -hb_segment_properties_t -HB_SEGMENT_PROPERTIES_DEFAULT -hb_segment_properties_equal() -hb_segment_properties_hash() - -hb_buffer_set_segment_properties() -hb_buffer_get_segment_properties() - -hb_ot_layout_glyph_class_t -hb_ot_layout_get_glyph_class() -hb_ot_layout_get_glyphs_in_class() - -hb_shape_plan_t -hb_shape_plan_create() -hb_shape_plan_create_cached() -hb_shape_plan_get_empty() -hb_shape_plan_reference() -hb_shape_plan_destroy() -hb_shape_plan_set_user_data() -hb_shape_plan_get_user_data() -hb_shape_plan_execute() -hb_shape_plan_get_shaper() - -hb_ot_shape_plan_collect_lookups() - - -API changes: - -- Remove "mask" parameter from hb_buffer_add(). -- Rename hb_ot_layout_would_substitute_lookup() and hb_ot_layout_substitute_closure_lookup(). -- hb-set.h API const correction. -- Renamed hb_set_min/max() to hb_set_get_min/max(). -- Rename hb_ot_layout_feature_get_lookup_indexes() to hb_ot_layout_feature_get_lookups(). -- Rename hb_buffer_guess_properties() to hb_buffer_guess_segment_properties(). - - - -Overview of changes leading to 0.9.6 -Sunday, November 13, 2012 -==================================== - -- Don't clear pre-context text if no new context is provided. -- Fix ReverseChainingSubstLookup, which was totally borked. -- Adjust output format of hb-shape a bit. -- Include config.h.in in-tree. Makes it easier for alternate build systems. -- Fix hb_buffer_set_length(buffer, 0) invalid memory allocation. -- Use ICU LayoutEngine's C API instead of C++. Avoids much headache. -- Drop glyphs for all of Unicode Default_Ignorable characters. -- Misc build fixes. - -Arabic shaper: -- Enable 'dlig' and 'mset' features in Arabic shaper. -- Implement 'Phags-pa shaping, improve Mongolian. - -Indic shaper: -- Decompose Sinhala split matras the way old HarfBuzz / Pango did. -- Initial support for Consonant Medials. -- Start adding new-style Myanmar shaping. -- Make reph and 'pref' logic introspect the font. -- Route Meetei-Mayek through the Indic shaper. -- Don't apply 'liga' in Indic shaper. -- Improve Malayalam pre-base reordering Ra interaction with Chillus. - - - -Overview of changes leading to 0.9.5 -Sunday, October 14, 2012 -==================================== - -- Synthetic-GSUB Arabic fallback shaping. - -- Misc Indic improvements. - -- Add build system support for pthread. - -- Imported UCDN for in-tree Unicode callbacks implementation. - -- Context-aware Arabic joining. - -- Misc other fixes. - -- New API: - - hb_feature_to/from-string() - hb_buffer_[sg]et_content_type() - - - -Overview of changes leading to 0.9.4 -Tuesday, Sep 03, 2012 -==================================== - -- Indic improvements with old-spec Malayalam. - -- Better fallback glyph positioning, specially with Thai / Lao marks. - -- Implement dotted-circle insertion. - -- Better Arabic fallback shaping / ligation. - -- Added ICU LayoutEngine backend for testing. Call it by the 'icu_le' name. - -- Misc fixes. - - - -Overview of changes leading to 0.9.3 -Friday, Aug 18, 2012 -==================================== - -- Fixed fallback mark positioning for left-to-right text. - -- Improve mark positioning for the remaining combining classes. - -- Unbreak Thai and fallback Arabic shaping. - -- Port Arabic shaper to shape-plan caching. - -- Use new ICU normalizer functions. - - - -Overview of changes leading to 0.9.2 -Friday, Aug 10, 2012 -==================================== - -- Over a thousand commits! This is the first major release of HarfBuzz. - -- HarfBuzz is feature-complete now! It should be in par, or better, than - both Pango's shapers and old HarfBuzz / Qt shapers. - -- New Indic shaper, supporting main Indic scripts, Sinhala, and Khmer. - -- Improved Arabic shaper, with fallback Arabic shaping, supporting Arabic, - Sinhala, N'ko, Mongolian, and Mandaic. - -- New Thai / Lao shaper. - -- Tibetan / Hangul support in the generic shaper. - -- Synthetic GDEF support for fonts without a GDEF table. - -- Fallback mark positioning for fonts without a GPOS table. - -- Unicode normalization shaping heuristic during glyph mapping. - -- New experimental Graphite2 backend. - -- New Uniscribe backend (primarily for testing). - -- New CoreText backend (primarily for testing). - -- Major optimization and speedup. - -- Test suites and testing infrastructure (work in progress). - -- Greatly improved hb-view cmdline tool. - -- hb-shape cmdline tool. - -- Unicode 6.1 support. - -Summary of API changes: - -o Changed API: - - - Users are expected to only include main header files now (ie. hb.h, - hb-glib.h, hb-ft.h, ...) - - - All struct tag names had their initial underscore removed. - Ie. "struct _hb_buffer_t" is "struct hb_buffer_t" now. - - - All set_user_data() functions now take a "replace" boolean parameter. - - - hb_buffer_create() takes zero arguments now. - Use hb_buffer_pre_allocate() to pre-allocate. - - - hb_buffer_add_utf*() now accept -1 for length parameteres, - meaning "nul-terminated". - - - hb_direction_t enum values changed. - - - All *_from_string() APIs now take a length parameter to allow for - non-nul-terminated strings. A -1 length means "nul-terminated". - - - Typedef for hb_language_t changed. - - - hb_get_table_func_t renamed to hb_reference_table_func_t. - - - hb_ot_layout_table_choose_script() - - - Various renames in hb-unicode.h. - -o New API: - - - hb_buffer_guess_properties() - Automatically called by hb_shape(). - - - hb_buffer_normalize_glyphs() - - - hb_tag_from_string() - - - hb-coretext.h - - - hb-uniscribe.h - - - hb_face_reference_blob() - - hb_face_[sg]et_index() - - hb_face_set_upem() - - - hb_font_get_glyph_name_func_t - hb_font_get_glyph_from_name_func_t - hb_font_funcs_set_glyph_name_func() - hb_font_funcs_set_glyph_from_name_func() - hb_font_get_glyph_name() - hb_font_get_glyph_from_name() - hb_font_glyph_to_string() - hb_font_glyph_from_string() - - - hb_font_set_funcs_data() - - - hb_ft_font_set_funcs() - - hb_ft_font_get_face() - - - hb-gobject.h (work in progress) - - - hb_ot_shape_glyphs_closure() - hb_ot_layout_substitute_closure_lookup() - - - hb-set.h - - - hb_shape_full() - - - hb_unicode_combining_class_t - - - hb_unicode_compose_func_t - hb_unicode_decompose_func_t - hb_unicode_decompose_compatibility_func_t - hb_unicode_funcs_set_compose_func() - hb_unicode_funcs_set_decompose_func() - hb_unicode_funcs_set_decompose_compatibility_func() - hb_unicode_compose() - hb_unicode_decompose() - hb_unicode_decompose_compatibility() - -o Removed API: - - - hb_ft_get_font_funcs() - - - hb_ot_layout_substitute_start() - hb_ot_layout_substitute_lookup() - hb_ot_layout_substitute_finish() - hb_ot_layout_position_start() - hb_ot_layout_position_lookup() - hb_ot_layout_position_finish() - - - -Overview of changes leading to 0.6.0 -Friday, May 27, 2011 -==================================== - -- Vertical text support in GPOS -- Almost all API entries have unit tests now, under test/ -- All thread-safety issues are fixed - -Summary of API changes follows. - - -* Simple Types API: - - o New API: - HB_LANGUAGE_INVALID - hb_language_get_default() - hb_direction_to_string() - hb_direction_from_string() - hb_script_get_horizontal_direction() - HB_UNTAG() - - o Renamed API: - hb_category_t renamed to hb_unicode_general_category_t - - o Changed API: - hb_language_t is a typed pointers now - - o Removed API: - HB_TAG_STR() - - -* Use ISO 15924 tags for hb_script_t: - - o New API: - hb_script_from_iso15924_tag() - hb_script_to_iso15924_tag() - hb_script_from_string() - - o Changed API: - HB_SCRIPT_* enum members changed value. - - -* Buffer API streamlined: - - o New API: - hb_buffer_reset() - hb_buffer_set_length() - hb_buffer_allocation_successful() - - o Renamed API: - hb_buffer_ensure() renamed to hb_buffer_pre_allocate() - hb_buffer_add_glyph() renamed to hb_buffer_add() - - o Removed API: - hb_buffer_clear() - hb_buffer_clear_positions() - - o Changed API: - hb_buffer_get_glyph_infos() takes an out length parameter now - hb_buffer_get_glyph_positions() takes an out length parameter now - - -* Blob API streamlined: - - o New API: - hb_blob_get_data() - hb_blob_get_data_writable() - - o Renamed API: - hb_blob_create_empty() renamed to hb_blob_get_empty() - - o Removed API: - hb_blob_lock() - hb_blob_unlock() - hb_blob_is_writable() - hb_blob_try_writable() - - o Changed API: - hb_blob_create() takes user_data before destroy now - - -* Unicode functions API: - - o Unicode function vectors can subclass other unicode function vectors now. - Unimplemented callbacks in the subclass automatically chainup to the parent. - - o All hb_unicode_funcs_t callbacks take a user_data now. Their setters - take a user_data and its respective destroy callback. - - o New API: - hb_unicode_funcs_get_empty() - hb_unicode_funcs_get_default() - hb_unicode_funcs_get_parent() - - o Changed API: - hb_unicode_funcs_create() now takes a parent_funcs. - - o Removed func getter functions: - hb_unicode_funcs_get_mirroring_func() - hb_unicode_funcs_get_general_category_func() - hb_unicode_funcs_get_script_func() - hb_unicode_funcs_get_combining_class_func() - hb_unicode_funcs_get_eastasian_width_func() - - -* Face API: - - o Renamed API: - hb_face_get_table() renamed to hb_face_reference_table() - hb_face_create_for_data() renamed to hb_face_create() - - o Changed API: - hb_face_create_for_tables() takes user_data before destroy now - hb_face_reference_table() returns empty blob instead of NULL - hb_get_table_func_t accepts the face as first parameter now - -* Font API: - - o Fonts can subclass other fonts now. Unimplemented callbacks in the - subclass automatically chainup to the parent. When chaining up, - scale is adjusted if the parent font has a different scale. - - o All hb_font_funcs_t callbacks take a user_data now. Their setters - take a user_data and its respective destroy callback. - - o New API: - hb_font_get_parent() - hb_font_funcs_get_empty() - hb_font_create_sub_font() - - o Removed API: - hb_font_funcs_copy() - hb_font_unset_funcs() - - o Removed func getter functions: - hb_font_funcs_get_glyph_func() - hb_font_funcs_get_glyph_advance_func() - hb_font_funcs_get_glyph_extents_func() - hb_font_funcs_get_contour_point_func() - hb_font_funcs_get_kerning_func() - - o Changed API: - hb_font_create() takes a face and references it now - hb_font_set_funcs() takes user_data before destroy now - hb_font_set_scale() accepts signed integers now - hb_font_get_contour_point_func_t now takes glyph first, then point_index - hb_font_get_glyph_func_t returns a success boolean now - - -* Changed object model: - - o All object types have a _get_empty() now: - hb_blob_get_empty() - hb_buffer_get_empty() - hb_face_get_empty() - hb_font_get_empty() - hb_font_funcs_get_empty() - hb_unicode_funcs_get_empty() - - o Added _set_user_data() and _get_user_data() for all object types: - hb_blob_get_user_data() - hb_blob_set_user_data() - hb_buffer_get_user_data() - hb_buffer_set_user_data() - hb_face_get_user_data() - hb_face_set_user_data() - hb_font_funcs_get_user_data() - hb_font_funcs_set_user_data() - hb_font_get_user_data() - hb_font_set_user_data() - hb_unicode_funcs_get_user_data() - hb_unicode_funcs_set_user_data() - - o Removed the _get_reference_count() from all object types: - hb_blob_get_reference_count() - hb_buffer_get_reference_count() - hb_face_get_reference_count() - hb_font_funcs_get_reference_count() - hb_font_get_reference_count() - hb_unicode_funcs_get_reference_count() - - o Added _make_immutable() and _is_immutable() for all object types except for buffer: - hb_blob_make_immutable() - hb_blob_is_immutable() - hb_face_make_immutable() - hb_face_is_immutable() - - -* Changed API for vertical text support - - o The following callbacks where removed: - hb_font_get_glyph_advance_func_t - hb_font_get_kerning_func_t - - o The following new callbacks added instead: - hb_font_get_glyph_h_advance_func_t - hb_font_get_glyph_v_advance_func_t - hb_font_get_glyph_h_origin_func_t - hb_font_get_glyph_v_origin_func_t - hb_font_get_glyph_h_kerning_func_t - hb_font_get_glyph_v_kerning_func_t - - o The following API removed as such: - hb_font_funcs_set_glyph_advance_func() - hb_font_funcs_set_kerning_func() - hb_font_get_glyph_advance() - hb_font_get_kerning() - - o New API added instead: - hb_font_funcs_set_glyph_h_advance_func() - hb_font_funcs_set_glyph_v_advance_func() - hb_font_funcs_set_glyph_h_origin_func() - hb_font_funcs_set_glyph_v_origin_func() - hb_font_funcs_set_glyph_h_kerning_func() - hb_font_funcs_set_glyph_v_kerning_func() - hb_font_get_glyph_h_advance() - hb_font_get_glyph_v_advance() - hb_font_get_glyph_h_origin() - hb_font_get_glyph_v_origin() - hb_font_get_glyph_h_kerning() - hb_font_get_glyph_v_kerning() - - o The following higher-leve API added for convenience: - hb_font_get_glyph_advance_for_direction() - hb_font_get_glyph_origin_for_direction() - hb_font_add_glyph_origin_for_direction() - hb_font_subtract_glyph_origin_for_direction() - hb_font_get_glyph_kerning_for_direction() - hb_font_get_glyph_extents_for_origin() - hb_font_get_glyph_contour_point_for_origin() - - -* OpenType Layout API: - - o New API: - hb_ot_layout_position_start() - hb_ot_layout_substitute_start() - hb_ot_layout_substitute_finish() - - -* Glue code: - - o New API: - hb_glib_script_to_script() - hb_glib_script_from_script() - hb_icu_script_to_script() - hb_icu_script_from_script() - - -* Version API added: - - o New API: - HB_VERSION_MAJOR - HB_VERSION_MINOR - HB_VERSION_MICRO - HB_VERSION_STRING - HB_VERSION_CHECK() - hb_version() - hb_version_string() - hb_version_check() - - diff --git a/thirdparty/harfbuzz/src/hb-aat-layout-ankr-table.hh b/thirdparty/harfbuzz/src/hb-aat-layout-ankr-table.hh index f2785a6f58..63fac84524 100644 --- a/thirdparty/harfbuzz/src/hb-aat-layout-ankr-table.hh +++ b/thirdparty/harfbuzz/src/hb-aat-layout-ankr-table.hh @@ -54,7 +54,7 @@ struct Anchor DEFINE_SIZE_STATIC (4); }; -typedef LArrayOf<Anchor> GlyphAnchors; +typedef Array32Of<Anchor> GlyphAnchors; struct ankr { @@ -64,7 +64,7 @@ struct ankr unsigned int i, unsigned int num_glyphs) const { - const NNOffsetTo<GlyphAnchors> *offset = (this+lookupTable).get_value (glyph_id, num_glyphs); + const NNOffset16To<GlyphAnchors> *offset = (this+lookupTable).get_value (glyph_id, num_glyphs); if (!offset) return Null (Anchor); const GlyphAnchors &anchors = &(this+anchorData) + *offset; @@ -83,9 +83,9 @@ struct ankr protected: HBUINT16 version; /* Version number (set to zero) */ HBUINT16 flags; /* Flags (currently unused; set to zero) */ - LOffsetTo<Lookup<NNOffsetTo<GlyphAnchors>>> + Offset32To<Lookup<NNOffset16To<GlyphAnchors>>> lookupTable; /* Offset to the table's lookup table */ - LNNOffsetTo<HBUINT8> + NNOffset32To<HBUINT8> anchorData; /* Offset to the glyph data table */ public: diff --git a/thirdparty/harfbuzz/src/hb-aat-layout-common.hh b/thirdparty/harfbuzz/src/hb-aat-layout-common.hh index 98ed20d8eb..e70ce97174 100644 --- a/thirdparty/harfbuzz/src/hb-aat-layout-common.hh +++ b/thirdparty/harfbuzz/src/hb-aat-layout-common.hh @@ -30,6 +30,9 @@ #include "hb-aat-layout.hh" #include "hb-open-type.hh" +namespace OT { +struct GDEF; +}; namespace AAT { @@ -164,7 +167,7 @@ struct LookupSegmentArray HBGlyphID last; /* Last GlyphID in this segment */ HBGlyphID first; /* First GlyphID in this segment */ - NNOffsetTo<UnsizedArrayOf<T>> + NNOffset16To<UnsizedArrayOf<T>> valuesZ; /* A 16-bit offset from the start of * the table to the data. */ public: @@ -659,7 +662,7 @@ struct ClassTable } protected: HBGlyphID firstGlyph; /* First glyph index included in the trimmed array. */ - ArrayOf<HBUCHAR> classArray; /* The class codes (indexed by glyph index minus + Array16Of<HBUCHAR> classArray; /* The class codes (indexed by glyph index minus * firstGlyph). */ public: DEFINE_SIZE_ARRAY (4, classArray); @@ -678,7 +681,8 @@ struct ObsoleteTypes const void *base, const T *array) { - return (offset - ((const char *) array - (const char *) base)) / T::static_size; + /* https://github.com/harfbuzz/harfbuzz/issues/2816 */ + return (offset - unsigned ((const char *) array - (const char *) base)) / T::static_size; } template <typename T> static unsigned int byteOffsetToIndex (unsigned int offset, @@ -862,6 +866,7 @@ struct hb_aat_apply_context_t : hb_buffer_t *buffer; hb_sanitize_context_t sanitizer; const ankr *ankr_table; + const OT::GDEF *gdef_table; /* Unused. For debug tracing only. */ unsigned int lookup_index; diff --git a/thirdparty/harfbuzz/src/hb-aat-layout-feat-table.hh b/thirdparty/harfbuzz/src/hb-aat-layout-feat-table.hh index 359e859cfc..573f0cf9f6 100644 --- a/thirdparty/harfbuzz/src/hb-aat-layout-feat-table.hh +++ b/thirdparty/harfbuzz/src/hb-aat-layout-feat-table.hh @@ -144,7 +144,7 @@ struct FeatureName protected: HBUINT16 feature; /* Feature type. */ HBUINT16 nSettings; /* The number of records in the setting name array. */ - LNNOffsetTo<UnsizedArrayOf<SettingName>> + NNOffset32To<UnsizedArrayOf<SettingName>> settingTableZ; /* Offset in bytes from the beginning of this table to * this feature's setting name array. The actual type of * record this offset refers to will depend on the diff --git a/thirdparty/harfbuzz/src/hb-aat-layout-just-table.hh b/thirdparty/harfbuzz/src/hb-aat-layout-just-table.hh index 49506e9f5a..556d4ad75b 100644 --- a/thirdparty/harfbuzz/src/hb-aat-layout-just-table.hh +++ b/thirdparty/harfbuzz/src/hb-aat-layout-just-table.hh @@ -79,7 +79,7 @@ struct DecompositionAction * to decompose before more frequent ones. The ligatures * on the line of text will decompose in increasing * value of this field. */ - ArrayOf<HBUINT16> + Array16Of<HBUINT16> decomposedglyphs; /* Number of 16-bit glyph indexes that follow; * the ligature will be decomposed into these glyphs. @@ -310,7 +310,7 @@ struct WidthDeltaPair DEFINE_SIZE_STATIC (24); }; -typedef OT::LArrayOf<WidthDeltaPair> WidthDeltaCluster; +typedef OT::Array32Of<WidthDeltaPair> WidthDeltaCluster; struct JustificationCategory { @@ -358,20 +358,20 @@ struct JustificationHeader } protected: - OffsetTo<JustificationCategory> + Offset16To<JustificationCategory> justClassTable; /* Offset to the justification category state table. */ - OffsetTo<WidthDeltaCluster> + Offset16To<WidthDeltaCluster> wdcTable; /* Offset from start of justification table to start * of the subtable containing the width delta factors * for the glyphs in your font. * * The width delta clusters table. */ - OffsetTo<PostcompensationActionChain> + Offset16To<PostcompensationActionChain> pcTable; /* Offset from start of justification table to start * of postcompensation subtable (set to zero if none). * * The postcompensation subtable, if present in the font. */ - Lookup<OffsetTo<WidthDeltaCluster>> + Lookup<Offset16To<WidthDeltaCluster>> lookupTable; /* Lookup table associating glyphs with width delta * clusters. See the description of Width Delta Clusters * table for details on how to interpret the lookup values. */ @@ -398,13 +398,13 @@ struct just FixedVersion<>version; /* Version of the justification table * (0x00010000u for version 1.0). */ HBUINT16 format; /* Format of the justification table (set to 0). */ - OffsetTo<JustificationHeader> + Offset16To<JustificationHeader> horizData; /* Byte offset from the start of the justification table * to the header for tables that contain justification * information for horizontal text. * If you are not including this information, * store 0. */ - OffsetTo<JustificationHeader> + Offset16To<JustificationHeader> vertData; /* ditto, vertical */ public: diff --git a/thirdparty/harfbuzz/src/hb-aat-layout-kerx-table.hh b/thirdparty/harfbuzz/src/hb-aat-layout-kerx-table.hh index 1cd412164e..d0eacf0e61 100644 --- a/thirdparty/harfbuzz/src/hb-aat-layout-kerx-table.hh +++ b/thirdparty/harfbuzz/src/hb-aat-layout-kerx-table.hh @@ -710,18 +710,18 @@ struct KerxSubTableFormat6 { struct Long { - LNNOffsetTo<Lookup<HBUINT32>> rowIndexTable; - LNNOffsetTo<Lookup<HBUINT32>> columnIndexTable; - LNNOffsetTo<UnsizedArrayOf<FWORD32>> array; + NNOffset32To<Lookup<HBUINT32>> rowIndexTable; + NNOffset32To<Lookup<HBUINT32>> columnIndexTable; + NNOffset32To<UnsizedArrayOf<FWORD32>> array; } l; struct Short { - LNNOffsetTo<Lookup<HBUINT16>> rowIndexTable; - LNNOffsetTo<Lookup<HBUINT16>> columnIndexTable; - LNNOffsetTo<UnsizedArrayOf<FWORD>> array; + NNOffset32To<Lookup<HBUINT16>> rowIndexTable; + NNOffset32To<Lookup<HBUINT16>> columnIndexTable; + NNOffset32To<UnsizedArrayOf<FWORD>> array; } s; } u; - LNNOffsetTo<UnsizedArrayOf<FWORD>> vector; + NNOffset32To<UnsizedArrayOf<FWORD>> vector; public: DEFINE_SIZE_STATIC (KernSubTableHeader::static_size + 24); }; diff --git a/thirdparty/harfbuzz/src/hb-aat-layout-morx-table.hh b/thirdparty/harfbuzz/src/hb-aat-layout-morx-table.hh index e3bc268d26..a807bdcfc5 100644 --- a/thirdparty/harfbuzz/src/hb-aat-layout-morx-table.hh +++ b/thirdparty/harfbuzz/src/hb-aat-layout-morx-table.hh @@ -30,6 +30,7 @@ #include "hb-open-type.hh" #include "hb-aat-layout-common.hh" #include "hb-ot-layout-common.hh" +#include "hb-ot-layout-gdef-table.hh" #include "hb-aat-map.hh" /* @@ -215,7 +216,9 @@ struct ContextualSubtable hb_aat_apply_context_t *c_) : ret (false), c (c_), + gdef (*c->gdef_table), mark_set (false), + has_glyph_classes (gdef.has_glyph_classes ()), mark (0), table (table_), subs (table+table->substitutionTables) {} @@ -263,6 +266,9 @@ struct ContextualSubtable { buffer->unsafe_to_break (mark, hb_min (buffer->idx + 1, buffer->len)); buffer->info[mark].codepoint = *replacement; + if (has_glyph_classes) + _hb_glyph_info_set_glyph_props (&buffer->info[mark], + gdef.get_glyph_props (*replacement)); ret = true; } @@ -287,6 +293,9 @@ struct ContextualSubtable if (replacement) { buffer->info[idx].codepoint = *replacement; + if (has_glyph_classes) + _hb_glyph_info_set_glyph_props (&buffer->info[idx], + gdef.get_glyph_props (*replacement)); ret = true; } @@ -301,10 +310,12 @@ struct ContextualSubtable bool ret; private: hb_aat_apply_context_t *c; + const OT::GDEF &gdef; bool mark_set; + bool has_glyph_classes; unsigned int mark; const ContextualSubtable *table; - const UnsizedOffsetListOf<Lookup<HBGlyphID>, HBUINT, false> &subs; + const UnsizedListOfOffset16To<Lookup<HBGlyphID>, HBUINT, false> &subs; }; bool apply (hb_aat_apply_context_t *c) const @@ -348,7 +359,7 @@ struct ContextualSubtable protected: StateTable<Types, EntryData> machine; - NNOffsetTo<UnsizedOffsetListOf<Lookup<HBGlyphID>, HBUINT, false>, HBUINT> + NNOffsetTo<UnsizedListOfOffset16To<Lookup<HBGlyphID>, HBUINT, false>, HBUINT> substitutionTables; public: DEFINE_SIZE_STATIC (20); @@ -599,6 +610,9 @@ struct NoncontextualSubtable { TRACE_APPLY (this); + const OT::GDEF &gdef (*c->gdef_table); + bool has_glyph_classes = gdef.has_glyph_classes (); + bool ret = false; unsigned int num_glyphs = c->face->get_num_glyphs (); @@ -610,6 +624,9 @@ struct NoncontextualSubtable if (replacement) { info[i].codepoint = *replacement; + if (has_glyph_classes) + _hb_glyph_info_set_glyph_props (&info[i], + gdef.get_glyph_props (*replacement)); ret = true; } } diff --git a/thirdparty/harfbuzz/src/hb-aat-layout-opbd-table.hh b/thirdparty/harfbuzz/src/hb-aat-layout-opbd-table.hh index 8c04a6482f..b1a1512821 100644 --- a/thirdparty/harfbuzz/src/hb-aat-layout-opbd-table.hh +++ b/thirdparty/harfbuzz/src/hb-aat-layout-opbd-table.hh @@ -58,7 +58,7 @@ struct opbdFormat0 bool get_bounds (hb_font_t *font, hb_codepoint_t glyph_id, hb_glyph_extents_t *extents, const void *base) const { - const OffsetTo<OpticalBounds> *bounds_offset = lookupTable.get_value (glyph_id, font->face->get_num_glyphs ()); + const Offset16To<OpticalBounds> *bounds_offset = lookupTable.get_value (glyph_id, font->face->get_num_glyphs ()); if (!bounds_offset) return false; const OpticalBounds &bounds = base+*bounds_offset; @@ -79,7 +79,7 @@ struct opbdFormat0 } protected: - Lookup<OffsetTo<OpticalBounds>> + Lookup<Offset16To<OpticalBounds>> lookupTable; /* Lookup table associating glyphs with the four * int16 values for the left-side, top-side, * right-side, and bottom-side optical bounds. */ @@ -92,7 +92,7 @@ struct opbdFormat1 bool get_bounds (hb_font_t *font, hb_codepoint_t glyph_id, hb_glyph_extents_t *extents, const void *base) const { - const OffsetTo<OpticalBounds> *bounds_offset = lookupTable.get_value (glyph_id, font->face->get_num_glyphs ()); + const Offset16To<OpticalBounds> *bounds_offset = lookupTable.get_value (glyph_id, font->face->get_num_glyphs ()); if (!bounds_offset) return false; const OpticalBounds &bounds = base+*bounds_offset; @@ -116,7 +116,7 @@ struct opbdFormat1 } protected: - Lookup<OffsetTo<OpticalBounds>> + Lookup<Offset16To<OpticalBounds>> lookupTable; /* Lookup table associating glyphs with the four * int16 values for the left-side, top-side, * right-side, and bottom-side optical bounds. */ diff --git a/thirdparty/harfbuzz/src/hb-aat-layout-trak-table.hh b/thirdparty/harfbuzz/src/hb-aat-layout-trak-table.hh index baa1c72020..68bcb2396f 100644 --- a/thirdparty/harfbuzz/src/hb-aat-layout-trak-table.hh +++ b/thirdparty/harfbuzz/src/hb-aat-layout-trak-table.hh @@ -66,7 +66,7 @@ struct TrackTableEntry NameID trackNameID; /* The 'name' table index for this track. * (a short word or phrase like "loose" * or "very tight") */ - NNOffsetTo<UnsizedArrayOf<FWORD>> + NNOffset16To<UnsizedArrayOf<FWORD>> valuesZ; /* Offset from start of tracking table to * per-size tracking values for this track. */ @@ -141,7 +141,7 @@ struct TrackData protected: HBUINT16 nTracks; /* Number of separate tracks included in this table. */ HBUINT16 nSizes; /* Number of point sizes included in this table. */ - LNNOffsetTo<UnsizedArrayOf<HBFixed>> + NNOffset32To<UnsizedArrayOf<HBFixed>> sizeTable; /* Offset from start of the tracking table to * Array[nSizes] of size values.. */ UnsizedArrayOf<TrackTableEntry> @@ -212,10 +212,10 @@ struct trak FixedVersion<>version; /* Version of the tracking table * (0x00010000u for version 1.0). */ HBUINT16 format; /* Format of the tracking table (set to 0). */ - OffsetTo<TrackData> + Offset16To<TrackData> horizData; /* Offset from start of tracking table to TrackData * for horizontal text (or 0 if none). */ - OffsetTo<TrackData> + Offset16To<TrackData> vertData; /* Offset from start of tracking table to TrackData * for vertical text (or 0 if none). */ HBUINT16 reserved; /* Reserved. Set to 0. */ diff --git a/thirdparty/harfbuzz/src/hb-aat-layout.cc b/thirdparty/harfbuzz/src/hb-aat-layout.cc index 0e9f2b4954..e2d4de2ccd 100644 --- a/thirdparty/harfbuzz/src/hb-aat-layout.cc +++ b/thirdparty/harfbuzz/src/hb-aat-layout.cc @@ -55,6 +55,7 @@ AAT::hb_aat_apply_context_t::hb_aat_apply_context_t (const hb_ot_shape_plan_t *p buffer (buffer_), sanitizer (), ankr_table (&Null (AAT::ankr)), + gdef_table (face->table.GDEF->table), lookup_index (0) { sanitizer.init (blob); @@ -79,7 +80,7 @@ AAT::hb_aat_apply_context_t::set_ankr_table (const AAT::ankr *ankr_table_) * @short_description: Apple Advanced Typography Layout * @include: hb-aat.h * - * Functions for querying AAT Layout features in the font face. + * Functions for querying AAT Layout features in the font face. * * HarfBuzz supports all of the AAT tables used to implement shaping. Other * AAT tables and their associated features are not supported. @@ -172,13 +173,13 @@ static const hb_aat_feature_mapping_t feature_mappings[] = {HB_TAG ('z','e','r','o'), HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS, HB_AAT_LAYOUT_FEATURE_SELECTOR_SLASHED_ZERO_ON, HB_AAT_LAYOUT_FEATURE_SELECTOR_SLASHED_ZERO_OFF}, }; -/** +/** * hb_aat_layout_find_feature_mapping: * @tag: The requested #hb_tag_t feature tag * * Fetches the AAT feature-and-selector combination that corresponds * to a given OpenType feature tag. - * + * * Return value: the AAT features and selectors corresponding to the * OpenType feature tag queried * @@ -248,7 +249,9 @@ hb_aat_layout_substitute (const hb_ot_shape_plan_t *plan, if (morx.has_data ()) { AAT::hb_aat_apply_context_t c (plan, font, buffer, morx_blob); + if (!buffer->message (font, "start table morx")) return; morx.apply (&c); + (void) buffer->message (font, "end table morx"); return; } @@ -257,7 +260,9 @@ hb_aat_layout_substitute (const hb_ot_shape_plan_t *plan, if (mort.has_data ()) { AAT::hb_aat_apply_context_t c (plan, font, buffer, mort_blob); + if (!buffer->message (font, "start table mort")) return; mort.apply (&c); + (void) buffer->message (font, "end table mort"); return; } } @@ -313,8 +318,10 @@ hb_aat_layout_position (const hb_ot_shape_plan_t *plan, const AAT::kerx& kerx = *kerx_blob->as<AAT::kerx> (); AAT::hb_aat_apply_context_t c (plan, font, buffer, kerx_blob); + if (!buffer->message (font, "start table kerx")) return; c.set_ankr_table (font->face->table.ankr.get ()); kerx.apply (&c); + (void) buffer->message (font, "end table kerx"); } diff --git a/thirdparty/harfbuzz/src/hb-aat-ltag-table.hh b/thirdparty/harfbuzz/src/hb-aat-ltag-table.hh index 711f9aa6c1..6d771e1513 100644 --- a/thirdparty/harfbuzz/src/hb-aat-ltag-table.hh +++ b/thirdparty/harfbuzz/src/hb-aat-ltag-table.hh @@ -50,7 +50,7 @@ struct FTStringRange } protected: - NNOffsetTo<UnsizedArrayOf<HBUINT8>> + NNOffset16To<UnsizedArrayOf<HBUINT8>> tag; /* Offset from the start of the table to * the beginning of the string */ HBUINT16 length; /* String length (in bytes) */ @@ -80,7 +80,7 @@ struct ltag protected: HBUINT32 version; /* Table version; currently 1 */ HBUINT32 flags; /* Table flags; currently none defined */ - LArrayOf<FTStringRange> + Array32Of<FTStringRange> tagRanges; /* Range for each tag's string */ public: DEFINE_SIZE_ARRAY (12, tagRanges); diff --git a/thirdparty/harfbuzz/src/hb-algs.hh b/thirdparty/harfbuzz/src/hb-algs.hh index bc170b0546..bbe097fe01 100644 --- a/thirdparty/harfbuzz/src/hb-algs.hh +++ b/thirdparty/harfbuzz/src/hb-algs.hh @@ -760,6 +760,14 @@ static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; } #define ARRAY_LENGTH_CONST(__array) ((signed int) (sizeof (__array) / sizeof (__array[0]))) +static inline void * +hb_memcpy (void *__restrict dst, const void *__restrict src, size_t len) +{ + /* It's illegal to pass 0 as size to memcpy. */ + if (unlikely (!len)) return dst; + return memcpy (dst, src, len); +} + static inline int hb_memcmp (const void *a, const void *b, unsigned int len) { @@ -1151,30 +1159,48 @@ hb_codepoint_parse (const char *s, unsigned int len, int base, hb_codepoint_t *o /* Operators. */ -struct hb_bitwise_and +struct { HB_PARTIALIZE(2); template <typename T> constexpr auto operator () (const T &a, const T &b) const HB_AUTO_RETURN (a & b) } HB_FUNCOBJ (hb_bitwise_and); -struct hb_bitwise_or +struct { HB_PARTIALIZE(2); template <typename T> constexpr auto operator () (const T &a, const T &b) const HB_AUTO_RETURN (a | b) } HB_FUNCOBJ (hb_bitwise_or); -struct hb_bitwise_xor +struct { HB_PARTIALIZE(2); template <typename T> constexpr auto operator () (const T &a, const T &b) const HB_AUTO_RETURN (a ^ b) } HB_FUNCOBJ (hb_bitwise_xor); -struct hb_bitwise_sub +struct +{ HB_PARTIALIZE(2); + template <typename T> constexpr auto + operator () (const T &a, const T &b) const HB_AUTO_RETURN (~a & b) +} +HB_FUNCOBJ (hb_bitwise_lt); +struct { HB_PARTIALIZE(2); template <typename T> constexpr auto operator () (const T &a, const T &b) const HB_AUTO_RETURN (a & ~b) } -HB_FUNCOBJ (hb_bitwise_sub); +HB_FUNCOBJ (hb_bitwise_gt); // aka sub +struct +{ HB_PARTIALIZE(2); + template <typename T> constexpr auto + operator () (const T &a, const T &b) const HB_AUTO_RETURN (~a | b) +} +HB_FUNCOBJ (hb_bitwise_le); +struct +{ HB_PARTIALIZE(2); + template <typename T> constexpr auto + operator () (const T &a, const T &b) const HB_AUTO_RETURN (a | ~b) +} +HB_FUNCOBJ (hb_bitwise_ge); struct { template <typename T> constexpr auto @@ -1197,6 +1223,12 @@ HB_FUNCOBJ (hb_sub); struct { HB_PARTIALIZE(2); template <typename T, typename T2> constexpr auto + operator () (const T &a, const T2 &b) const HB_AUTO_RETURN (b - a) +} +HB_FUNCOBJ (hb_rsub); +struct +{ HB_PARTIALIZE(2); + template <typename T, typename T2> constexpr auto operator () (const T &a, const T2 &b) const HB_AUTO_RETURN (a * b) } HB_FUNCOBJ (hb_mul); diff --git a/thirdparty/harfbuzz/src/hb-array.hh b/thirdparty/harfbuzz/src/hb-array.hh index 02bd8d81c2..ab0dd6ebe3 100644 --- a/thirdparty/harfbuzz/src/hb-array.hh +++ b/thirdparty/harfbuzz/src/hb-array.hh @@ -36,6 +36,14 @@ template <typename Type> struct hb_sorted_array_t; +enum hb_not_found_t +{ + HB_NOT_FOUND_DONT_STORE, + HB_NOT_FOUND_STORE, + HB_NOT_FOUND_STORE_CLOSEST, +}; + + template <typename Type> struct hb_array_t : hb_iter_with_fallback_t<hb_array_t<Type>, Type&> { @@ -139,7 +147,9 @@ struct hb_array_t : hb_iter_with_fallback_t<hb_array_t<Type>, Type&> return lfind (x, &i) ? &this->arrayZ[i] : not_found; } template <typename T> - bool lfind (const T &x, unsigned *pos = nullptr) const + bool lfind (const T &x, unsigned *pos = nullptr, + hb_not_found_t not_found = HB_NOT_FOUND_DONT_STORE, + unsigned int to_store = (unsigned int) -1) const { for (unsigned i = 0; i < length; ++i) if (hb_equal (x, this->arrayZ[i])) @@ -149,6 +159,22 @@ struct hb_array_t : hb_iter_with_fallback_t<hb_array_t<Type>, Type&> return true; } + if (pos) + { + switch (not_found) + { + case HB_NOT_FOUND_DONT_STORE: + break; + + case HB_NOT_FOUND_STORE: + *pos = to_store; + break; + + case HB_NOT_FOUND_STORE_CLOSEST: + *pos = length; + break; + } + } return false; } @@ -219,7 +245,7 @@ struct hb_array_t : hb_iter_with_fallback_t<hb_array_t<Type>, Type&> unsigned P = sizeof (Type), hb_enable_if (P == 1)> const T *as () const - { return length < hb_null_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); } + { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); } template <typename T, unsigned P = sizeof (Type), @@ -231,9 +257,9 @@ struct hb_array_t : hb_iter_with_fallback_t<hb_array_t<Type>, Type&> && (unsigned int) (arrayZ + length - (const char *) p) >= size; } - /* Only call if you allocated the underlying array using malloc() or similar. */ - void free () - { ::free ((void *) arrayZ); arrayZ = nullptr; length = 0; } + /* Only call if you allocated the underlying array using hb_malloc() or similar. */ + void fini () + { hb_free ((void *) arrayZ); arrayZ = nullptr; length = 0; } template <typename hb_serialize_context_t> hb_array_t copy (hb_serialize_context_t *c) const @@ -266,13 +292,6 @@ template <typename T, unsigned int length_> inline hb_array_t<T> hb_array (T (&array_)[length_]) { return hb_array_t<T> (array_); } -enum hb_bfind_not_found_t -{ - HB_BFIND_NOT_FOUND_DONT_STORE, - HB_BFIND_NOT_FOUND_STORE, - HB_BFIND_NOT_FOUND_STORE_CLOSEST, -}; - template <typename Type> struct hb_sorted_array_t : hb_iter_t<hb_sorted_array_t<Type>, Type&>, @@ -323,7 +342,7 @@ struct hb_sorted_array_t : } template <typename T> bool bfind (const T &x, unsigned int *i = nullptr, - hb_bfind_not_found_t not_found = HB_BFIND_NOT_FOUND_DONT_STORE, + hb_not_found_t not_found = HB_NOT_FOUND_DONT_STORE, unsigned int to_store = (unsigned int) -1) const { unsigned pos; @@ -339,14 +358,14 @@ struct hb_sorted_array_t : { switch (not_found) { - case HB_BFIND_NOT_FOUND_DONT_STORE: + case HB_NOT_FOUND_DONT_STORE: break; - case HB_BFIND_NOT_FOUND_STORE: + case HB_NOT_FOUND_STORE: *i = to_store; break; - case HB_BFIND_NOT_FOUND_STORE_CLOSEST: + case HB_NOT_FOUND_STORE_CLOSEST: *i = pos; break; } diff --git a/thirdparty/harfbuzz/src/hb-bimap.hh b/thirdparty/harfbuzz/src/hb-bimap.hh index e9f3a6a52d..d409880751 100644 --- a/thirdparty/harfbuzz/src/hb-bimap.hh +++ b/thirdparty/harfbuzz/src/hb-bimap.hh @@ -58,10 +58,15 @@ struct hb_bimap_t void set (hb_codepoint_t lhs, hb_codepoint_t rhs) { + if (in_error ()) return; if (unlikely (lhs == HB_MAP_VALUE_INVALID)) return; if (unlikely (rhs == HB_MAP_VALUE_INVALID)) { del (lhs); return; } + forw_map.set (lhs, rhs); + if (in_error ()) return; + back_map.set (rhs, lhs); + if (in_error ()) forw_map.del (lhs); } hb_codepoint_t get (hb_codepoint_t lhs) const { return forw_map.get (lhs); } diff --git a/thirdparty/harfbuzz/src/hb-bit-page.hh b/thirdparty/harfbuzz/src/hb-bit-page.hh new file mode 100644 index 0000000000..263be3d044 --- /dev/null +++ b/thirdparty/harfbuzz/src/hb-bit-page.hh @@ -0,0 +1,203 @@ +/* + * Copyright © 2012,2017 Google, Inc. + * Copyright © 2021 Behdad Esfahbod + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + * Google Author(s): Behdad Esfahbod + */ + +#ifndef HB_BIT_PAGE_HH +#define HB_BIT_PAGE_HH + +#include "hb.hh" + +struct hb_bit_page_t +{ + void init0 () { v.clear (); } + void init1 () { v.clear (0xFF); } + + constexpr unsigned len () const + { return ARRAY_LENGTH_CONST (v); } + + bool is_empty () const + { + for (unsigned int i = 0; i < len (); i++) + if (v[i]) + return false; + return true; + } + + void add (hb_codepoint_t g) { elt (g) |= mask (g); } + void del (hb_codepoint_t g) { elt (g) &= ~mask (g); } + void set (hb_codepoint_t g, bool v) { if (v) add (g); else del (g); } + bool get (hb_codepoint_t g) const { return elt (g) & mask (g); } + + void add_range (hb_codepoint_t a, hb_codepoint_t b) + { + elt_t *la = &elt (a); + elt_t *lb = &elt (b); + if (la == lb) + *la |= (mask (b) << 1) - mask(a); + else + { + *la |= ~(mask (a) - 1); + la++; + + memset (la, 0xff, (char *) lb - (char *) la); + + *lb |= ((mask (b) << 1) - 1); + } + } + void del_range (hb_codepoint_t a, hb_codepoint_t b) + { + elt_t *la = &elt (a); + elt_t *lb = &elt (b); + if (la == lb) + *la &= ~((mask (b) << 1) - mask(a)); + else + { + *la &= mask (a) - 1; + la++; + + memset (la, 0, (char *) lb - (char *) la); + + *lb &= ~((mask (b) << 1) - 1); + } + } + void set_range (hb_codepoint_t a, hb_codepoint_t b, bool v) + { if (v) add_range (a, b); else del_range (a, b); } + + bool is_equal (const hb_bit_page_t &other) const + { + return 0 == hb_memcmp (&v, &other.v, sizeof (v)); + } + bool is_subset (const hb_bit_page_t &larger_page) const + { + for (unsigned i = 0; i < len (); i++) + if (~larger_page.v[i] & v[i]) + return false; + return true; + } + + unsigned int get_population () const + { + unsigned int pop = 0; + for (unsigned int i = 0; i < len (); i++) + pop += hb_popcount (v[i]); + return pop; + } + + bool next (hb_codepoint_t *codepoint) const + { + unsigned int m = (*codepoint + 1) & MASK; + if (!m) + { + *codepoint = INVALID; + return false; + } + unsigned int i = m / ELT_BITS; + unsigned int j = m & ELT_MASK; + + const elt_t vv = v[i] & ~((elt_t (1) << j) - 1); + for (const elt_t *p = &vv; i < len (); p = &v[++i]) + if (*p) + { + *codepoint = i * ELT_BITS + elt_get_min (*p); + return true; + } + + *codepoint = INVALID; + return false; + } + bool previous (hb_codepoint_t *codepoint) const + { + unsigned int m = (*codepoint - 1) & MASK; + if (m == MASK) + { + *codepoint = INVALID; + return false; + } + unsigned int i = m / ELT_BITS; + unsigned int j = m & ELT_MASK; + + /* Fancy mask to avoid shifting by elt_t bitsize, which is undefined. */ + const elt_t mask = j < 8 * sizeof (elt_t) - 1 ? + ((elt_t (1) << (j + 1)) - 1) : + (elt_t) -1; + const elt_t vv = v[i] & mask; + const elt_t *p = &vv; + while (true) + { + if (*p) + { + *codepoint = i * ELT_BITS + elt_get_max (*p); + return true; + } + if ((int) i <= 0) break; + p = &v[--i]; + } + + *codepoint = INVALID; + return false; + } + hb_codepoint_t get_min () const + { + for (unsigned int i = 0; i < len (); i++) + if (v[i]) + return i * ELT_BITS + elt_get_min (v[i]); + return INVALID; + } + hb_codepoint_t get_max () const + { + for (int i = len () - 1; i >= 0; i--) + if (v[i]) + return i * ELT_BITS + elt_get_max (v[i]); + return 0; + } + + static constexpr hb_codepoint_t INVALID = HB_SET_VALUE_INVALID; + + typedef unsigned long long elt_t; + static constexpr unsigned PAGE_BITS = 512; + static_assert ((PAGE_BITS & ((PAGE_BITS) - 1)) == 0, ""); + + static unsigned int elt_get_min (const elt_t &elt) { return hb_ctz (elt); } + static unsigned int elt_get_max (const elt_t &elt) { return hb_bit_storage (elt) - 1; } + + typedef hb_vector_size_t<elt_t, PAGE_BITS / 8> vector_t; + + static constexpr unsigned ELT_BITS = sizeof (elt_t) * 8; + static constexpr unsigned ELT_MASK = ELT_BITS - 1; + static constexpr unsigned BITS = sizeof (vector_t) * 8; + static constexpr unsigned MASK = BITS - 1; + static_assert ((unsigned) PAGE_BITS == (unsigned) BITS, ""); + + elt_t &elt (hb_codepoint_t g) { return v[(g & MASK) / ELT_BITS]; } + const elt_t& elt (hb_codepoint_t g) const { return v[(g & MASK) / ELT_BITS]; } + static constexpr elt_t mask (hb_codepoint_t g) { return elt_t (1) << (g & ELT_MASK); } + + vector_t v; +}; +static_assert (hb_bit_page_t::PAGE_BITS == sizeof (hb_bit_page_t) * 8, ""); + + +#endif /* HB_BIT_PAGE_HH */ diff --git a/thirdparty/harfbuzz/src/hb-bit-set-invertible.hh b/thirdparty/harfbuzz/src/hb-bit-set-invertible.hh new file mode 100644 index 0000000000..f48b72fe63 --- /dev/null +++ b/thirdparty/harfbuzz/src/hb-bit-set-invertible.hh @@ -0,0 +1,354 @@ +/* + * Copyright © 2012,2017 Google, Inc. + * Copyright © 2021 Behdad Esfahbod + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + * Google Author(s): Behdad Esfahbod + */ + +#ifndef HB_BIT_SET_INVERTIBLE_HH +#define HB_BIT_SET_INVERTIBLE_HH + +#include "hb.hh" +#include "hb-bit-set.hh" + + +struct hb_bit_set_invertible_t +{ + hb_bit_set_t s; + bool inverted; + + hb_bit_set_invertible_t () { init (); } + ~hb_bit_set_invertible_t () { fini (); } + + void init () { s.init (); inverted = false; } + void fini () { s.fini (); } + void err () { s.err (); } + bool in_error () const { return s.in_error (); } + explicit operator bool () const { return !is_empty (); } + + void reset () + { + s.reset (); + inverted = false; + } + void clear () + { + s.clear (); + if (likely (s.successful)) + inverted = false; + } + void invert () + { + if (likely (s.successful)) + inverted = !inverted; + } + + bool is_empty () const + { + hb_codepoint_t v = INVALID; + next (&v); + return v == INVALID; + } + hb_codepoint_t get_min () const + { + hb_codepoint_t v = INVALID; + next (&v); + return v; + } + hb_codepoint_t get_max () const + { + hb_codepoint_t v = INVALID; + previous (&v); + return v; + } + unsigned int get_population () const + { return inverted ? INVALID - s.get_population () : s.get_population (); } + + + void add (hb_codepoint_t g) { unlikely (inverted) ? s.del (g) : s.add (g); } + bool add_range (hb_codepoint_t a, hb_codepoint_t b) + { return unlikely (inverted) ? (s.del_range (a, b), true) : s.add_range (a, b); } + + template <typename T> + void add_array (const T *array, unsigned int count, unsigned int stride=sizeof(T)) + { inverted ? s.del_array (array, count, stride) : s.add_array (array, count, stride); } + template <typename T> + void add_array (const hb_array_t<const T>& arr) { add_array (&arr, arr.len ()); } + + /* Might return false if array looks unsorted. + * Used for faster rejection of corrupt data. */ + template <typename T> + bool add_sorted_array (const T *array, unsigned int count, unsigned int stride=sizeof(T)) + { return inverted ? s.del_sorted_array (array, count, stride) : s.add_sorted_array (array, count, stride); } + template <typename T> + bool add_sorted_array (const hb_sorted_array_t<const T>& arr) { return add_sorted_array (&arr, arr.len ()); } + + void del (hb_codepoint_t g) { unlikely (inverted) ? s.add (g) : s.del (g); } + void del_range (hb_codepoint_t a, hb_codepoint_t b) + { unlikely (inverted) ? (void) s.add_range (a, b) : s.del_range (a, b); } + + bool get (hb_codepoint_t g) const { return s.get (g) ^ inverted; } + + /* Has interface. */ + static constexpr bool SENTINEL = false; + typedef bool value_t; + value_t operator [] (hb_codepoint_t k) const { return get (k); } + bool has (hb_codepoint_t k) const { return (*this)[k] != SENTINEL; } + /* Predicate. */ + bool operator () (hb_codepoint_t k) const { return has (k); } + + /* Sink interface. */ + hb_bit_set_invertible_t& operator << (hb_codepoint_t v) + { add (v); return *this; } + hb_bit_set_invertible_t& operator << (const hb_pair_t<hb_codepoint_t, hb_codepoint_t>& range) + { add_range (range.first, range.second); return *this; } + + bool intersects (hb_codepoint_t first, hb_codepoint_t last) const + { + hb_codepoint_t c = first - 1; + return next (&c) && c <= last; + } + + void set (const hb_bit_set_invertible_t &other) + { + s.set (other.s); + if (likely (s.successful)) + inverted = other.inverted; + } + + bool is_equal (const hb_bit_set_invertible_t &other) const + { + if (likely (inverted == other.inverted)) + return s.is_equal (other.s); + else + { + /* TODO Add iter_ranges() and use here. */ + auto it1 = iter (); + auto it2 = other.iter (); + return hb_all (+ hb_zip (it1, it2) + | hb_map ([](hb_pair_t<hb_codepoint_t, hb_codepoint_t> _) { return _.first == _.second; })); + } + } + + bool is_subset (const hb_bit_set_invertible_t &larger_set) const + { + if (unlikely (inverted != larger_set.inverted)) + return hb_all (hb_iter (s) | hb_map (larger_set.s)); + else + return unlikely (inverted) ? larger_set.s.is_subset (s) : s.is_subset (larger_set.s); + } + + protected: + template <typename Op> + void process (const Op& op, const hb_bit_set_invertible_t &other) + { s.process (op, other.s); } + public: + void union_ (const hb_bit_set_invertible_t &other) + { + if (likely (inverted == other.inverted)) + { + if (unlikely (inverted)) + process (hb_bitwise_and, other); + else + process (hb_bitwise_or, other); /* Main branch. */ + } + else + { + if (unlikely (inverted)) + process (hb_bitwise_gt, other); + else + process (hb_bitwise_lt, other); + } + if (likely (s.successful)) + inverted = inverted || other.inverted; + } + void intersect (const hb_bit_set_invertible_t &other) + { + if (likely (inverted == other.inverted)) + { + if (unlikely (inverted)) + process (hb_bitwise_or, other); + else + process (hb_bitwise_and, other); /* Main branch. */ + } + else + { + if (unlikely (inverted)) + process (hb_bitwise_lt, other); + else + process (hb_bitwise_gt, other); + } + if (likely (s.successful)) + inverted = inverted && other.inverted; + } + void subtract (const hb_bit_set_invertible_t &other) + { + if (likely (inverted == other.inverted)) + { + if (unlikely (inverted)) + process (hb_bitwise_lt, other); + else + process (hb_bitwise_gt, other); /* Main branch. */ + } + else + { + if (unlikely (inverted)) + process (hb_bitwise_or, other); + else + process (hb_bitwise_and, other); + } + if (likely (s.successful)) + inverted = inverted && !other.inverted; + } + void symmetric_difference (const hb_bit_set_invertible_t &other) + { + process (hb_bitwise_xor, other); + if (likely (s.successful)) + inverted = inverted ^ other.inverted; + } + + bool next (hb_codepoint_t *codepoint) const + { + if (likely (!inverted)) + return s.next (codepoint); + + auto old = *codepoint; + if (unlikely (old + 1 == INVALID)) + { + *codepoint = INVALID; + return false; + } + + auto v = old; + s.next (&v); + if (old + 1 < v) + { + *codepoint = old + 1; + return true; + } + + v = old; + s.next_range (&old, &v); + + *codepoint = v + 1; + return *codepoint != INVALID; + } + bool previous (hb_codepoint_t *codepoint) const + { + if (likely (!inverted)) + return s.previous (codepoint); + + auto old = *codepoint; + if (unlikely (old - 1 == INVALID)) + { + *codepoint = INVALID; + return false; + } + + auto v = old; + s.previous (&v); + + if (old - 1 > v || v == INVALID) + { + *codepoint = old - 1; + return true; + } + + v = old; + s.previous_range (&v, &old); + + *codepoint = v - 1; + return *codepoint != INVALID; + } + bool next_range (hb_codepoint_t *first, hb_codepoint_t *last) const + { + if (likely (!inverted)) + return s.next_range (first, last); + + if (!next (last)) + { + *last = *first = INVALID; + return false; + } + + *first = *last; + s.next (last); + --*last; + return true; + } + bool previous_range (hb_codepoint_t *first, hb_codepoint_t *last) const + { + if (likely (!inverted)) + return s.previous_range (first, last); + + if (!previous (first)) + { + *last = *first = INVALID; + return false; + } + + *last = *first; + s.previous (first); + ++*first; + return true; + } + + static constexpr hb_codepoint_t INVALID = hb_bit_set_t::INVALID; + + /* + * Iterator implementation. + */ + struct iter_t : hb_iter_with_fallback_t<iter_t, hb_codepoint_t> + { + static constexpr bool is_sorted_iterator = true; + iter_t (const hb_bit_set_invertible_t &s_ = Null (hb_bit_set_invertible_t), + bool init = true) : s (&s_), v (INVALID), l(0) + { + if (init) + { + l = s->get_population () + 1; + __next__ (); + } + } + + typedef hb_codepoint_t __item_t__; + hb_codepoint_t __item__ () const { return v; } + bool __more__ () const { return v != INVALID; } + void __next__ () { s->next (&v); if (l) l--; } + void __prev__ () { s->previous (&v); } + unsigned __len__ () const { return l; } + iter_t end () const { return iter_t (*s, false); } + bool operator != (const iter_t& o) const + { return s != o.s || v != o.v; } + + protected: + const hb_bit_set_invertible_t *s; + hb_codepoint_t v; + unsigned l; + }; + iter_t iter () const { return iter_t (*this); } + operator iter_t () const { return iter (); } +}; + + +#endif /* HB_BIT_SET_INVERTIBLE_HH */ diff --git a/thirdparty/harfbuzz/src/hb-bit-set.hh b/thirdparty/harfbuzz/src/hb-bit-set.hh new file mode 100644 index 0000000000..c21778d88e --- /dev/null +++ b/thirdparty/harfbuzz/src/hb-bit-set.hh @@ -0,0 +1,808 @@ +/* + * Copyright © 2012,2017 Google, Inc. + * Copyright © 2021 Behdad Esfahbod + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + * Google Author(s): Behdad Esfahbod + */ + +#ifndef HB_BIT_SET_HH +#define HB_BIT_SET_HH + +#include "hb.hh" +#include "hb-bit-page.hh" +#include "hb-machinery.hh" + + +struct hb_bit_set_t +{ + hb_bit_set_t () { init (); } + ~hb_bit_set_t () { fini (); } + + hb_bit_set_t (const hb_bit_set_t& other) : hb_bit_set_t () { set (other); } + void operator= (const hb_bit_set_t& other) { set (other); } + // TODO Add move construtor/assign + // TODO Add constructor for Iterator; with specialization for (sorted) vector / array? + + void init () + { + successful = true; + population = 0; + last_page_lookup = 0; + page_map.init (); + pages.init (); + } + void fini () + { + page_map.fini (); + pages.fini (); + } + + using page_t = hb_bit_page_t; + struct page_map_t + { + int cmp (const page_map_t &o) const { return cmp (o.major); } + int cmp (uint32_t o_major) const { return (int) o_major - (int) major; } + + uint32_t major; + uint32_t index; + }; + + bool successful; /* Allocations successful */ + mutable unsigned int population; + mutable unsigned int last_page_lookup; + hb_sorted_vector_t<page_map_t> page_map; + hb_vector_t<page_t> pages; + + void err () { if (successful) successful = false; } /* TODO Remove */ + bool in_error () const { return !successful; } + + bool resize (unsigned int count) + { + if (unlikely (!successful)) return false; + if (unlikely (!pages.resize (count) || !page_map.resize (count))) + { + pages.resize (page_map.length); + successful = false; + return false; + } + return true; + } + + void reset () + { + successful = true; + clear (); + } + + void clear () + { + resize (0); + if (likely (successful)) + population = 0; + } + bool is_empty () const + { + unsigned int count = pages.length; + for (unsigned int i = 0; i < count; i++) + if (!pages[i].is_empty ()) + return false; + return true; + } + explicit operator bool () const { return !is_empty (); } + + private: + void dirty () { population = UINT_MAX; } + public: + + void add (hb_codepoint_t g) + { + if (unlikely (!successful)) return; + if (unlikely (g == INVALID)) return; + dirty (); + page_t *page = page_for (g, true); if (unlikely (!page)) return; + page->add (g); + } + bool add_range (hb_codepoint_t a, hb_codepoint_t b) + { + if (unlikely (!successful)) return true; /* https://github.com/harfbuzz/harfbuzz/issues/657 */ + if (unlikely (a > b || a == INVALID || b == INVALID)) return false; + dirty (); + unsigned int ma = get_major (a); + unsigned int mb = get_major (b); + if (ma == mb) + { + page_t *page = page_for (a, true); if (unlikely (!page)) return false; + page->add_range (a, b); + } + else + { + page_t *page = page_for (a, true); if (unlikely (!page)) return false; + page->add_range (a, major_start (ma + 1) - 1); + + for (unsigned int m = ma + 1; m < mb; m++) + { + page = page_for (major_start (m), true); if (unlikely (!page)) return false; + page->init1 (); + } + + page = page_for (b, true); if (unlikely (!page)) return false; + page->add_range (major_start (mb), b); + } + return true; + } + + template <typename T> + void set_array (bool v, const T *array, unsigned int count, unsigned int stride=sizeof(T)) + { + if (unlikely (!successful)) return; + if (!count) return; + dirty (); + hb_codepoint_t g = *array; + while (count) + { + unsigned int m = get_major (g); + page_t *page = page_for (g, v); if (unlikely (v && !page)) return; + unsigned int start = major_start (m); + unsigned int end = major_start (m + 1); + do + { + if (v || page) /* The v check is to optimize out the page check if v is true. */ + page->set (g, v); + + array = &StructAtOffsetUnaligned<T> (array, stride); + count--; + } + while (count && (g = *array, start <= g && g < end)); + } + } + + template <typename T> + void add_array (const T *array, unsigned int count, unsigned int stride=sizeof(T)) + { set_array (true, array, count, stride); } + template <typename T> + void add_array (const hb_array_t<const T>& arr) { add_array (&arr, arr.len ()); } + + template <typename T> + void del_array (const T *array, unsigned int count, unsigned int stride=sizeof(T)) + { set_array (false, array, count, stride); } + template <typename T> + void del_array (const hb_array_t<const T>& arr) { del_array (&arr, arr.len ()); } + + /* Might return false if array looks unsorted. + * Used for faster rejection of corrupt data. */ + template <typename T> + bool set_sorted_array (bool v, const T *array, unsigned int count, unsigned int stride=sizeof(T)) + { + if (unlikely (!successful)) return true; /* https://github.com/harfbuzz/harfbuzz/issues/657 */ + if (!count) return true; + dirty (); + hb_codepoint_t g = *array; + hb_codepoint_t last_g = g; + while (count) + { + unsigned int m = get_major (g); + page_t *page = page_for (g, v); if (unlikely (v && !page)) return false; + unsigned int end = major_start (m + 1); + do + { + /* If we try harder we can change the following comparison to <=; + * Not sure if it's worth it. */ + if (g < last_g) return false; + last_g = g; + + if (v || page) /* The v check is to optimize out the page check if v is true. */ + page->add (g); + + array = (const T *) ((const char *) array + stride); + count--; + } + while (count && (g = *array, g < end)); + } + return true; + } + + template <typename T> + bool add_sorted_array (const T *array, unsigned int count, unsigned int stride=sizeof(T)) + { return set_sorted_array (true, array, count, stride); } + template <typename T> + bool add_sorted_array (const hb_sorted_array_t<const T>& arr) { return add_sorted_array (&arr, arr.len ()); } + + template <typename T> + bool del_sorted_array (const T *array, unsigned int count, unsigned int stride=sizeof(T)) + { return set_sorted_array (false, array, count, stride); } + template <typename T> + bool del_sorted_array (const hb_sorted_array_t<const T>& arr) { return del_sorted_array (&arr, arr.len ()); } + + void del (hb_codepoint_t g) + { + if (unlikely (!successful)) return; + page_t *page = page_for (g); + if (!page) + return; + dirty (); + page->del (g); + } + + private: + void del_pages (int ds, int de) + { + if (ds <= de) + { + // Pre-allocate the workspace that compact() will need so we can bail on allocation failure + // before attempting to rewrite the page map. + hb_vector_t<unsigned> compact_workspace; + if (unlikely (!allocate_compact_workspace (compact_workspace))) return; + + unsigned int write_index = 0; + for (unsigned int i = 0; i < page_map.length; i++) + { + int m = (int) page_map[i].major; + if (m < ds || de < m) + page_map[write_index++] = page_map[i]; + } + compact (compact_workspace, write_index); + resize (write_index); + } + } + + + public: + void del_range (hb_codepoint_t a, hb_codepoint_t b) + { + if (unlikely (!successful)) return; + if (unlikely (a > b || a == INVALID)) return; + dirty (); + unsigned int ma = get_major (a); + unsigned int mb = get_major (b); + /* Delete pages from ds through de if ds <= de. */ + int ds = (a == major_start (ma))? (int) ma: (int) (ma + 1); + int de = (b + 1 == major_start (mb + 1))? (int) mb: ((int) mb - 1); + if (ds > de || (int) ma < ds) + { + page_t *page = page_for (a); + if (page) + { + if (ma == mb) + page->del_range (a, b); + else + page->del_range (a, major_start (ma + 1) - 1); + } + } + if (de < (int) mb && ma != mb) + { + page_t *page = page_for (b); + if (page) + page->del_range (major_start (mb), b); + } + del_pages (ds, de); + } + + bool get (hb_codepoint_t g) const + { + const page_t *page = page_for (g); + if (!page) + return false; + return page->get (g); + } + + /* Has interface. */ + static constexpr bool SENTINEL = false; + typedef bool value_t; + value_t operator [] (hb_codepoint_t k) const { return get (k); } + bool has (hb_codepoint_t k) const { return (*this)[k] != SENTINEL; } + /* Predicate. */ + bool operator () (hb_codepoint_t k) const { return has (k); } + + /* Sink interface. */ + hb_bit_set_t& operator << (hb_codepoint_t v) + { add (v); return *this; } + hb_bit_set_t& operator << (const hb_pair_t<hb_codepoint_t, hb_codepoint_t>& range) + { add_range (range.first, range.second); return *this; } + + bool intersects (hb_codepoint_t first, hb_codepoint_t last) const + { + hb_codepoint_t c = first - 1; + return next (&c) && c <= last; + } + void set (const hb_bit_set_t &other) + { + if (unlikely (!successful)) return; + unsigned int count = other.pages.length; + if (unlikely (!resize (count))) + return; + population = other.population; + + /* TODO switch to vector operator =. */ + hb_memcpy ((void *) pages, (const void *) other.pages, count * pages.item_size); + hb_memcpy ((void *) page_map, (const void *) other.page_map, count * page_map.item_size); + } + + bool is_equal (const hb_bit_set_t &other) const + { + if (has_population () && other.has_population () && + get_population () != other.get_population ()) + return false; + + unsigned int na = pages.length; + unsigned int nb = other.pages.length; + + unsigned int a = 0, b = 0; + for (; a < na && b < nb; ) + { + if (page_at (a).is_empty ()) { a++; continue; } + if (other.page_at (b).is_empty ()) { b++; continue; } + if (page_map[a].major != other.page_map[b].major || + !page_at (a).is_equal (other.page_at (b))) + return false; + a++; + b++; + } + for (; a < na; a++) + if (!page_at (a).is_empty ()) { return false; } + for (; b < nb; b++) + if (!other.page_at (b).is_empty ()) { return false; } + + return true; + } + + bool is_subset (const hb_bit_set_t &larger_set) const + { + if (has_population () && larger_set.has_population () && + get_population () != larger_set.get_population ()) + return false; + + uint32_t spi = 0; + for (uint32_t lpi = 0; spi < page_map.length && lpi < larger_set.page_map.length; lpi++) + { + uint32_t spm = page_map[spi].major; + uint32_t lpm = larger_set.page_map[lpi].major; + auto sp = page_at (spi); + auto lp = larger_set.page_at (lpi); + + if (spm < lpm && !sp.is_empty ()) + return false; + + if (lpm < spm) + continue; + + if (!sp.is_subset (lp)) + return false; + + spi++; + } + + while (spi < page_map.length) + if (!page_at (spi++).is_empty ()) + return false; + + return true; + } + + private: + bool allocate_compact_workspace (hb_vector_t<unsigned>& workspace) + { + if (unlikely (!workspace.resize (pages.length))) + { + successful = false; + return false; + } + + return true; + } + + /* + * workspace should be a pre-sized vector allocated to hold at exactly pages.length + * elements. + */ + void compact (hb_vector_t<unsigned>& workspace, + unsigned int length) + { + assert(workspace.length == pages.length); + hb_vector_t<unsigned>& old_index_to_page_map_index = workspace; + + hb_fill (old_index_to_page_map_index.writer(), 0xFFFFFFFF); + for (unsigned i = 0; i < length; i++) + old_index_to_page_map_index[page_map[i].index] = i; + + compact_pages (old_index_to_page_map_index); + } + void compact_pages (const hb_vector_t<unsigned>& old_index_to_page_map_index) + { + unsigned int write_index = 0; + for (unsigned int i = 0; i < pages.length; i++) + { + if (old_index_to_page_map_index[i] == 0xFFFFFFFF) continue; + + if (write_index < i) + pages[write_index] = pages[i]; + + page_map[old_index_to_page_map_index[i]].index = write_index; + write_index++; + } + } + public: + + template <typename Op> + void process (const Op& op, const hb_bit_set_t &other) + { + const bool passthru_left = op (1, 0); + const bool passthru_right = op (0, 1); + + if (unlikely (!successful)) return; + + dirty (); + + unsigned int na = pages.length; + unsigned int nb = other.pages.length; + unsigned int next_page = na; + + unsigned int count = 0, newCount = 0; + unsigned int a = 0, b = 0; + unsigned int write_index = 0; + + // Pre-allocate the workspace that compact() will need so we can bail on allocation failure + // before attempting to rewrite the page map. + hb_vector_t<unsigned> compact_workspace; + if (!passthru_left && unlikely (!allocate_compact_workspace (compact_workspace))) return; + + for (; a < na && b < nb; ) + { + if (page_map[a].major == other.page_map[b].major) + { + if (!passthru_left) + { + // Move page_map entries that we're keeping from the left side set + // to the front of the page_map vector. This isn't necessary if + // passthru_left is set since no left side pages will be removed + // in that case. + if (write_index < a) + page_map[write_index] = page_map[a]; + write_index++; + } + + count++; + a++; + b++; + } + else if (page_map[a].major < other.page_map[b].major) + { + if (passthru_left) + count++; + a++; + } + else + { + if (passthru_right) + count++; + b++; + } + } + if (passthru_left) + count += na - a; + if (passthru_right) + count += nb - b; + + if (!passthru_left) + { + na = write_index; + next_page = write_index; + compact (compact_workspace, write_index); + } + + if (unlikely (!resize (count))) + return; + + newCount = count; + + /* Process in-place backward. */ + a = na; + b = nb; + for (; a && b; ) + { + if (page_map[a - 1].major == other.page_map[b - 1].major) + { + a--; + b--; + count--; + page_map[count] = page_map[a]; + page_at (count).v = op (page_at (a).v, other.page_at (b).v); + } + else if (page_map[a - 1].major > other.page_map[b - 1].major) + { + a--; + if (passthru_left) + { + count--; + page_map[count] = page_map[a]; + } + } + else + { + b--; + if (passthru_right) + { + count--; + page_map[count].major = other.page_map[b].major; + page_map[count].index = next_page++; + page_at (count).v = other.page_at (b).v; + } + } + } + if (passthru_left) + while (a) + { + a--; + count--; + page_map[count] = page_map [a]; + } + if (passthru_right) + while (b) + { + b--; + count--; + page_map[count].major = other.page_map[b].major; + page_map[count].index = next_page++; + page_at (count).v = other.page_at (b).v; + } + assert (!count); + resize (newCount); + } + + void union_ (const hb_bit_set_t &other) { process (hb_bitwise_or, other); } + void intersect (const hb_bit_set_t &other) { process (hb_bitwise_and, other); } + void subtract (const hb_bit_set_t &other) { process (hb_bitwise_gt, other); } + void symmetric_difference (const hb_bit_set_t &other) { process (hb_bitwise_xor, other); } + + bool next (hb_codepoint_t *codepoint) const + { + // TODO: this should be merged with prev() as both implementations + // are very similar. + if (unlikely (*codepoint == INVALID)) { + *codepoint = get_min (); + return *codepoint != INVALID; + } + + const auto* page_map_array = page_map.arrayZ; + unsigned int major = get_major (*codepoint); + unsigned int i = last_page_lookup; + + if (unlikely (i >= page_map.length || page_map_array[i].major != major)) + { + page_map.bfind (major, &i, HB_NOT_FOUND_STORE_CLOSEST); + if (i >= page_map.length) { + *codepoint = INVALID; + return false; + } + } + + const auto* pages_array = pages.arrayZ; + const page_map_t ¤t = page_map_array[i]; + if (likely (current.major == major)) + { + if (pages_array[current.index].next (codepoint)) + { + *codepoint += current.major * page_t::PAGE_BITS; + last_page_lookup = i; + return true; + } + i++; + } + + for (; i < page_map.length; i++) + { + const page_map_t ¤t = page_map.arrayZ[i]; + hb_codepoint_t m = pages_array[current.index].get_min (); + if (m != INVALID) + { + *codepoint = current.major * page_t::PAGE_BITS + m; + last_page_lookup = i; + return true; + } + } + last_page_lookup = 0; + *codepoint = INVALID; + return false; + } + bool previous (hb_codepoint_t *codepoint) const + { + if (unlikely (*codepoint == INVALID)) { + *codepoint = get_max (); + return *codepoint != INVALID; + } + + page_map_t map = {get_major (*codepoint), 0}; + unsigned int i; + page_map.bfind (map, &i, HB_NOT_FOUND_STORE_CLOSEST); + if (i < page_map.length && page_map[i].major == map.major) + { + if (pages[page_map[i].index].previous (codepoint)) + { + *codepoint += page_map[i].major * page_t::PAGE_BITS; + return true; + } + } + i--; + for (; (int) i >= 0; i--) + { + hb_codepoint_t m = pages[page_map[i].index].get_max (); + if (m != INVALID) + { + *codepoint = page_map[i].major * page_t::PAGE_BITS + m; + return true; + } + } + *codepoint = INVALID; + return false; + } + bool next_range (hb_codepoint_t *first, hb_codepoint_t *last) const + { + hb_codepoint_t i; + + i = *last; + if (!next (&i)) + { + *last = *first = INVALID; + return false; + } + + /* TODO Speed up. */ + *last = *first = i; + while (next (&i) && i == *last + 1) + (*last)++; + + return true; + } + bool previous_range (hb_codepoint_t *first, hb_codepoint_t *last) const + { + hb_codepoint_t i; + + i = *first; + if (!previous (&i)) + { + *last = *first = INVALID; + return false; + } + + /* TODO Speed up. */ + *last = *first = i; + while (previous (&i) && i == *first - 1) + (*first)--; + + return true; + } + + bool has_population () const { return population != UINT_MAX; } + unsigned int get_population () const + { + if (has_population ()) + return population; + + unsigned int pop = 0; + unsigned int count = pages.length; + for (unsigned int i = 0; i < count; i++) + pop += pages[i].get_population (); + + population = pop; + return pop; + } + hb_codepoint_t get_min () const + { + unsigned count = pages.length; + for (unsigned i = 0; i < count; i++) + { + const auto& map = page_map[i]; + const auto& page = pages[map.index]; + + if (!page.is_empty ()) + return map.major * page_t::PAGE_BITS + page.get_min (); + } + return INVALID; + } + hb_codepoint_t get_max () const + { + unsigned count = pages.length; + for (signed i = count - 1; i >= 0; i--) + { + const auto& map = page_map[(unsigned) i]; + const auto& page = pages[map.index]; + + if (!page.is_empty ()) + return map.major * page_t::PAGE_BITS + page.get_max (); + } + return INVALID; + } + + static constexpr hb_codepoint_t INVALID = page_t::INVALID; + + /* + * Iterator implementation. + */ + struct iter_t : hb_iter_with_fallback_t<iter_t, hb_codepoint_t> + { + static constexpr bool is_sorted_iterator = true; + iter_t (const hb_bit_set_t &s_ = Null (hb_bit_set_t), + bool init = true) : s (&s_), v (INVALID), l(0) + { + if (init) + { + l = s->get_population () + 1; + __next__ (); + } + } + + typedef hb_codepoint_t __item_t__; + hb_codepoint_t __item__ () const { return v; } + bool __more__ () const { return v != INVALID; } + void __next__ () { s->next (&v); if (l) l--; } + void __prev__ () { s->previous (&v); } + unsigned __len__ () const { return l; } + iter_t end () const { return iter_t (*s, false); } + bool operator != (const iter_t& o) const + { return s != o.s || v != o.v; } + + protected: + const hb_bit_set_t *s; + hb_codepoint_t v; + unsigned l; + }; + iter_t iter () const { return iter_t (*this); } + operator iter_t () const { return iter (); } + + protected: + + page_t *page_for (hb_codepoint_t g, bool insert = false) + { + page_map_t map = {get_major (g), pages.length}; + unsigned int i; + if (!page_map.bfind (map, &i, HB_NOT_FOUND_STORE_CLOSEST)) + { + if (!insert) + return nullptr; + + if (unlikely (!resize (pages.length + 1))) + return nullptr; + + pages[map.index].init0 (); + memmove (page_map + i + 1, + page_map + i, + (page_map.length - 1 - i) * page_map.item_size); + page_map[i] = map; + } + return &pages[page_map[i].index]; + } + const page_t *page_for (hb_codepoint_t g) const + { + page_map_t key = {get_major (g)}; + const page_map_t *found = page_map.bsearch (key); + if (found) + return &pages[found->index]; + return nullptr; + } + page_t &page_at (unsigned int i) { return pages[page_map[i].index]; } + const page_t &page_at (unsigned int i) const { return pages[page_map[i].index]; } + unsigned int get_major (hb_codepoint_t g) const { return g / page_t::PAGE_BITS; } + hb_codepoint_t major_start (unsigned int major) const { return major * page_t::PAGE_BITS; } +}; + + +#endif /* HB_BIT_SET_HH */ diff --git a/thirdparty/harfbuzz/src/hb-blob.cc b/thirdparty/harfbuzz/src/hb-blob.cc index 71b1b1fc4f..f120002d17 100644 --- a/thirdparty/harfbuzz/src/hb-blob.cc +++ b/thirdparty/harfbuzz/src/hb-blob.cc @@ -72,14 +72,52 @@ hb_blob_create (const char *data, void *user_data, hb_destroy_func_t destroy) { + if (!length) + { + if (destroy) + destroy (user_data); + return hb_blob_get_empty (); + } + + hb_blob_t *blob = hb_blob_create_or_fail (data, length, mode, + user_data, destroy); + return likely (blob) ? blob : hb_blob_get_empty (); +} + +/** + * hb_blob_create_or_fail: (skip) + * @data: Pointer to blob data. + * @length: Length of @data in bytes. + * @mode: Memory mode for @data. + * @user_data: Data parameter to pass to @destroy. + * @destroy: (nullable): Callback to call when @data is not needed anymore. + * + * Creates a new "blob" object wrapping @data. The @mode parameter is used + * to negotiate ownership and lifecycle of @data. + * + * Note that this function returns a freshly-allocated empty blob even if @length + * is zero. This is in contrast to hb_blob_create(), which returns the singleton + * empty blob (as returned by hb_blob_get_empty()) if @length is zero. + * + * Return value: New blob, or %NULL if failed. Destroy with hb_blob_destroy(). + * + * Since: 2.8.2 + **/ +hb_blob_t * +hb_blob_create_or_fail (const char *data, + unsigned int length, + hb_memory_mode_t mode, + void *user_data, + hb_destroy_func_t destroy) +{ hb_blob_t *blob; - if (!length || - length >= 1u << 31 || - !(blob = hb_object_create<hb_blob_t> ())) { + if (length >= 1u << 31 || + !(blob = hb_object_create<hb_blob_t> ())) + { if (destroy) destroy (user_data); - return hb_blob_get_empty (); + return nullptr; } blob->data = data; @@ -91,9 +129,10 @@ hb_blob_create (const char *data, if (blob->mode == HB_MEMORY_MODE_DUPLICATE) { blob->mode = HB_MEMORY_MODE_READONLY; - if (!blob->try_make_writable ()) { + if (!blob->try_make_writable ()) + { hb_blob_destroy (blob); - return hb_blob_get_empty (); + return nullptr; } } @@ -226,7 +265,7 @@ hb_blob_destroy (hb_blob_t *blob) blob->fini_shallow (); - free (blob); + hb_free (blob); } /** @@ -452,7 +491,7 @@ hb_blob_t::try_make_writable () char *new_data; - new_data = (char *) malloc (this->length); + new_data = (char *) hb_malloc (this->length); if (unlikely (!new_data)) return false; @@ -463,7 +502,7 @@ hb_blob_t::try_make_writable () this->mode = HB_MEMORY_MODE_WRITABLE; this->data = new_data; this->user_data = new_data; - this->destroy = free; + this->destroy = hb_free; return true; } @@ -517,7 +556,7 @@ _hb_mapped_file_destroy (void *file_) assert (0); // If we don't have mmap we shouldn't reach here #endif - free (file); + hb_free (file); } #endif @@ -528,7 +567,7 @@ _open_resource_fork (const char *file_name, hb_mapped_file_t *file) size_t name_len = strlen (file_name); size_t len = name_len + sizeof (_PATH_RSRCFORKSPEC); - char *rsrc_name = (char *) malloc (len); + char *rsrc_name = (char *) hb_malloc (len); if (unlikely (!rsrc_name)) return -1; strncpy (rsrc_name, file_name, name_len); @@ -536,7 +575,7 @@ _open_resource_fork (const char *file_name, hb_mapped_file_t *file) sizeof (_PATH_RSRCFORKSPEC) - 1); int fd = open (rsrc_name, O_RDONLY | O_BINARY, 0); - free (rsrc_name); + hb_free (rsrc_name); if (fd != -1) { @@ -561,17 +600,37 @@ _open_resource_fork (const char *file_name, hb_mapped_file_t *file) * Creates a new blob containing the data from the * specified binary font file. * - * Returns: An #hb_blob_t pointer with the content of the file + * Returns: An #hb_blob_t pointer with the content of the file, + * or hb_blob_get_empty() if failed. * * Since: 1.7.7 **/ hb_blob_t * hb_blob_create_from_file (const char *file_name) { + hb_blob_t *blob = hb_blob_create_from_file_or_fail (file_name); + return likely (blob) ? blob : hb_blob_get_empty (); +} + +/** + * hb_blob_create_from_file_or_fail: + * @file_name: A font filename + * + * Creates a new blob containing the data from the + * specified binary font file. + * + * Returns: An #hb_blob_t pointer with the content of the file, + * or %NULL if failed. + * + * Since: 2.8.2 + **/ +hb_blob_t * +hb_blob_create_from_file_or_fail (const char *file_name) +{ /* Adopted from glib's gmappedfile.c with Matthias Clasen and Allison Lortie permission but changed a lot to suit our need. */ #if defined(HAVE_MMAP) && !defined(HB_NO_MMAP) - hb_mapped_file_t *file = (hb_mapped_file_t *) calloc (1, sizeof (hb_mapped_file_t)); + hb_mapped_file_t *file = (hb_mapped_file_t *) hb_calloc (1, sizeof (hb_mapped_file_t)); if (unlikely (!file)) return hb_blob_get_empty (); int fd = open (file_name, O_RDONLY | O_BINARY, 0); @@ -601,22 +660,22 @@ hb_blob_create_from_file (const char *file_name) close (fd); - return hb_blob_create (file->contents, file->length, - HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE, (void *) file, - (hb_destroy_func_t) _hb_mapped_file_destroy); + return hb_blob_create_or_fail (file->contents, file->length, + HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE, (void *) file, + (hb_destroy_func_t) _hb_mapped_file_destroy); fail: close (fd); fail_without_close: - free (file); + hb_free (file); #elif defined(_WIN32) && !defined(HB_NO_MMAP) - hb_mapped_file_t *file = (hb_mapped_file_t *) calloc (1, sizeof (hb_mapped_file_t)); + hb_mapped_file_t *file = (hb_mapped_file_t *) hb_calloc (1, sizeof (hb_mapped_file_t)); if (unlikely (!file)) return hb_blob_get_empty (); HANDLE fd; unsigned int size = strlen (file_name) + 1; - wchar_t * wchar_file_name = (wchar_t *) malloc (sizeof (wchar_t) * size); + wchar_t * wchar_file_name = (wchar_t *) hb_malloc (sizeof (wchar_t) * size); if (unlikely (!wchar_file_name)) goto fail_without_close; mbstowcs (wchar_file_name, file_name, size); #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) @@ -636,7 +695,7 @@ fail_without_close: OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, nullptr); #endif - free (wchar_file_name); + hb_free (wchar_file_name); if (unlikely (fd == INVALID_HANDLE_VALUE)) goto fail_without_close; @@ -661,22 +720,22 @@ fail_without_close: if (unlikely (!file->contents)) goto fail; CloseHandle (fd); - return hb_blob_create (file->contents, file->length, - HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE, (void *) file, - (hb_destroy_func_t) _hb_mapped_file_destroy); + return hb_blob_create_or_fail (file->contents, file->length, + HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE, (void *) file, + (hb_destroy_func_t) _hb_mapped_file_destroy); fail: CloseHandle (fd); fail_without_close: - free (file); + hb_free (file); #endif /* The following tries to read a file without knowing its size beforehand It's used as a fallback for systems without mmap or to read from pipes */ unsigned long len = 0, allocated = BUFSIZ * 16; - char *data = (char *) malloc (allocated); - if (unlikely (!data)) return hb_blob_get_empty (); + char *data = (char *) hb_malloc (allocated); + if (unlikely (!data)) return nullptr; FILE *fp = fopen (file_name, "rb"); if (unlikely (!fp)) goto fread_fail_without_close; @@ -689,7 +748,7 @@ fail_without_close: /* Don't allocate and go more than ~536MB, our mmap reader still can cover files like that but lets limit our fallback reader */ if (unlikely (allocated > (2 << 28))) goto fread_fail; - char *new_data = (char *) realloc (data, allocated); + char *new_data = (char *) hb_realloc (data, allocated); if (unlikely (!new_data)) goto fread_fail; data = new_data; } @@ -706,13 +765,13 @@ fail_without_close: } fclose (fp); - return hb_blob_create (data, len, HB_MEMORY_MODE_WRITABLE, data, - (hb_destroy_func_t) free); + return hb_blob_create_or_fail (data, len, HB_MEMORY_MODE_WRITABLE, data, + (hb_destroy_func_t) hb_free); fread_fail: fclose (fp); fread_fail_without_close: - free (data); - return hb_blob_get_empty (); + hb_free (data); + return nullptr; } #endif /* !HB_NO_OPEN */ diff --git a/thirdparty/harfbuzz/src/hb-blob.h b/thirdparty/harfbuzz/src/hb-blob.h index 86f12788d2..203f9e19dd 100644 --- a/thirdparty/harfbuzz/src/hb-blob.h +++ b/thirdparty/harfbuzz/src/hb-blob.h @@ -91,8 +91,18 @@ hb_blob_create (const char *data, hb_destroy_func_t destroy); HB_EXTERN hb_blob_t * +hb_blob_create_or_fail (const char *data, + unsigned int length, + hb_memory_mode_t mode, + void *user_data, + hb_destroy_func_t destroy); + +HB_EXTERN hb_blob_t * hb_blob_create_from_file (const char *file_name); +HB_EXTERN hb_blob_t * +hb_blob_create_from_file_or_fail (const char *file_name); + /* Always creates with MEMORY_MODE_READONLY. * Even if the parent blob is writable, we don't * want the user of the sub-blob to be able to diff --git a/thirdparty/harfbuzz/src/hb-blob.hh b/thirdparty/harfbuzz/src/hb-blob.hh index b03dfc1380..a3683a681e 100644 --- a/thirdparty/harfbuzz/src/hb-blob.hh +++ b/thirdparty/harfbuzz/src/hb-blob.hh @@ -88,7 +88,7 @@ struct hb_blob_ptr_t const T * get () const { return b->as<T> (); } hb_blob_t * get_blob () const { return b.get_raw (); } unsigned int get_length () const { return b.get ()->length; } - void destroy () { hb_blob_destroy (b.get ()); b = nullptr; } + void destroy () { hb_blob_destroy (b.get_raw ()); b = nullptr; } private: hb_nonnull_ptr_t<hb_blob_t> b; diff --git a/thirdparty/harfbuzz/src/hb-buffer-deserialize-json.hh b/thirdparty/harfbuzz/src/hb-buffer-deserialize-json.hh index 01db295498..e80cfea6e7 100644 --- a/thirdparty/harfbuzz/src/hb-buffer-deserialize-json.hh +++ b/thirdparty/harfbuzz/src/hb-buffer-deserialize-json.hh @@ -1,29 +1,30 @@ + #line 1 "hb-buffer-deserialize-json.rl" /* -* Copyright © 2013 Google, Inc. -* -* This is part of HarfBuzz, a text shaping library. -* -* Permission is hereby granted, without written agreement and without -* license or royalty fees, to use, copy, modify, and distribute this -* software and its documentation for any purpose, provided that the -* above copyright notice and the following two paragraphs appear in -* all copies of this software. -* -* IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -* ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -* IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -* DAMAGE. -* -* THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -* BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -* FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -* ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. -* -* Google Author(s): Behdad Esfahbod -*/ + * Copyright © 2013 Google, Inc. + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + * Google Author(s): Behdad Esfahbod + */ #ifndef HB_BUFFER_DESERIALIZE_JSON_HH #define HB_BUFFER_DESERIALIZE_JSON_HH @@ -31,158 +32,446 @@ #include "hb.hh" -#line 35 "hb-buffer-deserialize-json.hh" +#line 36 "hb-buffer-deserialize-json.hh" static const unsigned char _deserialize_json_trans_keys[] = { - 1u, 0u, 0u, 18u, 0u, 2u, 10u, 15u, - 16u, 17u, 2u, 2u, 0u, 7u, 0u, 6u, - 5u, 6u, 0u, 19u, 0u, 19u, 0u, 19u, - 2u, 2u, 0u, 7u, 0u, 6u, 5u, 6u, - 0u, 19u, 0u, 19u, 14u, 14u, 2u, 2u, - 0u, 7u, 0u, 6u, 0u, 19u, 0u, 19u, - 16u, 17u, 2u, 2u, 0u, 7u, 0u, 6u, - 5u, 6u, 0u, 19u, 0u, 19u, 2u, 2u, - 0u, 7u, 0u, 6u, 5u, 6u, 0u, 19u, - 0u, 19u, 2u, 2u, 0u, 7u, 0u, 6u, - 2u, 8u, 0u, 19u, 2u, 8u, 0u, 19u, - 0u, 19u, 2u, 2u, 0u, 7u, 0u, 6u, - 0u, 19u, 0u, 9u, 0u, 18u, 1u, 0u, - 0u + 0u, 0u, 9u, 123u, 9u, 34u, 97u, 117u, 120u, 121u, 34u, 34u, 9u, 58u, 9u, 57u, + 48u, 57u, 9u, 125u, 9u, 125u, 9u, 125u, 34u, 34u, 9u, 58u, 9u, 57u, 48u, 57u, + 9u, 125u, 9u, 125u, 108u, 108u, 34u, 34u, 9u, 58u, 9u, 57u, 9u, 125u, 9u, 125u, + 120u, 121u, 34u, 34u, 9u, 58u, 9u, 57u, 48u, 57u, 9u, 125u, 9u, 125u, 34u, 34u, + 9u, 58u, 9u, 57u, 48u, 57u, 9u, 125u, 9u, 125u, 34u, 34u, 9u, 58u, 9u, 57u, + 34u, 92u, 9u, 125u, 34u, 92u, 9u, 125u, 9u, 125u, 34u, 34u, 9u, 58u, 9u, 57u, + 9u, 125u, 9u, 93u, 9u, 123u, 0u, 0u, 0 }; -static const signed char _deserialize_json_char_class[] = { - 0, 0, 0, 0, 0, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 0, - 1, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 3, 4, 1, 1, 5, - 6, 6, 6, 6, 6, 6, 6, 6, - 6, 7, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 8, 9, 1, 1, 1, - 10, 1, 11, 12, 1, 1, 13, 1, - 1, 1, 1, 14, 1, 1, 1, 1, - 1, 1, 1, 1, 15, 1, 1, 16, - 17, 1, 18, 1, 19, 0 +static const char _deserialize_json_key_spans[] = { + 0, 115, 26, 21, 2, 1, 50, 49, + 10, 117, 117, 117, 1, 50, 49, 10, + 117, 117, 1, 1, 50, 49, 117, 117, + 2, 1, 50, 49, 10, 117, 117, 1, + 50, 49, 10, 117, 117, 1, 50, 49, + 59, 117, 59, 117, 117, 1, 50, 49, + 117, 85, 115, 0 }; static const short _deserialize_json_index_offsets[] = { - 0, 0, 19, 22, 28, 30, 31, 39, - 46, 48, 68, 88, 108, 109, 117, 124, - 126, 146, 166, 167, 168, 176, 183, 203, - 223, 225, 226, 234, 241, 243, 263, 283, - 284, 292, 299, 301, 321, 341, 342, 350, - 357, 364, 384, 391, 411, 431, 432, 440, - 447, 467, 477, 496, 0 + 0, 0, 116, 143, 165, 168, 170, 221, + 271, 282, 400, 518, 636, 638, 689, 739, + 750, 868, 986, 988, 990, 1041, 1091, 1209, + 1327, 1330, 1332, 1383, 1433, 1444, 1562, 1680, + 1682, 1733, 1783, 1794, 1912, 2030, 2032, 2083, + 2133, 2193, 2311, 2371, 2489, 2607, 2609, 2660, + 2710, 2828, 2914, 3030 }; -static const signed char _deserialize_json_indicies[] = { - 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2, 3, 0, 4, 5, 6, - 7, 8, 0, 9, 10, 11, 12, 12, - 0, 0, 0, 0, 0, 0, 13, 13, - 0, 0, 0, 14, 15, 16, 18, 19, - 20, 0, 0, 21, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 22, 23, 0, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 24, - 20, 0, 0, 21, 0, 19, 19, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 22, 25, 25, 0, 0, - 0, 0, 0, 0, 26, 26, 0, 0, - 0, 27, 28, 29, 31, 32, 33, 0, - 0, 34, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 35, 33, 0, 0, 34, 0, 32, - 32, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 35, 36, 37, - 37, 0, 0, 0, 0, 0, 0, 38, - 38, 0, 0, 0, 0, 39, 40, 42, - 0, 0, 43, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 44, 42, 0, 0, 43, 0, - 45, 45, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 44, 46, - 47, 48, 48, 0, 0, 0, 0, 0, - 0, 49, 49, 0, 0, 0, 50, 51, - 52, 54, 55, 56, 0, 0, 57, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 58, 56, - 0, 0, 57, 0, 55, 55, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 58, 59, 59, 0, 0, 0, - 0, 0, 0, 60, 60, 0, 0, 0, - 61, 62, 63, 65, 66, 67, 0, 0, - 68, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 69, 67, 0, 0, 68, 0, 66, 66, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 69, 70, 70, 0, - 0, 0, 0, 0, 0, 71, 71, 0, - 72, 0, 0, 73, 74, 76, 75, 75, - 75, 75, 75, 77, 79, 0, 0, 80, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 81, - 75, 0, 0, 0, 0, 0, 75, 83, - 0, 0, 84, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 85, 83, 0, 0, 84, 0, - 87, 87, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 85, 88, - 88, 0, 0, 0, 0, 0, 0, 89, - 89, 0, 0, 0, 0, 90, 91, 83, - 0, 0, 84, 0, 93, 93, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 85, 94, 0, 0, 95, 0, - 0, 0, 0, 0, 96, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2, +static const char _deserialize_json_indicies[] = { + 0, 0, 0, 0, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 0, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 1, 3, 3, 3, + 3, 3, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 3, 1, 4, 1, + 5, 1, 6, 7, 1, 1, 8, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 9, 1, 10, 11, + 1, 12, 1, 12, 12, 12, 12, 12, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 12, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 13, 1, 13, 13, + 13, 13, 13, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 13, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 14, 1, 1, 15, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 1, + 17, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 1, 19, 19, 19, 19, 19, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 19, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 20, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 21, + 1, 22, 22, 22, 22, 22, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 22, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 3, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 23, 1, 19, + 19, 19, 19, 19, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 19, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 20, 1, 1, 1, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 21, 1, 24, 1, 24, + 24, 24, 24, 24, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 24, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 25, 1, 25, 25, 25, 25, 25, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 25, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 26, 1, + 1, 27, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 1, 29, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 1, 31, + 31, 31, 31, 31, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 31, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 32, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 33, 1, 31, 31, 31, + 31, 31, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 31, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 32, 1, 1, 1, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 33, 1, 34, 1, 35, 1, 35, + 35, 35, 35, 35, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 35, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 36, 1, 36, 36, 36, 36, 36, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 36, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 37, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 1, 39, 39, 39, 39, + 39, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 39, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 40, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 41, 1, 39, 39, 39, 39, 39, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 39, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 40, 1, 1, + 1, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 41, 1, + 43, 44, 1, 45, 1, 45, 45, 45, + 45, 45, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 45, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 46, 1, + 46, 46, 46, 46, 46, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 46, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 47, 1, 1, 48, + 49, 49, 49, 49, 49, 49, 49, 49, + 49, 1, 50, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 1, 52, 52, 52, + 52, 52, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 52, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 53, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 54, 1, 52, 52, 52, 52, 52, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 52, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 53, 1, + 1, 1, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 54, + 1, 55, 1, 55, 55, 55, 55, 55, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 55, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 56, 1, 56, 56, + 56, 56, 56, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 56, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 57, 1, 1, 58, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 1, + 60, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 1, 62, 62, 62, 62, 62, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 62, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 63, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 64, + 1, 62, 62, 62, 62, 62, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 62, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 63, 1, 1, 1, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 64, 1, 65, + 1, 65, 65, 65, 65, 65, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 65, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 66, 1, 66, 66, 66, 66, + 66, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 66, 1, 67, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 68, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 1, 71, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 72, 70, 73, 73, 73, 73, 73, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 73, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 74, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 75, 1, + 70, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 70, 1, 76, 76, 76, 76, + 76, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 76, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 77, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 78, 1, 76, 76, 76, 76, 76, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 76, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 77, 1, 1, + 1, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 78, 1, + 80, 1, 80, 80, 80, 80, 80, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 80, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 81, 1, 81, 81, 81, + 81, 81, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 81, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 82, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 1, 76, + 76, 76, 76, 76, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 76, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 77, 1, 1, 1, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 78, 1, 85, 85, 85, + 85, 85, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 85, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 86, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 87, 1, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 0, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 1, 1, 0 }; -static const signed char _deserialize_json_index_defaults[] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 75, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0 -}; - -static const signed char _deserialize_json_cond_targs[] = { - 0, 1, 2, 2, 3, 4, 18, 24, - 37, 45, 5, 12, 6, 7, 8, 9, - 11, 8, 9, 11, 10, 2, 49, 10, - 49, 13, 14, 15, 16, 17, 15, 16, - 17, 10, 2, 49, 19, 20, 21, 22, - 23, 22, 10, 2, 49, 23, 25, 31, - 26, 27, 28, 29, 30, 28, 29, 30, - 10, 2, 49, 32, 33, 34, 35, 36, - 34, 35, 36, 10, 2, 49, 38, 39, - 40, 43, 44, 40, 41, 42, 41, 10, - 2, 49, 43, 10, 2, 49, 44, 44, - 46, 47, 43, 48, 48, 48, 49, 50, - 51, 0 +static const char _deserialize_json_trans_targs[] = { + 1, 0, 2, 2, 3, 4, 18, 24, + 37, 45, 5, 12, 6, 7, 8, 9, + 11, 9, 11, 10, 2, 49, 10, 49, + 13, 14, 15, 16, 17, 16, 17, 10, + 2, 49, 19, 20, 21, 22, 23, 10, + 2, 49, 23, 25, 31, 26, 27, 28, + 29, 30, 29, 30, 10, 2, 49, 32, + 33, 34, 35, 36, 35, 36, 10, 2, + 49, 38, 39, 40, 43, 44, 40, 41, + 42, 10, 2, 49, 10, 2, 49, 44, + 46, 47, 43, 48, 48, 49, 50, 51 }; -static const signed char _deserialize_json_cond_actions[] = { - 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2, 2, - 2, 0, 0, 0, 3, 3, 4, 0, - 5, 0, 0, 2, 2, 2, 0, 0, - 0, 6, 6, 7, 0, 0, 0, 2, - 2, 0, 8, 8, 9, 0, 0, 0, - 0, 0, 2, 2, 2, 0, 0, 0, - 10, 10, 11, 0, 0, 2, 2, 2, - 0, 0, 0, 12, 12, 13, 0, 0, - 2, 14, 14, 0, 15, 0, 0, 16, - 16, 17, 0, 18, 18, 19, 0, 15, - 0, 0, 20, 20, 0, 21, 0, 0, - 0, 0 +static const char _deserialize_json_trans_actions[] = { + 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2, 2, + 2, 0, 0, 3, 3, 4, 0, 5, + 0, 0, 2, 2, 2, 0, 0, 6, + 6, 7, 0, 0, 0, 2, 2, 8, + 8, 9, 0, 0, 0, 0, 0, 2, + 2, 2, 0, 0, 10, 10, 11, 0, + 0, 2, 2, 2, 0, 0, 12, 12, + 13, 0, 0, 2, 14, 14, 0, 15, + 0, 16, 16, 17, 18, 18, 19, 15, + 0, 0, 20, 20, 21, 0, 0, 0 }; static const int deserialize_json_start = 1; @@ -197,411 +486,247 @@ static const int deserialize_json_en_main = 1; static hb_bool_t _hb_buffer_deserialize_json (hb_buffer_t *buffer, -const char *buf, -unsigned int buf_len, -const char **end_ptr, -hb_font_t *font) + const char *buf, + unsigned int buf_len, + const char **end_ptr, + hb_font_t *font) { - const char *p = buf, *pe = buf + buf_len; - - /* Ensure we have positions. */ - (void) hb_buffer_get_glyph_positions (buffer, nullptr); - - while (p < pe && ISSPACE (*p)) - p++; - if (p < pe && *p == (buffer->len ? ',' : '[')) - { - *end_ptr = ++p; - } - - const char *tok = nullptr; - int cs; - hb_glyph_info_t info = {0}; - hb_glyph_position_t pos = {0}; - -#line 223 "hb-buffer-deserialize-json.hh" + const char *p = buf, *pe = buf + buf_len; + + /* Ensure we have positions. */ + (void) hb_buffer_get_glyph_positions (buffer, nullptr); + + while (p < pe && ISSPACE (*p)) + p++; + if (p < pe && *p == (buffer->len ? ',' : '[')) + { + *end_ptr = ++p; + } + + const char *tok = nullptr; + int cs; + hb_glyph_info_t info = {0}; + hb_glyph_position_t pos = {0}; + +#line 512 "hb-buffer-deserialize-json.hh" { - cs = (int)deserialize_json_start; + cs = deserialize_json_start; } - -#line 228 "hb-buffer-deserialize-json.hh" + +#line 517 "hb-buffer-deserialize-json.hh" { - unsigned int _trans = 0; - const unsigned char * _keys; - const signed char * _inds; - int _ic; - _resume: {} - if ( p == pe ) - goto _out; - _keys = ( _deserialize_json_trans_keys + ((cs<<1))); - _inds = ( _deserialize_json_indicies + (_deserialize_json_index_offsets[cs])); - - if ( ( (*( p))) <= 125 && ( (*( p))) >= 9 ) { - _ic = (int)_deserialize_json_char_class[(int)( (*( p))) - 9]; - if ( _ic <= (int)(*( _keys+1)) && _ic >= (int)(*( _keys)) ) - _trans = (unsigned int)(*( _inds + (int)( _ic - (int)(*( _keys)) ) )); - else - _trans = (unsigned int)_deserialize_json_index_defaults[cs]; - } - else { - _trans = (unsigned int)_deserialize_json_index_defaults[cs]; - } - - cs = (int)_deserialize_json_cond_targs[_trans]; - - if ( _deserialize_json_cond_actions[_trans] != 0 ) { - - switch ( _deserialize_json_cond_actions[_trans] ) { - case 1: { - { + int _slen; + int _trans; + const unsigned char *_keys; + const char *_inds; + if ( p == pe ) + goto _test_eof; + if ( cs == 0 ) + goto _out; +_resume: + _keys = _deserialize_json_trans_keys + (cs<<1); + _inds = _deserialize_json_indicies + _deserialize_json_index_offsets[cs]; + + _slen = _deserialize_json_key_spans[cs]; + _trans = _inds[ _slen > 0 && _keys[0] <=(*p) && + (*p) <= _keys[1] ? + (*p) - _keys[0] : _slen ]; + + cs = _deserialize_json_trans_targs[_trans]; + + if ( _deserialize_json_trans_actions[_trans] == 0 ) + goto _again; + + switch ( _deserialize_json_trans_actions[_trans] ) { + case 1: #line 38 "hb-buffer-deserialize-json.rl" - - memset (&info, 0, sizeof (info)); - memset (&pos , 0, sizeof (pos )); - } - -#line 264 "hb-buffer-deserialize-json.hh" - - - break; - } - case 5: { - { + { + memset (&info, 0, sizeof (info)); + memset (&pos , 0, sizeof (pos )); +} + break; + case 5: #line 43 "hb-buffer-deserialize-json.rl" - - buffer->add_info (info); - if (unlikely (!buffer->successful)) - return false; - buffer->pos[buffer->len - 1] = pos; - *end_ptr = p; - } - -#line 280 "hb-buffer-deserialize-json.hh" - - - break; - } - case 2: { - { + { + buffer->add_info (info); + if (unlikely (!buffer->successful)) + return false; + buffer->pos[buffer->len - 1] = pos; + *end_ptr = p; +} + break; + case 2: #line 51 "hb-buffer-deserialize-json.rl" - - tok = p; - } - -#line 292 "hb-buffer-deserialize-json.hh" - - - break; - } - case 15: { - { + { + tok = p; +} + break; + case 15: #line 55 "hb-buffer-deserialize-json.rl" - if (unlikely (!buffer->ensure_glyphs ())) return false; } - -#line 302 "hb-buffer-deserialize-json.hh" - - - break; - } - case 21: { - { + { if (unlikely (!buffer->ensure_glyphs ())) return false; } + break; + case 21: #line 56 "hb-buffer-deserialize-json.rl" - if (unlikely (!buffer->ensure_unicode ())) return false; } - -#line 312 "hb-buffer-deserialize-json.hh" - - - break; - } - case 16: { - { + { if (unlikely (!buffer->ensure_unicode ())) return false; } + break; + case 16: #line 58 "hb-buffer-deserialize-json.rl" - - /* TODO Unescape \" and \\ if found. */ - if (!hb_font_glyph_from_string (font, - tok, p - tok, - &info.codepoint)) - return false; - } - -#line 328 "hb-buffer-deserialize-json.hh" - - - break; - } - case 18: { - { + { + /* TODO Unescape \" and \\ if found. */ + if (!hb_font_glyph_from_string (font, + tok, p - tok, + &info.codepoint)) + return false; +} + break; + case 18: #line 66 "hb-buffer-deserialize-json.rl" - if (!parse_uint (tok, p, &info.codepoint)) return false; } - -#line 338 "hb-buffer-deserialize-json.hh" - - - break; - } - case 8: { - { + { if (!parse_uint (tok, p, &info.codepoint)) return false; } + break; + case 8: #line 67 "hb-buffer-deserialize-json.rl" - if (!parse_uint (tok, p, &info.cluster )) return false; } - -#line 348 "hb-buffer-deserialize-json.hh" - - - break; - } - case 10: { - { + { if (!parse_uint (tok, p, &info.cluster )) return false; } + break; + case 10: #line 68 "hb-buffer-deserialize-json.rl" - if (!parse_int (tok, p, &pos.x_offset )) return false; } - -#line 358 "hb-buffer-deserialize-json.hh" - - - break; - } - case 12: { - { + { if (!parse_int (tok, p, &pos.x_offset )) return false; } + break; + case 12: #line 69 "hb-buffer-deserialize-json.rl" - if (!parse_int (tok, p, &pos.y_offset )) return false; } - -#line 368 "hb-buffer-deserialize-json.hh" - - - break; - } - case 3: { - { + { if (!parse_int (tok, p, &pos.y_offset )) return false; } + break; + case 3: #line 70 "hb-buffer-deserialize-json.rl" - if (!parse_int (tok, p, &pos.x_advance)) return false; } - -#line 378 "hb-buffer-deserialize-json.hh" - - - break; - } - case 6: { - { + { if (!parse_int (tok, p, &pos.x_advance)) return false; } + break; + case 6: #line 71 "hb-buffer-deserialize-json.rl" - if (!parse_int (tok, p, &pos.y_advance)) return false; } - -#line 388 "hb-buffer-deserialize-json.hh" - - - break; - } - case 14: { - { + { if (!parse_int (tok, p, &pos.y_advance)) return false; } + break; + case 14: #line 51 "hb-buffer-deserialize-json.rl" - - tok = p; - } - -#line 400 "hb-buffer-deserialize-json.hh" - - { + { + tok = p; +} #line 55 "hb-buffer-deserialize-json.rl" - if (unlikely (!buffer->ensure_glyphs ())) return false; } - -#line 406 "hb-buffer-deserialize-json.hh" - - - break; - } - case 20: { - { + { if (unlikely (!buffer->ensure_glyphs ())) return false; } + break; + case 20: #line 51 "hb-buffer-deserialize-json.rl" - - tok = p; - } - -#line 418 "hb-buffer-deserialize-json.hh" - - { + { + tok = p; +} #line 56 "hb-buffer-deserialize-json.rl" - if (unlikely (!buffer->ensure_unicode ())) return false; } - -#line 424 "hb-buffer-deserialize-json.hh" - - - break; - } - case 17: { - { + { if (unlikely (!buffer->ensure_unicode ())) return false; } + break; + case 17: #line 58 "hb-buffer-deserialize-json.rl" - - /* TODO Unescape \" and \\ if found. */ - if (!hb_font_glyph_from_string (font, - tok, p - tok, - &info.codepoint)) - return false; - } - -#line 440 "hb-buffer-deserialize-json.hh" - - { + { + /* TODO Unescape \" and \\ if found. */ + if (!hb_font_glyph_from_string (font, + tok, p - tok, + &info.codepoint)) + return false; +} #line 43 "hb-buffer-deserialize-json.rl" - - buffer->add_info (info); - if (unlikely (!buffer->successful)) - return false; - buffer->pos[buffer->len - 1] = pos; - *end_ptr = p; - } - -#line 452 "hb-buffer-deserialize-json.hh" - - - break; - } - case 19: { - { + { + buffer->add_info (info); + if (unlikely (!buffer->successful)) + return false; + buffer->pos[buffer->len - 1] = pos; + *end_ptr = p; +} + break; + case 19: #line 66 "hb-buffer-deserialize-json.rl" - if (!parse_uint (tok, p, &info.codepoint)) return false; } - -#line 462 "hb-buffer-deserialize-json.hh" - - { + { if (!parse_uint (tok, p, &info.codepoint)) return false; } #line 43 "hb-buffer-deserialize-json.rl" - - buffer->add_info (info); - if (unlikely (!buffer->successful)) - return false; - buffer->pos[buffer->len - 1] = pos; - *end_ptr = p; - } - -#line 474 "hb-buffer-deserialize-json.hh" - - - break; - } - case 9: { - { + { + buffer->add_info (info); + if (unlikely (!buffer->successful)) + return false; + buffer->pos[buffer->len - 1] = pos; + *end_ptr = p; +} + break; + case 9: #line 67 "hb-buffer-deserialize-json.rl" - if (!parse_uint (tok, p, &info.cluster )) return false; } - -#line 484 "hb-buffer-deserialize-json.hh" - - { + { if (!parse_uint (tok, p, &info.cluster )) return false; } #line 43 "hb-buffer-deserialize-json.rl" - - buffer->add_info (info); - if (unlikely (!buffer->successful)) - return false; - buffer->pos[buffer->len - 1] = pos; - *end_ptr = p; - } - -#line 496 "hb-buffer-deserialize-json.hh" - - - break; - } - case 11: { - { + { + buffer->add_info (info); + if (unlikely (!buffer->successful)) + return false; + buffer->pos[buffer->len - 1] = pos; + *end_ptr = p; +} + break; + case 11: #line 68 "hb-buffer-deserialize-json.rl" - if (!parse_int (tok, p, &pos.x_offset )) return false; } - -#line 506 "hb-buffer-deserialize-json.hh" - - { + { if (!parse_int (tok, p, &pos.x_offset )) return false; } #line 43 "hb-buffer-deserialize-json.rl" - - buffer->add_info (info); - if (unlikely (!buffer->successful)) - return false; - buffer->pos[buffer->len - 1] = pos; - *end_ptr = p; - } - -#line 518 "hb-buffer-deserialize-json.hh" - - - break; - } - case 13: { - { + { + buffer->add_info (info); + if (unlikely (!buffer->successful)) + return false; + buffer->pos[buffer->len - 1] = pos; + *end_ptr = p; +} + break; + case 13: #line 69 "hb-buffer-deserialize-json.rl" - if (!parse_int (tok, p, &pos.y_offset )) return false; } - -#line 528 "hb-buffer-deserialize-json.hh" - - { + { if (!parse_int (tok, p, &pos.y_offset )) return false; } #line 43 "hb-buffer-deserialize-json.rl" - - buffer->add_info (info); - if (unlikely (!buffer->successful)) - return false; - buffer->pos[buffer->len - 1] = pos; - *end_ptr = p; - } - -#line 540 "hb-buffer-deserialize-json.hh" - - - break; - } - case 4: { - { + { + buffer->add_info (info); + if (unlikely (!buffer->successful)) + return false; + buffer->pos[buffer->len - 1] = pos; + *end_ptr = p; +} + break; + case 4: #line 70 "hb-buffer-deserialize-json.rl" - if (!parse_int (tok, p, &pos.x_advance)) return false; } - -#line 550 "hb-buffer-deserialize-json.hh" - - { + { if (!parse_int (tok, p, &pos.x_advance)) return false; } #line 43 "hb-buffer-deserialize-json.rl" - - buffer->add_info (info); - if (unlikely (!buffer->successful)) - return false; - buffer->pos[buffer->len - 1] = pos; - *end_ptr = p; - } - -#line 562 "hb-buffer-deserialize-json.hh" - - - break; - } - case 7: { - { + { + buffer->add_info (info); + if (unlikely (!buffer->successful)) + return false; + buffer->pos[buffer->len - 1] = pos; + *end_ptr = p; +} + break; + case 7: #line 71 "hb-buffer-deserialize-json.rl" - if (!parse_int (tok, p, &pos.y_advance)) return false; } - -#line 572 "hb-buffer-deserialize-json.hh" - - { + { if (!parse_int (tok, p, &pos.y_advance)) return false; } #line 43 "hb-buffer-deserialize-json.rl" - - buffer->add_info (info); - if (unlikely (!buffer->successful)) - return false; - buffer->pos[buffer->len - 1] = pos; - *end_ptr = p; - } - -#line 584 "hb-buffer-deserialize-json.hh" - - - break; - } - } - - } - - if ( cs != 0 ) { - p += 1; - goto _resume; - } - _out: {} + { + buffer->add_info (info); + if (unlikely (!buffer->successful)) + return false; + buffer->pos[buffer->len - 1] = pos; + *end_ptr = p; +} + break; +#line 713 "hb-buffer-deserialize-json.hh" } - + +_again: + if ( cs == 0 ) + goto _out; + if ( ++p != pe ) + goto _resume; + _test_eof: {} + _out: {} + } + #line 136 "hb-buffer-deserialize-json.rl" - - - *end_ptr = p; - - return p == pe && *(p-1) != ']'; + + + *end_ptr = p; + + return p == pe && *(p-1) != ']'; } #endif /* HB_BUFFER_DESERIALIZE_JSON_HH */ diff --git a/thirdparty/harfbuzz/src/hb-buffer-deserialize-text.hh b/thirdparty/harfbuzz/src/hb-buffer-deserialize-text.hh index fb36f56015..b599e9667c 100644 --- a/thirdparty/harfbuzz/src/hb-buffer-deserialize-text.hh +++ b/thirdparty/harfbuzz/src/hb-buffer-deserialize-text.hh @@ -1,29 +1,30 @@ + #line 1 "hb-buffer-deserialize-text.rl" /* -* Copyright © 2013 Google, Inc. -* -* This is part of HarfBuzz, a text shaping library. -* -* Permission is hereby granted, without written agreement and without -* license or royalty fees, to use, copy, modify, and distribute this -* software and its documentation for any purpose, provided that the -* above copyright notice and the following two paragraphs appear in -* all copies of this software. -* -* IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -* ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -* IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -* DAMAGE. -* -* THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -* BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -* FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -* ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. -* -* Google Author(s): Behdad Esfahbod -*/ + * Copyright © 2013 Google, Inc. + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + * Google Author(s): Behdad Esfahbod + */ #ifndef HB_BUFFER_DESERIALIZE_TEXT_HH #define HB_BUFFER_DESERIALIZE_TEXT_HH @@ -31,143 +32,366 @@ #include "hb.hh" -#line 35 "hb-buffer-deserialize-text.hh" +#line 36 "hb-buffer-deserialize-text.hh" static const unsigned char _deserialize_text_trans_keys[] = { - 1u, 0u, 0u, 13u, 12u, 12u, 2u, 2u, - 5u, 11u, 0u, 12u, 5u, 6u, 4u, 6u, - 5u, 6u, 5u, 6u, 4u, 6u, 5u, 6u, - 3u, 3u, 4u, 6u, 5u, 6u, 3u, 6u, - 2u, 16u, 4u, 6u, 5u, 6u, 0u, 16u, - 0u, 16u, 1u, 0u, 0u, 12u, 0u, 16u, - 0u, 16u, 0u, 16u, 0u, 16u, 0u, 16u, - 0u, 16u, 0u, 16u, 0u, 16u, 0u, 16u, - 0u, 16u, 0u, 16u, 0u, 16u, 0u, 16u, - 0u, 16u, 0u + 0u, 0u, 9u, 91u, 85u, 85u, 43u, 43u, 48u, 102u, 9u, 85u, 48u, 57u, 45u, 57u, + 48u, 57u, 48u, 57u, 45u, 57u, 48u, 57u, 44u, 44u, 45u, 57u, 48u, 57u, 44u, 57u, + 43u, 124u, 45u, 57u, 48u, 57u, 9u, 124u, 9u, 124u, 0u, 0u, 9u, 85u, 9u, 124u, + 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, + 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, 0 }; -static const signed char _deserialize_text_char_class[] = { - 0, 0, 0, 0, 0, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 0, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 3, 4, 1, 1, 5, - 6, 6, 6, 6, 6, 6, 6, 6, - 6, 1, 1, 7, 8, 9, 1, 10, - 11, 11, 11, 11, 11, 11, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 12, 1, 1, 1, - 1, 1, 13, 14, 15, 1, 1, 1, - 11, 11, 11, 11, 11, 11, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 16, 0 +static const char _deserialize_text_key_spans[] = { + 0, 83, 1, 1, 55, 77, 10, 13, + 10, 10, 13, 10, 1, 13, 10, 14, + 82, 13, 10, 116, 116, 0, 77, 116, + 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116 }; static const short _deserialize_text_index_offsets[] = { - 0, 0, 14, 15, 16, 23, 36, 38, - 41, 43, 45, 48, 50, 51, 54, 56, - 60, 75, 78, 80, 97, 114, 114, 127, - 144, 161, 178, 195, 212, 229, 246, 263, - 280, 297, 314, 331, 348, 0 -}; - -static const signed char _deserialize_text_indicies[] = { - 1, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 3, 4, 6, - 7, 7, 0, 0, 0, 0, 7, 8, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4, 10, 11, 13, 14, - 15, 17, 18, 20, 21, 23, 24, 25, - 27, 28, 29, 31, 32, 33, 35, 36, - 29, 0, 28, 28, 38, 38, 0, 0, - 0, 0, 38, 0, 38, 0, 0, 0, - 38, 38, 38, 40, 41, 42, 44, 45, - 47, 0, 0, 0, 0, 48, 48, 0, - 49, 50, 0, 48, 0, 0, 0, 0, - 51, 52, 0, 0, 0, 0, 0, 0, - 0, 0, 53, 0, 0, 0, 0, 0, - 0, 54, 8, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4, 56, - 0, 0, 0, 0, 0, 0, 0, 0, - 57, 0, 0, 0, 0, 0, 0, 58, - 56, 0, 0, 0, 0, 60, 60, 0, - 0, 57, 0, 0, 0, 0, 0, 0, - 58, 63, 62, 64, 0, 62, 62, 62, - 62, 65, 62, 66, 62, 62, 62, 67, - 68, 69, 71, 38, 72, 0, 38, 38, - 38, 38, 73, 38, 74, 38, 38, 38, - 37, 75, 76, 78, 0, 0, 79, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 80, 81, 82, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 53, 83, 84, 62, 64, - 0, 62, 62, 62, 62, 65, 62, 66, - 62, 62, 62, 67, 68, 69, 86, 0, - 87, 0, 0, 0, 0, 0, 0, 0, - 88, 0, 0, 0, 0, 57, 89, 91, - 0, 92, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 93, 94, - 91, 0, 92, 0, 0, 36, 36, 0, - 0, 0, 0, 0, 0, 0, 0, 93, - 94, 86, 0, 87, 0, 0, 97, 97, - 0, 0, 0, 88, 0, 0, 0, 0, - 57, 89, 99, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 100, 101, 99, 0, 0, 0, 0, - 45, 45, 0, 0, 0, 0, 0, 0, - 0, 0, 100, 101, 78, 0, 0, 79, - 0, 18, 18, 0, 0, 0, 0, 0, - 0, 0, 0, 80, 81, 0 + 0, 0, 84, 86, 88, 144, 222, 233, + 247, 258, 269, 283, 294, 296, 310, 321, + 336, 419, 433, 444, 561, 678, 679, 757, + 874, 991, 1108, 1225, 1342, 1459, 1576, 1693, + 1810, 1927, 2044, 2161, 2278 }; -static const signed char _deserialize_text_index_defaults[] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 62, 38, 0, 0, 62, 0, 0, - 0, 0, 0, 0, 0, 0 +static const char _deserialize_text_indicies[] = { + 0, 0, 0, 0, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 0, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 3, 1, 4, 1, 5, + 1, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 1, 1, 1, 1, 1, + 1, 1, 6, 6, 6, 6, 6, 6, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 6, 6, 6, 6, 6, 6, + 1, 7, 7, 7, 7, 7, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 7, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 4, 1, 8, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 1, 10, 1, 1, 11, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 1, + 13, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 1, 15, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 1, 17, 1, + 1, 18, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 1, 20, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 1, 22, + 1, 23, 1, 1, 24, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 1, 26, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 1, 22, 1, 1, 1, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 1, 28, 28, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 28, 1, 1, 28, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 28, 28, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 28, 1, 29, 1, 1, 30, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 1, 32, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 1, 34, 34, 34, + 34, 34, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 34, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 1, 1, + 1, 36, 37, 1, 1, 35, 35, 35, + 35, 35, 35, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 35, 35, 35, + 35, 35, 35, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 38, 1, 39, 39, 39, 39, 39, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 39, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 40, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 41, 1, 1, + 7, 7, 7, 7, 7, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 7, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 4, 1, 42, 42, + 42, 42, 42, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 42, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 43, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 44, 1, 42, 42, 42, 42, 42, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 42, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 1, 1, 1, 1, + 43, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 44, 1, + 47, 47, 47, 47, 47, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 47, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 48, 1, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 49, 46, 46, 50, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 51, 52, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 53, 46, 54, 54, 54, + 54, 54, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 54, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 55, + 1, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 56, 28, 28, 57, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 58, 59, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 60, 28, 61, 61, 61, 61, 61, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 61, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 62, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 63, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 64, 1, 65, + 65, 65, 65, 65, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 65, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 40, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 66, 1, 67, 67, 67, 67, + 67, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 67, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 48, 1, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 49, 46, 46, 50, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 51, + 52, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 53, + 46, 68, 68, 68, 68, 68, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 68, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 69, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 70, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 43, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 71, 1, 72, 72, + 72, 72, 72, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 72, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 73, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 74, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 75, 1, 72, 72, 72, 72, 72, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 72, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 73, 1, 1, + 1, 1, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 74, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 75, 1, + 68, 68, 68, 68, 68, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 68, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 69, 1, 1, 1, 1, 76, + 76, 76, 76, 76, 76, 76, 76, 76, + 76, 1, 1, 1, 1, 1, 1, 70, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 43, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 71, 1, 77, 77, 77, + 77, 77, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 77, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 78, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 79, 1, 77, 77, 77, 77, 77, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 77, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 78, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 79, 1, 61, + 61, 61, 61, 61, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 61, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 62, 1, 1, 1, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 63, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 64, 1, 0 }; -static const signed char _deserialize_text_cond_targs[] = { - 0, 1, 2, 25, 3, 3, 4, 19, - 5, 6, 23, 24, 7, 8, 27, 36, - 8, 27, 36, 9, 30, 33, 10, 11, - 12, 15, 11, 12, 15, 13, 13, 14, - 31, 32, 14, 31, 32, 16, 26, 17, - 18, 34, 35, 18, 34, 35, 19, 20, - 19, 6, 21, 22, 20, 21, 22, 23, - 20, 21, 22, 24, 24, 25, 26, 26, - 7, 9, 10, 16, 21, 29, 26, 26, - 7, 9, 10, 21, 29, 27, 28, 17, - 21, 29, 28, 29, 29, 30, 28, 7, - 10, 29, 31, 28, 7, 21, 29, 32, - 33, 33, 34, 28, 21, 29, 35, 36, - 0 +static const char _deserialize_text_trans_targs[] = { + 1, 0, 2, 25, 3, 4, 19, 5, + 23, 24, 8, 27, 36, 27, 36, 30, + 33, 11, 12, 15, 12, 15, 13, 14, + 31, 32, 31, 32, 26, 18, 34, 35, + 34, 35, 20, 19, 6, 21, 22, 20, + 21, 22, 20, 21, 22, 24, 26, 26, + 7, 9, 10, 16, 21, 29, 26, 7, + 9, 10, 16, 21, 29, 28, 17, 21, + 29, 28, 29, 29, 28, 7, 10, 29, + 28, 7, 21, 29, 33, 28, 21, 29 }; -static const signed char _deserialize_text_cond_actions[] = { - 0, 0, 0, 0, 1, 0, 0, 2, - 0, 0, 2, 2, 0, 3, 4, 4, - 0, 5, 5, 0, 4, 4, 0, 3, - 3, 3, 0, 0, 0, 6, 0, 3, - 4, 4, 0, 5, 5, 0, 5, 0, - 3, 4, 4, 0, 5, 5, 7, 7, - 8, 9, 7, 7, 0, 0, 0, 10, - 10, 10, 10, 10, 8, 11, 12, 13, - 14, 14, 14, 15, 11, 11, 16, 17, - 18, 18, 18, 16, 16, 19, 19, 20, - 19, 19, 0, 0, 13, 10, 10, 21, - 21, 10, 22, 22, 23, 22, 22, 22, - 10, 5, 24, 24, 24, 24, 24, 19, - 0 +static const char _deserialize_text_trans_actions[] = { + 0, 0, 0, 0, 1, 0, 2, 0, + 2, 2, 3, 4, 4, 5, 5, 4, + 4, 3, 3, 3, 0, 0, 6, 3, + 4, 4, 5, 5, 5, 3, 4, 4, + 5, 5, 7, 8, 9, 7, 7, 0, + 0, 0, 10, 10, 10, 8, 12, 13, + 14, 14, 14, 15, 11, 11, 17, 18, + 18, 18, 0, 16, 16, 19, 20, 19, + 19, 0, 0, 13, 10, 21, 21, 10, + 22, 23, 22, 22, 5, 24, 24, 24 }; -static const signed char _deserialize_text_eof_trans[] = { - 1, 2, 3, 6, 7, 9, 10, 13, - 17, 20, 23, 27, 28, 31, 35, 29, - 38, 40, 44, 47, 53, 54, 55, 56, - 60, 62, 71, 78, 83, 70, 86, 91, - 96, 97, 99, 103, 104, 0 +static const char _deserialize_text_eof_actions[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 10, + 10, 11, 16, 19, 0, 11, 10, 22, + 22, 10, 24, 24, 19 }; static const int deserialize_text_start = 1; @@ -182,583 +406,448 @@ static const int deserialize_text_en_main = 1; static hb_bool_t _hb_buffer_deserialize_text (hb_buffer_t *buffer, -const char *buf, -unsigned int buf_len, -const char **end_ptr, -hb_font_t *font) + const char *buf, + unsigned int buf_len, + const char **end_ptr, + hb_font_t *font) { - const char *p = buf, *pe = buf + buf_len; - - /* Ensure we have positions. */ - (void) hb_buffer_get_glyph_positions (buffer, nullptr); - - while (p < pe && ISSPACE (*p)) - p++; - - const char *eof = pe, *tok = nullptr; - int cs; - hb_glyph_info_t info = {0}; - hb_glyph_position_t pos = {0}; - -#line 204 "hb-buffer-deserialize-text.hh" - { - cs = (int)deserialize_text_start; + const char *p = buf, *pe = buf + buf_len; + + /* Ensure we have positions. */ + (void) hb_buffer_get_glyph_positions (buffer, nullptr); + + while (p < pe && ISSPACE (*p)) + p++; + + const char *eof = pe, *tok = nullptr; + int cs; + hb_glyph_info_t info = {0}; + hb_glyph_position_t pos = {0}; + +#line 428 "hb-buffer-deserialize-text.hh" + { + cs = deserialize_text_start; } - -#line 209 "hb-buffer-deserialize-text.hh" - { - unsigned int _trans = 0; - const unsigned char * _keys; - const signed char * _inds; - int _ic; - _resume: {} - if ( p == pe && p != eof ) - goto _out; - if ( p == eof ) { - if ( _deserialize_text_eof_trans[cs] > 0 ) { - _trans = (unsigned int)_deserialize_text_eof_trans[cs] - 1; - } - } - else { - _keys = ( _deserialize_text_trans_keys + ((cs<<1))); - _inds = ( _deserialize_text_indicies + (_deserialize_text_index_offsets[cs])); - - if ( ( (*( p))) <= 124 && ( (*( p))) >= 9 ) { - _ic = (int)_deserialize_text_char_class[(int)( (*( p))) - 9]; - if ( _ic <= (int)(*( _keys+1)) && _ic >= (int)(*( _keys)) ) - _trans = (unsigned int)(*( _inds + (int)( _ic - (int)(*( _keys)) ) )); - else - _trans = (unsigned int)_deserialize_text_index_defaults[cs]; - } - else { - _trans = (unsigned int)_deserialize_text_index_defaults[cs]; - } - - } - cs = (int)_deserialize_text_cond_targs[_trans]; - - if ( _deserialize_text_cond_actions[_trans] != 0 ) { - - switch ( _deserialize_text_cond_actions[_trans] ) { - case 1: { - { + +#line 433 "hb-buffer-deserialize-text.hh" + { + int _slen; + int _trans; + const unsigned char *_keys; + const char *_inds; + if ( p == pe ) + goto _test_eof; + if ( cs == 0 ) + goto _out; +_resume: + _keys = _deserialize_text_trans_keys + (cs<<1); + _inds = _deserialize_text_indicies + _deserialize_text_index_offsets[cs]; + + _slen = _deserialize_text_key_spans[cs]; + _trans = _inds[ _slen > 0 && _keys[0] <=(*p) && + (*p) <= _keys[1] ? + (*p) - _keys[0] : _slen ]; + + cs = _deserialize_text_trans_targs[_trans]; + + if ( _deserialize_text_trans_actions[_trans] == 0 ) + goto _again; + + switch ( _deserialize_text_trans_actions[_trans] ) { + case 1: #line 38 "hb-buffer-deserialize-text.rl" - - memset (&info, 0, sizeof (info)); - memset (&pos , 0, sizeof (pos )); - } - -#line 252 "hb-buffer-deserialize-text.hh" - - - break; - } - case 3: { - { + { + memset (&info, 0, sizeof (info)); + memset (&pos , 0, sizeof (pos )); +} + break; + case 3: #line 51 "hb-buffer-deserialize-text.rl" - - tok = p; - } - -#line 264 "hb-buffer-deserialize-text.hh" - - - break; - } - case 5: { - { + { + tok = p; +} + break; + case 5: #line 55 "hb-buffer-deserialize-text.rl" - if (unlikely (!buffer->ensure_glyphs ())) return false; } - -#line 274 "hb-buffer-deserialize-text.hh" - - - break; - } - case 8: { - { + { if (unlikely (!buffer->ensure_glyphs ())) return false; } + break; + case 8: #line 56 "hb-buffer-deserialize-text.rl" - if (unlikely (!buffer->ensure_unicode ())) return false; } - -#line 284 "hb-buffer-deserialize-text.hh" - - - break; - } - case 18: { - { + { if (unlikely (!buffer->ensure_unicode ())) return false; } + break; + case 18: #line 58 "hb-buffer-deserialize-text.rl" - - /* TODO Unescape delimeters. */ - if (!hb_font_glyph_from_string (font, - tok, p - tok, - &info.codepoint)) - return false; - } - -#line 300 "hb-buffer-deserialize-text.hh" - - - break; - } - case 9: { - { + { + /* TODO Unescape delimeters. */ + if (!hb_font_glyph_from_string (font, + tok, p - tok, + &info.codepoint)) + return false; +} + break; + case 9: #line 66 "hb-buffer-deserialize-text.rl" - if (!parse_hex (tok, p, &info.codepoint )) return false; } - -#line 310 "hb-buffer-deserialize-text.hh" - - - break; - } - case 21: { - { + {if (!parse_hex (tok, p, &info.codepoint )) return false; } + break; + case 21: #line 68 "hb-buffer-deserialize-text.rl" - if (!parse_uint (tok, p, &info.cluster )) return false; } - -#line 320 "hb-buffer-deserialize-text.hh" - - - break; - } - case 6: { - { + { if (!parse_uint (tok, p, &info.cluster )) return false; } + break; + case 6: #line 69 "hb-buffer-deserialize-text.rl" - if (!parse_int (tok, p, &pos.x_offset )) return false; } - -#line 330 "hb-buffer-deserialize-text.hh" - - - break; - } - case 23: { - { + { if (!parse_int (tok, p, &pos.x_offset )) return false; } + break; + case 23: #line 70 "hb-buffer-deserialize-text.rl" - if (!parse_int (tok, p, &pos.y_offset )) return false; } - -#line 340 "hb-buffer-deserialize-text.hh" - - - break; - } - case 20: { - { + { if (!parse_int (tok, p, &pos.y_offset )) return false; } + break; + case 20: #line 71 "hb-buffer-deserialize-text.rl" - if (!parse_int (tok, p, &pos.x_advance)) return false; } - -#line 350 "hb-buffer-deserialize-text.hh" - - - break; - } - case 15: { - { + { if (!parse_int (tok, p, &pos.x_advance)) return false; } + break; + case 15: #line 38 "hb-buffer-deserialize-text.rl" - - memset (&info, 0, sizeof (info)); - memset (&pos , 0, sizeof (pos )); - } - -#line 363 "hb-buffer-deserialize-text.hh" - - { + { + memset (&info, 0, sizeof (info)); + memset (&pos , 0, sizeof (pos )); +} #line 51 "hb-buffer-deserialize-text.rl" - - tok = p; - } - -#line 371 "hb-buffer-deserialize-text.hh" - - - break; - } - case 4: { - { + { + tok = p; +} + break; + case 4: #line 51 "hb-buffer-deserialize-text.rl" - - tok = p; - } - -#line 383 "hb-buffer-deserialize-text.hh" - - { + { + tok = p; +} #line 55 "hb-buffer-deserialize-text.rl" - if (unlikely (!buffer->ensure_glyphs ())) return false; } - -#line 389 "hb-buffer-deserialize-text.hh" - - - break; - } - case 2: { - { + { if (unlikely (!buffer->ensure_glyphs ())) return false; } + break; + case 2: #line 51 "hb-buffer-deserialize-text.rl" - - tok = p; - } - -#line 401 "hb-buffer-deserialize-text.hh" - - { + { + tok = p; +} #line 56 "hb-buffer-deserialize-text.rl" - if (unlikely (!buffer->ensure_unicode ())) return false; } - -#line 407 "hb-buffer-deserialize-text.hh" - - - break; - } - case 16: { - { + { if (unlikely (!buffer->ensure_unicode ())) return false; } + break; + case 16: #line 58 "hb-buffer-deserialize-text.rl" - - /* TODO Unescape delimeters. */ - if (!hb_font_glyph_from_string (font, - tok, p - tok, - &info.codepoint)) - return false; - } - -#line 423 "hb-buffer-deserialize-text.hh" - - { + { + /* TODO Unescape delimeters. */ + if (!hb_font_glyph_from_string (font, + tok, p - tok, + &info.codepoint)) + return false; +} #line 43 "hb-buffer-deserialize-text.rl" - - buffer->add_info (info); - if (unlikely (!buffer->successful)) - return false; - buffer->pos[buffer->len - 1] = pos; - *end_ptr = p; - } - -#line 435 "hb-buffer-deserialize-text.hh" - - - break; - } - case 7: { - { + { + buffer->add_info (info); + if (unlikely (!buffer->successful)) + return false; + buffer->pos[buffer->len - 1] = pos; + *end_ptr = p; +} + break; + case 7: #line 66 "hb-buffer-deserialize-text.rl" - if (!parse_hex (tok, p, &info.codepoint )) return false; } - -#line 445 "hb-buffer-deserialize-text.hh" - - { + {if (!parse_hex (tok, p, &info.codepoint )) return false; } #line 43 "hb-buffer-deserialize-text.rl" - - buffer->add_info (info); - if (unlikely (!buffer->successful)) - return false; - buffer->pos[buffer->len - 1] = pos; - *end_ptr = p; - } - -#line 457 "hb-buffer-deserialize-text.hh" - - - break; - } - case 10: { - { + { + buffer->add_info (info); + if (unlikely (!buffer->successful)) + return false; + buffer->pos[buffer->len - 1] = pos; + *end_ptr = p; +} + break; + case 10: #line 68 "hb-buffer-deserialize-text.rl" - if (!parse_uint (tok, p, &info.cluster )) return false; } - -#line 467 "hb-buffer-deserialize-text.hh" - - { + { if (!parse_uint (tok, p, &info.cluster )) return false; } #line 43 "hb-buffer-deserialize-text.rl" - - buffer->add_info (info); - if (unlikely (!buffer->successful)) - return false; - buffer->pos[buffer->len - 1] = pos; - *end_ptr = p; - } - -#line 479 "hb-buffer-deserialize-text.hh" - - - break; - } - case 22: { - { + { + buffer->add_info (info); + if (unlikely (!buffer->successful)) + return false; + buffer->pos[buffer->len - 1] = pos; + *end_ptr = p; +} + break; + case 22: #line 70 "hb-buffer-deserialize-text.rl" - if (!parse_int (tok, p, &pos.y_offset )) return false; } - -#line 489 "hb-buffer-deserialize-text.hh" - - { + { if (!parse_int (tok, p, &pos.y_offset )) return false; } #line 43 "hb-buffer-deserialize-text.rl" - - buffer->add_info (info); - if (unlikely (!buffer->successful)) - return false; - buffer->pos[buffer->len - 1] = pos; - *end_ptr = p; - } - -#line 501 "hb-buffer-deserialize-text.hh" - - - break; - } - case 19: { - { + { + buffer->add_info (info); + if (unlikely (!buffer->successful)) + return false; + buffer->pos[buffer->len - 1] = pos; + *end_ptr = p; +} + break; + case 19: #line 71 "hb-buffer-deserialize-text.rl" - if (!parse_int (tok, p, &pos.x_advance)) return false; } - -#line 511 "hb-buffer-deserialize-text.hh" - - { + { if (!parse_int (tok, p, &pos.x_advance)) return false; } #line 43 "hb-buffer-deserialize-text.rl" - - buffer->add_info (info); - if (unlikely (!buffer->successful)) - return false; - buffer->pos[buffer->len - 1] = pos; - *end_ptr = p; - } - -#line 523 "hb-buffer-deserialize-text.hh" - - - break; - } - case 24: { - { + { + buffer->add_info (info); + if (unlikely (!buffer->successful)) + return false; + buffer->pos[buffer->len - 1] = pos; + *end_ptr = p; +} + break; + case 24: #line 72 "hb-buffer-deserialize-text.rl" - if (!parse_int (tok, p, &pos.y_advance)) return false; } - -#line 533 "hb-buffer-deserialize-text.hh" - - { + { if (!parse_int (tok, p, &pos.y_advance)) return false; } #line 43 "hb-buffer-deserialize-text.rl" - - buffer->add_info (info); - if (unlikely (!buffer->successful)) - return false; - buffer->pos[buffer->len - 1] = pos; - *end_ptr = p; - } - -#line 545 "hb-buffer-deserialize-text.hh" - - - break; - } - case 12: { - { + { + buffer->add_info (info); + if (unlikely (!buffer->successful)) + return false; + buffer->pos[buffer->len - 1] = pos; + *end_ptr = p; +} + break; + case 12: #line 38 "hb-buffer-deserialize-text.rl" - - memset (&info, 0, sizeof (info)); - memset (&pos , 0, sizeof (pos )); - } - -#line 558 "hb-buffer-deserialize-text.hh" - - { + { + memset (&info, 0, sizeof (info)); + memset (&pos , 0, sizeof (pos )); +} #line 51 "hb-buffer-deserialize-text.rl" - - tok = p; - } - -#line 566 "hb-buffer-deserialize-text.hh" - - { + { + tok = p; +} #line 55 "hb-buffer-deserialize-text.rl" - if (unlikely (!buffer->ensure_glyphs ())) return false; } - -#line 572 "hb-buffer-deserialize-text.hh" - - - break; - } - case 14: { - { + { if (unlikely (!buffer->ensure_glyphs ())) return false; } + break; + case 14: #line 38 "hb-buffer-deserialize-text.rl" - - memset (&info, 0, sizeof (info)); - memset (&pos , 0, sizeof (pos )); - } - -#line 585 "hb-buffer-deserialize-text.hh" - - { + { + memset (&info, 0, sizeof (info)); + memset (&pos , 0, sizeof (pos )); +} #line 51 "hb-buffer-deserialize-text.rl" - - tok = p; - } - -#line 593 "hb-buffer-deserialize-text.hh" - - { + { + tok = p; +} #line 58 "hb-buffer-deserialize-text.rl" - - /* TODO Unescape delimeters. */ - if (!hb_font_glyph_from_string (font, - tok, p - tok, - &info.codepoint)) - return false; - } - -#line 605 "hb-buffer-deserialize-text.hh" - - - break; - } - case 17: { - { + { + /* TODO Unescape delimeters. */ + if (!hb_font_glyph_from_string (font, + tok, p - tok, + &info.codepoint)) + return false; +} + break; + case 17: #line 58 "hb-buffer-deserialize-text.rl" - - /* TODO Unescape delimeters. */ - if (!hb_font_glyph_from_string (font, - tok, p - tok, - &info.codepoint)) - return false; - } - -#line 621 "hb-buffer-deserialize-text.hh" - - { + { + /* TODO Unescape delimeters. */ + if (!hb_font_glyph_from_string (font, + tok, p - tok, + &info.codepoint)) + return false; +} #line 55 "hb-buffer-deserialize-text.rl" - if (unlikely (!buffer->ensure_glyphs ())) return false; } - -#line 627 "hb-buffer-deserialize-text.hh" - - { + { if (unlikely (!buffer->ensure_glyphs ())) return false; } #line 43 "hb-buffer-deserialize-text.rl" - - buffer->add_info (info); - if (unlikely (!buffer->successful)) - return false; - buffer->pos[buffer->len - 1] = pos; - *end_ptr = p; - } - -#line 639 "hb-buffer-deserialize-text.hh" - - - break; - } - case 11: { - { + { + buffer->add_info (info); + if (unlikely (!buffer->successful)) + return false; + buffer->pos[buffer->len - 1] = pos; + *end_ptr = p; +} + break; + case 11: #line 38 "hb-buffer-deserialize-text.rl" - - memset (&info, 0, sizeof (info)); - memset (&pos , 0, sizeof (pos )); - } - -#line 652 "hb-buffer-deserialize-text.hh" - - { + { + memset (&info, 0, sizeof (info)); + memset (&pos , 0, sizeof (pos )); +} #line 51 "hb-buffer-deserialize-text.rl" - - tok = p; - } - -#line 660 "hb-buffer-deserialize-text.hh" - - { + { + tok = p; +} #line 58 "hb-buffer-deserialize-text.rl" - - /* TODO Unescape delimeters. */ - if (!hb_font_glyph_from_string (font, - tok, p - tok, - &info.codepoint)) - return false; - } - -#line 672 "hb-buffer-deserialize-text.hh" - - { + { + /* TODO Unescape delimeters. */ + if (!hb_font_glyph_from_string (font, + tok, p - tok, + &info.codepoint)) + return false; +} #line 43 "hb-buffer-deserialize-text.rl" - - buffer->add_info (info); - if (unlikely (!buffer->successful)) - return false; - buffer->pos[buffer->len - 1] = pos; - *end_ptr = p; - } - -#line 684 "hb-buffer-deserialize-text.hh" - - - break; - } - case 13: { - { + { + buffer->add_info (info); + if (unlikely (!buffer->successful)) + return false; + buffer->pos[buffer->len - 1] = pos; + *end_ptr = p; +} + break; + case 13: #line 38 "hb-buffer-deserialize-text.rl" - - memset (&info, 0, sizeof (info)); - memset (&pos , 0, sizeof (pos )); - } - -#line 697 "hb-buffer-deserialize-text.hh" - - { + { + memset (&info, 0, sizeof (info)); + memset (&pos , 0, sizeof (pos )); +} #line 51 "hb-buffer-deserialize-text.rl" - - tok = p; - } - -#line 705 "hb-buffer-deserialize-text.hh" - - { + { + tok = p; +} #line 58 "hb-buffer-deserialize-text.rl" - - /* TODO Unescape delimeters. */ - if (!hb_font_glyph_from_string (font, - tok, p - tok, - &info.codepoint)) - return false; - } - -#line 717 "hb-buffer-deserialize-text.hh" - - { + { + /* TODO Unescape delimeters. */ + if (!hb_font_glyph_from_string (font, + tok, p - tok, + &info.codepoint)) + return false; +} #line 55 "hb-buffer-deserialize-text.rl" - if (unlikely (!buffer->ensure_glyphs ())) return false; } - -#line 723 "hb-buffer-deserialize-text.hh" - - { + { if (unlikely (!buffer->ensure_glyphs ())) return false; } #line 43 "hb-buffer-deserialize-text.rl" - - buffer->add_info (info); - if (unlikely (!buffer->successful)) - return false; - buffer->pos[buffer->len - 1] = pos; - *end_ptr = p; - } - -#line 735 "hb-buffer-deserialize-text.hh" - - - break; - } - } - - } - - if ( p == eof ) { - if ( cs >= 19 ) - goto _out; - } - else { - if ( cs != 0 ) { - p += 1; - goto _resume; - } - } - _out: {} + { + buffer->add_info (info); + if (unlikely (!buffer->successful)) + return false; + buffer->pos[buffer->len - 1] = pos; + *end_ptr = p; +} + break; +#line 722 "hb-buffer-deserialize-text.hh" } - -#line 138 "hb-buffer-deserialize-text.rl" - - + +_again: + if ( cs == 0 ) + goto _out; + if ( ++p != pe ) + goto _resume; + _test_eof: {} + if ( p == eof ) + { + switch ( _deserialize_text_eof_actions[cs] ) { + case 16: +#line 58 "hb-buffer-deserialize-text.rl" + { + /* TODO Unescape delimeters. */ + if (!hb_font_glyph_from_string (font, + tok, p - tok, + &info.codepoint)) + return false; +} +#line 43 "hb-buffer-deserialize-text.rl" + { + buffer->add_info (info); + if (unlikely (!buffer->successful)) + return false; + buffer->pos[buffer->len - 1] = pos; + *end_ptr = p; +} + break; + case 7: +#line 66 "hb-buffer-deserialize-text.rl" + {if (!parse_hex (tok, p, &info.codepoint )) return false; } +#line 43 "hb-buffer-deserialize-text.rl" + { + buffer->add_info (info); + if (unlikely (!buffer->successful)) + return false; + buffer->pos[buffer->len - 1] = pos; + *end_ptr = p; +} + break; + case 10: +#line 68 "hb-buffer-deserialize-text.rl" + { if (!parse_uint (tok, p, &info.cluster )) return false; } +#line 43 "hb-buffer-deserialize-text.rl" + { + buffer->add_info (info); + if (unlikely (!buffer->successful)) + return false; + buffer->pos[buffer->len - 1] = pos; + *end_ptr = p; +} + break; + case 22: +#line 70 "hb-buffer-deserialize-text.rl" + { if (!parse_int (tok, p, &pos.y_offset )) return false; } +#line 43 "hb-buffer-deserialize-text.rl" + { + buffer->add_info (info); + if (unlikely (!buffer->successful)) + return false; + buffer->pos[buffer->len - 1] = pos; + *end_ptr = p; +} + break; + case 19: +#line 71 "hb-buffer-deserialize-text.rl" + { if (!parse_int (tok, p, &pos.x_advance)) return false; } +#line 43 "hb-buffer-deserialize-text.rl" + { + buffer->add_info (info); + if (unlikely (!buffer->successful)) + return false; + buffer->pos[buffer->len - 1] = pos; + *end_ptr = p; +} + break; + case 24: +#line 72 "hb-buffer-deserialize-text.rl" + { if (!parse_int (tok, p, &pos.y_advance)) return false; } +#line 43 "hb-buffer-deserialize-text.rl" + { + buffer->add_info (info); + if (unlikely (!buffer->successful)) + return false; + buffer->pos[buffer->len - 1] = pos; + *end_ptr = p; +} + break; + case 11: +#line 38 "hb-buffer-deserialize-text.rl" + { + memset (&info, 0, sizeof (info)); + memset (&pos , 0, sizeof (pos )); +} +#line 51 "hb-buffer-deserialize-text.rl" + { + tok = p; +} +#line 58 "hb-buffer-deserialize-text.rl" + { + /* TODO Unescape delimeters. */ + if (!hb_font_glyph_from_string (font, + tok, p - tok, + &info.codepoint)) + return false; +} +#line 43 "hb-buffer-deserialize-text.rl" + { + buffer->add_info (info); + if (unlikely (!buffer->successful)) + return false; + buffer->pos[buffer->len - 1] = pos; *end_ptr = p; - - return p == pe && *(p-1) != ']'; +} + break; +#line 839 "hb-buffer-deserialize-text.hh" + } + } + + _out: {} + } + +#line 138 "hb-buffer-deserialize-text.rl" + + + *end_ptr = p; + + return p == pe && *(p-1) != ']'; } #endif /* HB_BUFFER_DESERIALIZE_TEXT_HH */ diff --git a/thirdparty/harfbuzz/src/hb-buffer.cc b/thirdparty/harfbuzz/src/hb-buffer.cc index 8cad6ab8e6..c6591ca230 100644 --- a/thirdparty/harfbuzz/src/hb-buffer.cc +++ b/thirdparty/harfbuzz/src/hb-buffer.cc @@ -96,14 +96,15 @@ hb_segment_properties_hash (const hb_segment_properties_t *p) * As an optimization, both info and out_info may point to the * same piece of memory, which is owned by info. This remains the * case as long as out_len doesn't exceed i at any time. - * In that case, swap_buffers() is no-op and the glyph operations operate - * mostly in-place. + * In that case, swap_buffers() is mostly no-op and the glyph operations + * operate mostly in-place. * * As soon as out_info gets longer than info, out_info is moved over - * to an alternate buffer (which we reuse the pos buffer for!), and its + * to an alternate buffer (which we reuse the pos buffer for), and its * current contents (out_len entries) are copied to the new place. + * * This should all remain transparent to the user. swap_buffers() then - * switches info and out_info. + * switches info over to out_info and does housekeeping. */ @@ -136,8 +137,8 @@ hb_buffer_t::enlarge (unsigned int size) if (unlikely (hb_unsigned_mul_overflows (new_allocated, sizeof (info[0])))) goto done; - new_pos = (hb_glyph_position_t *) realloc (pos, new_allocated * sizeof (pos[0])); - new_info = (hb_glyph_info_t *) realloc (info, new_allocated * sizeof (info[0])); + new_pos = (hb_glyph_position_t *) hb_realloc (pos, new_allocated * sizeof (pos[0])); + new_info = (hb_glyph_info_t *) hb_realloc (info, new_allocated * sizeof (info[0])); done: if (unlikely (!new_pos || !new_info)) @@ -282,21 +283,12 @@ hb_buffer_t::add_info (const hb_glyph_info_t &glyph_info) void -hb_buffer_t::remove_output () -{ - have_output = false; - have_positions = false; - - out_len = 0; - out_info = info; -} - -void hb_buffer_t::clear_output () { have_output = true; have_positions = false; + idx = 0; out_len = 0; out_info = info; } @@ -316,29 +308,23 @@ hb_buffer_t::clear_positions () void hb_buffer_t::swap_buffers () { - if (unlikely (!successful)) return; + assert (have_output); assert (idx <= len); - if (unlikely (!next_glyphs (len - idx))) return; - assert (have_output); - have_output = false; + if (unlikely (!successful || !next_glyphs (len - idx))) + goto reset; if (out_info != info) { - hb_glyph_info_t *tmp; - tmp = info; + pos = (hb_glyph_position_t *) info; info = out_info; - out_info = tmp; - - pos = (hb_glyph_position_t *) out_info; } - - unsigned int tmp; - tmp = len; len = out_len; - out_len = tmp; +reset: + have_output = false; + out_len = 0; idx = 0; } @@ -373,12 +359,11 @@ hb_buffer_t::move_to (unsigned int i) /* This will blow in our face if memory allocation fails later * in this same lookup... * - * We used to shift with extra 32 items, instead of the 0 below. + * We used to shift with extra 32 items. * But that would leave empty slots in the buffer in case of allocation - * failures. Setting to zero for now to avoid other problems (see - * comments in shift_forward(). This can cause O(N^2) behavior more - * severely than adding 32 empty slots can... */ - if (unlikely (idx < count && !shift_forward (count + 0))) return false; + * failures. See comments in shift_forward(). This can cause O(N^2) + * behavior more severely than adding 32 empty slots can... */ + if (unlikely (idx < count && !shift_forward (count - idx))) return false; assert (idx >= count); @@ -630,7 +615,7 @@ DEFINE_NULL_INSTANCE (hb_buffer_t) = HB_BUFFER_CONTENT_TYPE_INVALID, HB_SEGMENT_PROPERTIES_DEFAULT, false, /* successful */ - true, /* have_output */ + false, /* have_output */ true /* have_positions */ /* Zero is good enough for everything else. */ @@ -717,14 +702,14 @@ hb_buffer_destroy (hb_buffer_t *buffer) hb_unicode_funcs_destroy (buffer->unicode); - free (buffer->info); - free (buffer->pos); + hb_free (buffer->info); + hb_free (buffer->pos); #ifndef HB_NO_BUFFER_MESSAGE if (buffer->message_destroy) buffer->message_destroy (buffer->message_data); #endif - free (buffer); + hb_free (buffer); } /** @@ -1363,6 +1348,11 @@ hb_buffer_get_glyph_infos (hb_buffer_t *buffer, * Returns @buffer glyph position array. Returned pointer * is valid as long as @buffer contents are not modified. * + * If buffer did not have positions before, the positions will be + * initialized to zeros, unless this function is called from + * within a buffer message callback (see hb_buffer_set_message_func()), + * in which case %NULL is returned. + * * Return value: (transfer none) (array length=length): * The @buffer glyph position array. * The value valid as long as buffer has not been modified. @@ -1373,12 +1363,17 @@ hb_glyph_position_t * hb_buffer_get_glyph_positions (hb_buffer_t *buffer, unsigned int *length) { - if (!buffer->have_positions) - buffer->clear_positions (); - if (length) *length = buffer->len; + if (!buffer->have_positions) + { + if (unlikely (buffer->message_depth)) + return nullptr; + + buffer->clear_positions (); + } + return (hb_glyph_position_t *) buffer->pos; } @@ -1760,6 +1755,28 @@ hb_buffer_append (hb_buffer_t *buffer, memcpy (buffer->info + orig_len, source->info + start, (end - start) * sizeof (buffer->info[0])); if (buffer->have_positions) memcpy (buffer->pos + orig_len, source->pos + start, (end - start) * sizeof (buffer->pos[0])); + + if (source->content_type == HB_BUFFER_CONTENT_TYPE_UNICODE) + { + /* See similar logic in add_utf. */ + + /* pre-context */ + if (!orig_len && start + source->context_len[0] > 0) + { + buffer->clear_context (0); + while (start > 0 && buffer->context_len[0] < buffer->CONTEXT_LENGTH) + buffer->context[0][buffer->context_len[0]++] = source->info[--start].codepoint; + for (auto i = 0u; i < source->context_len[0] && buffer->context_len[0] < buffer->CONTEXT_LENGTH; i++) + buffer->context[0][buffer->context_len[0]++] = source->context[0][i]; + } + + /* post-context */ + buffer->clear_context (1); + while (end < source->len && buffer->context_len[1] < buffer->CONTEXT_LENGTH) + buffer->context[1][buffer->context_len[1]++] = source->info[end++].codepoint; + for (auto i = 0u; i < source->context_len[1] && buffer->context_len[1] < buffer->CONTEXT_LENGTH; i++) + buffer->context[1][buffer->context_len[1]++] = source->context[1][i]; + } } diff --git a/thirdparty/harfbuzz/src/hb-buffer.hh b/thirdparty/harfbuzz/src/hb-buffer.hh index 8b432b5f96..8635ebd35f 100644 --- a/thirdparty/harfbuzz/src/hb-buffer.hh +++ b/thirdparty/harfbuzz/src/hb-buffer.hh @@ -107,7 +107,7 @@ struct hb_buffer_t unsigned int idx; /* Cursor into ->info and ->pos arrays */ unsigned int len; /* Length of ->info and ->pos arrays */ - unsigned int out_len; /* Length of ->out array if have_output */ + unsigned int out_len; /* Length of ->out_info array if have_output */ unsigned int allocated; /* Length of allocated arrays */ hb_glyph_info_t *info; @@ -128,6 +128,9 @@ struct hb_buffer_t hb_buffer_message_func_t message_func; void *message_data; hb_destroy_func_t message_destroy; + unsigned message_depth; /* How deeply are we inside a message callback? */ +#else + static constexpr unsigned message_depth = 0u; #endif /* Internal debugging. */ @@ -186,13 +189,10 @@ struct hb_buffer_t hb_glyph_info_t &prev () { return out_info[out_len ? out_len - 1 : 0]; } hb_glyph_info_t prev () const { return out_info[out_len ? out_len - 1 : 0]; } - HB_NODISCARD bool has_separate_output () const { return info != out_info; } - - HB_INTERNAL void reset (); HB_INTERNAL void clear (); - unsigned int backtrack_len () const { return have_output? out_len : idx; } + unsigned int backtrack_len () const { return have_output ? out_len : idx; } unsigned int lookahead_len () const { return len - idx; } unsigned int next_serial () { return serial++; } @@ -206,7 +206,6 @@ struct hb_buffer_t HB_INTERNAL void guess_segment_properties (); HB_INTERNAL void swap_buffers (); - HB_INTERNAL void remove_output (); HB_INTERNAL void clear_output (); HB_INTERNAL void clear_positions (); @@ -400,10 +399,16 @@ struct hb_buffer_t #else if (!messaging ()) return true; + + message_depth++; + va_list ap; va_start (ap, fmt); bool ret = message_impl (font, fmt, ap); va_end (ap); + + message_depth--; + return ret; #endif } diff --git a/thirdparty/harfbuzz/src/hb-cache.hh b/thirdparty/harfbuzz/src/hb-cache.hh index bf26d96be4..e617b75de9 100644 --- a/thirdparty/harfbuzz/src/hb-cache.hh +++ b/thirdparty/harfbuzz/src/hb-cache.hh @@ -30,7 +30,7 @@ #include "hb.hh" -/* Implements a lock-free cache for int->int functions. */ +/* Implements a lockfree cache for int->int functions. */ template <unsigned int key_bits, unsigned int value_bits, unsigned int cache_bits> struct hb_cache_t diff --git a/thirdparty/harfbuzz/src/hb-cff-interp-common.hh b/thirdparty/harfbuzz/src/hb-cff-interp-common.hh index 91a9b7d0d1..c251e2d0ed 100644 --- a/thirdparty/harfbuzz/src/hb-cff-interp-common.hh +++ b/thirdparty/harfbuzz/src/hb-cff-interp-common.hh @@ -263,7 +263,7 @@ struct UnsizedByteStr : UnsizedArrayOf <HBUINT8> T *ip = c->allocate_size<T> (T::static_size); if (unlikely (!ip)) return_trace (false); - return_trace (c->check_assign (*ip, value)); + return_trace (c->check_assign (*ip, value, HB_SERIALIZE_ERROR_INT_OVERFLOW)); } template <typename V> diff --git a/thirdparty/harfbuzz/src/hb-cff2-interp-cs.hh b/thirdparty/harfbuzz/src/hb-cff2-interp-cs.hh index 332ece31cd..d961566447 100644 --- a/thirdparty/harfbuzz/src/hb-cff2-interp-cs.hh +++ b/thirdparty/harfbuzz/src/hb-cff2-interp-cs.hh @@ -136,8 +136,8 @@ struct cff2_cs_interp_env_t : cs_interp_env_t<blend_arg_t, CFF2Subrs> if (unlikely (!scalars.resize (region_count))) set_error (); else - varStore->varStore.get_scalars (get_ivs (), coords, num_coords, - &scalars[0], region_count); + varStore->varStore.get_region_scalars (get_ivs (), coords, num_coords, + &scalars[0], region_count); } seen_blend = true; } diff --git a/thirdparty/harfbuzz/src/hb-common.cc b/thirdparty/harfbuzz/src/hb-common.cc index 7bb878b217..26c8ad0f49 100644 --- a/thirdparty/harfbuzz/src/hb-common.cc +++ b/thirdparty/harfbuzz/src/hb-common.cc @@ -257,13 +257,11 @@ struct hb_language_item_t { bool operator == (const char *s) const { return lang_equal (lang, s); } - hb_language_item_t & operator = (const char *s) { - /* If a custom allocated is used calling strdup() pairs - badly with a call to the custom free() in fini() below. - Therefore don't call strdup(), implement its behavior. - */ + hb_language_item_t & operator = (const char *s) + { + /* We can't call strdup(), because we allow custom allocators. */ size_t len = strlen(s) + 1; - lang = (hb_language_t) malloc(len); + lang = (hb_language_t) hb_malloc(len); if (likely (lang)) { memcpy((unsigned char *) lang, s, len); @@ -274,16 +272,15 @@ struct hb_language_item_t { return *this; } - void fini () { free ((void *) lang); } + void fini () { hb_free ((void *) lang); } }; -/* Thread-safe lock-free language list */ +/* Thread-safe lockfree language list */ static hb_atomic_ptr_t <hb_language_item_t> langs; -#if HB_USE_ATEXIT -static void +static inline void free_langs () { retry: @@ -294,11 +291,10 @@ retry: while (first_lang) { hb_language_item_t *next = first_lang->next; first_lang->fini (); - free (first_lang); + hb_free (first_lang); first_lang = next; } } -#endif static hb_language_item_t * lang_find_or_insert (const char *key) @@ -311,28 +307,26 @@ retry: return lang; /* Not found; allocate one. */ - hb_language_item_t *lang = (hb_language_item_t *) calloc (1, sizeof (hb_language_item_t)); + hb_language_item_t *lang = (hb_language_item_t *) hb_calloc (1, sizeof (hb_language_item_t)); if (unlikely (!lang)) return nullptr; lang->next = first_lang; *lang = key; if (unlikely (!lang->lang)) { - free (lang); + hb_free (lang); return nullptr; } if (unlikely (!langs.cmpexch (first_lang, lang))) { lang->fini (); - free (lang); + hb_free (lang); goto retry; } -#if HB_USE_ATEXIT if (!first_lang) - atexit (free_langs); /* First person registers atexit() callback. */ -#endif + hb_atexit (free_langs); /* First person registers atexit() callback. */ return lang; } @@ -601,6 +595,9 @@ hb_script_get_horizontal_direction (hb_script_t script) case HB_SCRIPT_CHORASMIAN: case HB_SCRIPT_YEZIDI: + /* Unicode-14.0 additions */ + case HB_SCRIPT_OLD_UYGHUR: + return HB_DIRECTION_RTL; diff --git a/thirdparty/harfbuzz/src/hb-common.h b/thirdparty/harfbuzz/src/hb-common.h index 532fd428cb..0384117a4d 100644 --- a/thirdparty/harfbuzz/src/hb-common.h +++ b/thirdparty/harfbuzz/src/hb-common.h @@ -476,6 +476,11 @@ hb_language_get_default (void); * @HB_SCRIPT_DIVES_AKURU: `Diak`, Since: 2.6.7 * @HB_SCRIPT_KHITAN_SMALL_SCRIPT: `Kits`, Since: 2.6.7 * @HB_SCRIPT_YEZIDI: `Yezi`, Since: 2.6.7 + * @HB_SCRIPT_CYPRO_MINOAN: `Cpmn`, Since: 3.0.0 + * @HB_SCRIPT_OLD_UYGHUR: `Ougr`, Since: 3.0.0 + * @HB_SCRIPT_TANGSA: `Tnsa`, Since: 3.0.0 + * @HB_SCRIPT_TOTO: `Toto`, Since: 3.0.0 + * @HB_SCRIPT_VITHKUQI: `Vith`, Since: 3.0.0 * @HB_SCRIPT_INVALID: No script set * * Data type for scripts. Each #hb_script_t's value is an #hb_tag_t corresponding @@ -683,6 +688,15 @@ typedef enum HB_SCRIPT_KHITAN_SMALL_SCRIPT = HB_TAG ('K','i','t','s'), /*13.0*/ HB_SCRIPT_YEZIDI = HB_TAG ('Y','e','z','i'), /*13.0*/ + /* + * Since 3.0.0 + */ + HB_SCRIPT_CYPRO_MINOAN = HB_TAG ('C','p','m','n'), /*14.0*/ + HB_SCRIPT_OLD_UYGHUR = HB_TAG ('O','u','g','r'), /*14.0*/ + HB_SCRIPT_TANGSA = HB_TAG ('T','n','s','a'), /*14.0*/ + HB_SCRIPT_TOTO = HB_TAG ('T','o','t','o'), /*14.0*/ + HB_SCRIPT_VITHKUQI = HB_TAG ('V','i','t','h'), /*14.0*/ + /* No script set. */ HB_SCRIPT_INVALID = HB_TAG_NONE, diff --git a/thirdparty/harfbuzz/src/hb-config.hh b/thirdparty/harfbuzz/src/hb-config.hh index fc8d424bfb..ad800f0f74 100644 --- a/thirdparty/harfbuzz/src/hb-config.hh +++ b/thirdparty/harfbuzz/src/hb-config.hh @@ -86,6 +86,9 @@ #define HB_NO_LEGACY #endif +#ifdef HAVE_CONFIG_OVERRIDE_H +#include "config-override.h" +#endif /* Closure of options. */ @@ -117,7 +120,7 @@ #define HB_NO_CMAP_LEGACY_SUBTABLES #define HB_NO_FALLBACK_SHAPE #define HB_NO_OT_KERN -#define HB_NO_OT_LAYOUT_BLACKLIST +#define HB_NO_OT_LAYOUT_BLOCKLIST #define HB_NO_OT_SHAPE_FALLBACK #endif @@ -155,9 +158,5 @@ #endif #endif -#ifdef HAVE_CONFIG_OVERRIDE_H -#include "config-override.h" -#endif - #endif /* HB_CONFIG_HH */ diff --git a/thirdparty/harfbuzz/src/hb-coretext.cc b/thirdparty/harfbuzz/src/hb-coretext.cc index 461bd20e65..4b6c67c1ee 100644 --- a/thirdparty/harfbuzz/src/hb-coretext.cc +++ b/thirdparty/harfbuzz/src/hb-coretext.cc @@ -332,6 +332,44 @@ _hb_coretext_shaper_font_data_create (hb_font_t *font) return nullptr; } + if (font->coords) + { + CFMutableDictionaryRef variations = + CFDictionaryCreateMutable (kCFAllocatorDefault, + font->num_coords, + &kCFTypeDictionaryKeyCallBacks, + &kCFTypeDictionaryValueCallBacks); + + for (unsigned i = 0; i < font->num_coords; i++) + { + if (font->coords[i] == 0.) continue; + + hb_ot_var_axis_info_t info; + unsigned int c = 1; + hb_ot_var_get_axis_infos (font->face, i, &c, &info); + CFDictionarySetValue (variations, + CFNumberCreate (kCFAllocatorDefault, kCFNumberIntType, &info.tag), + CFNumberCreate (kCFAllocatorDefault, kCFNumberFloatType, &font->design_coords[i]) + ); + } + + CFDictionaryRef attributes = + CFDictionaryCreate (kCFAllocatorDefault, + (const void **) &kCTFontVariationAttribute, + (const void **) &variations, + 1, + &kCFTypeDictionaryKeyCallBacks, + &kCFTypeDictionaryValueCallBacks); + + CTFontDescriptorRef varDesc = CTFontDescriptorCreateWithAttributes (attributes); + CTFontRef new_ct_font = CTFontCreateCopyWithAttributes (ct_font, 0, nullptr, varDesc); + + CFRelease (ct_font); + CFRelease (attributes); + CFRelease (variations); + ct_font = new_ct_font; + } + return (hb_coretext_font_data_t *) ct_font; } @@ -1061,7 +1099,7 @@ resize_and_retry: hb_glyph_info_t *info = run_info; if (HB_DIRECTION_IS_HORIZONTAL (buffer->props.direction)) { - hb_position_t x_offset = (positions[0].x - advances_so_far) * x_mult; + hb_position_t x_offset = round ((positions[0].x - advances_so_far) * x_mult); for (unsigned int j = 0; j < num_glyphs; j++) { CGFloat advance; @@ -1069,15 +1107,15 @@ resize_and_retry: advance = positions[j + 1].x - positions[j].x; else /* last glyph */ advance = run_advance - (positions[j].x - positions[0].x); - info->mask = advance * x_mult; + info->mask = round (advance * x_mult); info->var1.i32 = x_offset; - info->var2.i32 = positions[j].y * y_mult; + info->var2.i32 = round (positions[j].y * y_mult); info++; } } else { - hb_position_t y_offset = (positions[0].y - advances_so_far) * y_mult; + hb_position_t y_offset = round ((positions[0].y - advances_so_far) * y_mult); for (unsigned int j = 0; j < num_glyphs; j++) { CGFloat advance; @@ -1085,8 +1123,8 @@ resize_and_retry: advance = positions[j + 1].y - positions[j].y; else /* last glyph */ advance = run_advance - (positions[j].y - positions[0].y); - info->mask = advance * y_mult; - info->var1.i32 = positions[j].x * x_mult; + info->mask = round (advance * y_mult); + info->var1.i32 = round (positions[j].x * x_mult); info->var2.i32 = y_offset; info++; } diff --git a/thirdparty/harfbuzz/src/hb-debug.hh b/thirdparty/harfbuzz/src/hb-debug.hh index ec3a1ff211..f80c8980ba 100644 --- a/thirdparty/harfbuzz/src/hb-debug.hh +++ b/thirdparty/harfbuzz/src/hb-debug.hh @@ -307,7 +307,7 @@ struct hb_auto_trace_t _hb_debug_msg<max_level> (what, obj, func, true, plevel ? *plevel : 1, -1, "return %s (line %d)", - hb_printer_t<decltype (v)>().print (v), line); + hb_printer_t<hb_decay<decltype (v)>>().print (v), line); if (plevel) --*plevel; plevel = nullptr; returned = true; @@ -438,6 +438,10 @@ struct hb_no_trace_t { #define TRACE_SUBSET(this) hb_no_trace_t<bool> trace #endif +#ifndef HB_DEBUG_SUBSET_REPACK +#define HB_DEBUG_SUBSET_REPACK (HB_DEBUG+0) +#endif + #ifndef HB_DEBUG_DISPATCH #define HB_DEBUG_DISPATCH ( \ HB_DEBUG_APPLY + \ diff --git a/thirdparty/harfbuzz/src/hb-deprecated.h b/thirdparty/harfbuzz/src/hb-deprecated.h index 5f19125789..a130d77f77 100644 --- a/thirdparty/harfbuzz/src/hb-deprecated.h +++ b/thirdparty/harfbuzz/src/hb-deprecated.h @@ -107,9 +107,6 @@ hb_font_funcs_set_glyph_func (hb_font_funcs_t *ffuncs, hb_font_get_glyph_func_t func, void *user_data, hb_destroy_func_t destroy); -HB_EXTERN HB_DEPRECATED void -hb_set_invert (hb_set_t *set); - /** * hb_unicode_eastasian_width_func_t: * @ufuncs: A Unicode-functions structure diff --git a/thirdparty/harfbuzz/src/hb-directwrite.cc b/thirdparty/harfbuzz/src/hb-directwrite.cc index a07302159c..8f6d73b639 100644 --- a/thirdparty/harfbuzz/src/hb-directwrite.cc +++ b/thirdparty/harfbuzz/src/hb-directwrite.cc @@ -32,6 +32,7 @@ #include "hb-directwrite.h" +#include "hb-ms-feature-ranges.hh" /** * SECTION:hb-directwrite @@ -42,24 +43,6 @@ * Functions for using HarfBuzz with DirectWrite fonts. **/ -/* Declare object creator for dynamic support of DWRITE */ -typedef HRESULT (* WINAPI t_DWriteCreateFactory)( - DWRITE_FACTORY_TYPE factoryType, - REFIID iid, - IUnknown **factory -); - -/* - * hb-directwrite uses new/delete syntatically but as we let users - * to override malloc/free, we will redefine new/delete so users - * won't need to do that by their own. - */ -void* operator new (size_t size) { return malloc (size); } -void* operator new [] (size_t size) { return malloc (size); } -void operator delete (void* pointer) { free (pointer); } -void operator delete [] (void* pointer) { free (pointer); } - - /* * DirectWrite font stream helpers */ @@ -154,7 +137,6 @@ public: struct hb_directwrite_face_data_t { - HMODULE dwrite_dll; IDWriteFactory *dwriteFactory; IDWriteFontFile *fontFile; DWriteFontFileStream *fontFileStream; @@ -176,33 +158,12 @@ _hb_directwrite_shaper_face_data_create (hb_face_t *face) return nullptr; \ } HB_STMT_END - data->dwrite_dll = LoadLibrary (TEXT ("DWRITE")); - if (unlikely (!data->dwrite_dll)) - FAIL ("Cannot find DWrite.DLL"); - - t_DWriteCreateFactory p_DWriteCreateFactory; - -#if defined(__GNUC__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wcast-function-type" -#endif - - p_DWriteCreateFactory = (t_DWriteCreateFactory) - GetProcAddress (data->dwrite_dll, "DWriteCreateFactory"); - -#if defined(__GNUC__) -#pragma GCC diagnostic pop -#endif - - if (unlikely (!p_DWriteCreateFactory)) - FAIL ("Cannot find DWriteCreateFactory()."); - HRESULT hr; // TODO: factory and fontFileLoader should be cached separately IDWriteFactory* dwriteFactory; - hr = p_DWriteCreateFactory (DWRITE_FACTORY_TYPE_SHARED, __uuidof (IDWriteFactory), - (IUnknown**) &dwriteFactory); + hr = DWriteCreateFactory (DWRITE_FACTORY_TYPE_SHARED, __uuidof (IDWriteFactory), + (IUnknown**) &dwriteFactory); if (unlikely (hr != S_OK)) FAIL ("Failed to run DWriteCreateFactory()."); @@ -266,8 +227,6 @@ _hb_directwrite_shaper_face_data_destroy (hb_directwrite_face_data_t *data) delete data->fontFileStream; if (data->faceBlob) hb_blob_destroy (data->faceBlob); - if (data->dwrite_dll) - FreeLibrary (data->dwrite_dll); if (data) delete data; } @@ -552,13 +511,12 @@ protected: * shaper */ -static hb_bool_t -_hb_directwrite_shape_full (hb_shape_plan_t *shape_plan, - hb_font_t *font, - hb_buffer_t *buffer, - const hb_feature_t *features, - unsigned int num_features, - float lineWidth) +hb_bool_t +_hb_directwrite_shape (hb_shape_plan_t *shape_plan, + hb_font_t *font, + hb_buffer_t *buffer, + const hb_feature_t *features, + unsigned int num_features) { hb_face_t *face = font->face; const hb_directwrite_face_data_t *face_data = face->data.directwrite; @@ -611,8 +569,6 @@ _hb_directwrite_shape_full (hb_shape_plan_t *shape_plan, log_clusters[chars_len++] = cluster; /* Surrogates. */ } - // TODO: Handle TEST_DISABLE_OPTIONAL_LIGATURES - DWRITE_READING_DIRECTION readingDirection; readingDirection = buffer->props.direction ? DWRITE_READING_DIRECTION_RIGHT_TO_LEFT : @@ -623,7 +579,7 @@ _hb_directwrite_shape_full (hb_shape_plan_t *shape_plan, * but we never attempt to shape a word longer than 64K characters * in a single gfxShapedWord, so we cannot exceed that limit. */ - uint32_t textLength = buffer->len; + uint32_t textLength = chars_len; TextAnalysis analysis (textString, textLength, nullptr, readingDirection); TextAnalysis::Run *runHead; @@ -648,38 +604,54 @@ _hb_directwrite_shape_full (hb_shape_plan_t *shape_plan, mbstowcs ((wchar_t*) localeName, hb_language_to_string (buffer->props.language), 20); - // TODO: it does work but doesn't care about ranges - DWRITE_TYPOGRAPHIC_FEATURES typographic_features; - typographic_features.featureCount = num_features; + /* + * Set up features. + */ + static_assert ((sizeof (DWRITE_TYPOGRAPHIC_FEATURES) == sizeof (hb_ms_features_t)), ""); + static_assert ((sizeof (DWRITE_FONT_FEATURE) == sizeof (hb_ms_feature_t)), ""); + hb_vector_t<hb_ms_features_t *> range_features; + hb_vector_t<uint32_t> range_char_counts; if (num_features) { - typographic_features.features = new DWRITE_FONT_FEATURE[num_features]; - for (unsigned int i = 0; i < num_features; ++i) - { - typographic_features.features[i].nameTag = (DWRITE_FONT_FEATURE_TAG) - hb_uint32_swap (features[i].tag); - typographic_features.features[i].parameter = features[i].value; - } + hb_vector_t<hb_ms_feature_t> feature_records; + hb_vector_t<hb_ms_range_record_t> range_records; + if (hb_ms_setup_features (features, num_features, feature_records, range_records)) + hb_ms_make_feature_ranges (feature_records, + range_records, + 0, + chars_len, + log_clusters, + range_features, + range_char_counts); } - const DWRITE_TYPOGRAPHIC_FEATURES* dwFeatures; - dwFeatures = (const DWRITE_TYPOGRAPHIC_FEATURES*) &typographic_features; - const uint32_t featureRangeLengths[] = { textLength }; - // uint16_t* clusterMap; clusterMap = new uint16_t[textLength]; DWRITE_SHAPING_TEXT_PROPERTIES* textProperties; textProperties = new DWRITE_SHAPING_TEXT_PROPERTIES[textLength]; + retry_getglyphs: uint16_t* glyphIndices = new uint16_t[maxGlyphCount]; DWRITE_SHAPING_GLYPH_PROPERTIES* glyphProperties; glyphProperties = new DWRITE_SHAPING_GLYPH_PROPERTIES[maxGlyphCount]; - hr = analyzer->GetGlyphs (textString, textLength, fontFace, false, - isRightToLeft, &runHead->mScript, localeName, - nullptr, &dwFeatures, featureRangeLengths, 1, - maxGlyphCount, clusterMap, textProperties, - glyphIndices, glyphProperties, &glyphCount); + hr = analyzer->GetGlyphs (textString, + chars_len, + fontFace, + false, + isRightToLeft, + &runHead->mScript, + localeName, + nullptr, + (const DWRITE_TYPOGRAPHIC_FEATURES**) range_features.arrayZ, + range_char_counts.arrayZ, + range_features.length, + maxGlyphCount, + clusterMap, + textProperties, + glyphIndices, + glyphProperties, + &glyphCount); if (unlikely (hr == HRESULT_FROM_WIN32 (ERROR_INSUFFICIENT_BUFFER))) { @@ -715,101 +687,28 @@ retry_getglyphs: double x_mult = (double) font->x_scale / fontEmSize; double y_mult = (double) font->y_scale / fontEmSize; - hr = analyzer->GetGlyphPlacements (textString, clusterMap, textProperties, - textLength, glyphIndices, glyphProperties, - glyphCount, fontFace, fontEmSize, - false, isRightToLeft, &runHead->mScript, localeName, - &dwFeatures, featureRangeLengths, 1, - glyphAdvances, glyphOffsets); + hr = analyzer->GetGlyphPlacements (textString, + clusterMap, + textProperties, + chars_len, + glyphIndices, + glyphProperties, + glyphCount, + fontFace, + fontEmSize, + false, + isRightToLeft, + &runHead->mScript, + localeName, + (const DWRITE_TYPOGRAPHIC_FEATURES**) range_features.arrayZ, + range_char_counts.arrayZ, + range_features.length, + glyphAdvances, + glyphOffsets); if (FAILED (hr)) FAIL ("Analyzer failed to get glyph placements."); - IDWriteTextAnalyzer1* analyzer1; - analyzer->QueryInterface (&analyzer1); - - if (analyzer1 && lineWidth) - { - DWRITE_JUSTIFICATION_OPPORTUNITY* justificationOpportunities = - new DWRITE_JUSTIFICATION_OPPORTUNITY[maxGlyphCount]; - hr = analyzer1->GetJustificationOpportunities (fontFace, fontEmSize, runHead->mScript, - textLength, glyphCount, textString, - clusterMap, glyphProperties, - justificationOpportunities); - - if (FAILED (hr)) - FAIL ("Analyzer failed to get justification opportunities."); - - float* justifiedGlyphAdvances = new float[maxGlyphCount]; - DWRITE_GLYPH_OFFSET* justifiedGlyphOffsets = new DWRITE_GLYPH_OFFSET[glyphCount]; - hr = analyzer1->JustifyGlyphAdvances (lineWidth, glyphCount, justificationOpportunities, - glyphAdvances, glyphOffsets, justifiedGlyphAdvances, - justifiedGlyphOffsets); - - if (FAILED (hr)) FAIL ("Analyzer failed to get justify glyph advances."); - - DWRITE_SCRIPT_PROPERTIES scriptProperties; - hr = analyzer1->GetScriptProperties (runHead->mScript, &scriptProperties); - if (FAILED (hr)) FAIL ("Analyzer failed to get script properties."); - uint32_t justificationCharacter = scriptProperties.justificationCharacter; - - // if a script justificationCharacter is not space, it can have GetJustifiedGlyphs - if (justificationCharacter != 32) - { - uint16_t* modifiedClusterMap = new uint16_t[textLength]; - retry_getjustifiedglyphs: - uint16_t* modifiedGlyphIndices = new uint16_t[maxGlyphCount]; - float* modifiedGlyphAdvances = new float[maxGlyphCount]; - DWRITE_GLYPH_OFFSET* modifiedGlyphOffsets = new DWRITE_GLYPH_OFFSET[maxGlyphCount]; - uint32_t actualGlyphsCount; - hr = analyzer1->GetJustifiedGlyphs (fontFace, fontEmSize, runHead->mScript, - textLength, glyphCount, maxGlyphCount, - clusterMap, glyphIndices, glyphAdvances, - justifiedGlyphAdvances, justifiedGlyphOffsets, - glyphProperties, &actualGlyphsCount, - modifiedClusterMap, modifiedGlyphIndices, - modifiedGlyphAdvances, modifiedGlyphOffsets); - - if (hr == HRESULT_FROM_WIN32 (ERROR_INSUFFICIENT_BUFFER)) - { - maxGlyphCount = actualGlyphsCount; - delete [] modifiedGlyphIndices; - delete [] modifiedGlyphAdvances; - delete [] modifiedGlyphOffsets; - - maxGlyphCount = actualGlyphsCount; - - goto retry_getjustifiedglyphs; - } - if (FAILED (hr)) - FAIL ("Analyzer failed to get justified glyphs."); - - delete [] clusterMap; - delete [] glyphIndices; - delete [] glyphAdvances; - delete [] glyphOffsets; - - glyphCount = actualGlyphsCount; - clusterMap = modifiedClusterMap; - glyphIndices = modifiedGlyphIndices; - glyphAdvances = modifiedGlyphAdvances; - glyphOffsets = modifiedGlyphOffsets; - - delete [] justifiedGlyphAdvances; - delete [] justifiedGlyphOffsets; - } - else - { - delete [] glyphAdvances; - delete [] glyphOffsets; - - glyphAdvances = justifiedGlyphAdvances; - glyphOffsets = justifiedGlyphOffsets; - } - - delete [] justificationOpportunities; - } - /* Ok, we've got everything we need, now compose output buffer, * very, *very*, carefully! */ @@ -870,43 +769,10 @@ retry_getglyphs: delete [] glyphAdvances; delete [] glyphOffsets; - if (num_features) - delete [] typographic_features.features; - /* Wow, done! */ return true; } -hb_bool_t -_hb_directwrite_shape (hb_shape_plan_t *shape_plan, - hb_font_t *font, - hb_buffer_t *buffer, - const hb_feature_t *features, - unsigned int num_features) -{ - return _hb_directwrite_shape_full (shape_plan, font, buffer, - features, num_features, 0); -} - -HB_UNUSED static bool -_hb_directwrite_shape_experimental_width (hb_font_t *font, - hb_buffer_t *buffer, - const hb_feature_t *features, - unsigned int num_features, - float width) -{ - static const char *shapers = "directwrite"; - hb_shape_plan_t *shape_plan; - shape_plan = hb_shape_plan_create_cached (font->face, &buffer->props, - features, num_features, &shapers); - hb_bool_t res = _hb_directwrite_shape_full (shape_plan, font, buffer, - features, num_features, width); - - buffer->unsafe_to_break_all (); - - return res; -} - struct _hb_directwrite_font_table_context { IDWriteFontFace *face; void *table_context; @@ -917,7 +783,7 @@ _hb_directwrite_table_data_release (void *data) { _hb_directwrite_font_table_context *context = (_hb_directwrite_font_table_context *) data; context->face->ReleaseFontTable (context->table_context); - delete context; + hb_free (context); } static hb_blob_t * @@ -938,7 +804,7 @@ _hb_directwrite_reference_table (hb_face_t *face HB_UNUSED, hb_tag_t tag, void * return nullptr; } - _hb_directwrite_font_table_context *context = new _hb_directwrite_font_table_context; + _hb_directwrite_font_table_context *context = (_hb_directwrite_font_table_context *) hb_malloc (sizeof (_hb_directwrite_font_table_context)); context->face = dw_face; context->table_context = table_context; diff --git a/thirdparty/harfbuzz/src/hb-draw.cc b/thirdparty/harfbuzz/src/hb-draw.cc index 1a5f9c8c6b..c0af6ce013 100644 --- a/thirdparty/harfbuzz/src/hb-draw.cc +++ b/thirdparty/harfbuzz/src/hb-draw.cc @@ -191,7 +191,7 @@ hb_draw_funcs_destroy (hb_draw_funcs_t *funcs) { if (!hb_object_destroy (funcs)) return; - free (funcs); + hb_free (funcs); } /** diff --git a/thirdparty/harfbuzz/src/hb-face.cc b/thirdparty/harfbuzz/src/hb-face.cc index 61bd4af7b1..2c0087370c 100644 --- a/thirdparty/harfbuzz/src/hb-face.cc +++ b/thirdparty/harfbuzz/src/hb-face.cc @@ -33,6 +33,7 @@ #include "hb-open-file.hh" #include "hb-ot-face.hh" #include "hb-ot-cmap-table.hh" +#include "hb-map.hh" /** @@ -106,9 +107,9 @@ DEFINE_NULL_INSTANCE (hb_face_t) = * convenient to provide data for individual tables instead of the whole font * data. With the caveat that hb_face_get_table_tags() does not currently work * with faces created this way. - * + * * Creates a new face object from the specified @user_data and @reference_table_func, - * with the @destroy callback. + * with the @destroy callback. * * Return value: (transfer full): The new face object * @@ -150,7 +151,7 @@ _hb_face_for_data_closure_create (hb_blob_t *blob, unsigned int index) { hb_face_for_data_closure_t *closure; - closure = (hb_face_for_data_closure_t *) calloc (1, sizeof (hb_face_for_data_closure_t)); + closure = (hb_face_for_data_closure_t *) hb_calloc (1, sizeof (hb_face_for_data_closure_t)); if (unlikely (!closure)) return nullptr; @@ -166,7 +167,7 @@ _hb_face_for_data_closure_destroy (void *data) hb_face_for_data_closure_t *closure = (hb_face_for_data_closure_t *) data; hb_blob_destroy (closure->blob); - free (closure); + hb_free (closure); } static hb_blob_t * @@ -265,7 +266,7 @@ hb_face_reference (hb_face_t *face) /** * hb_face_destroy: (skip) * @face: A face object - * + * * Decreases the reference count on a face object. When the * reference count reaches zero, the face is destroyed, * freeing all memory. @@ -281,7 +282,7 @@ hb_face_destroy (hb_face_t *face) { hb_face_t::plan_node_t *next = node->next; hb_shape_plan_destroy (node->shape_plan); - free (node); + hb_free (node); node = next; } @@ -291,7 +292,7 @@ hb_face_destroy (hb_face_t *face) if (face->destroy) face->destroy (face->user_data); - free (face); + hb_free (face); } /** @@ -302,7 +303,7 @@ hb_face_destroy (hb_face_t *face) * @destroy: (nullable): A callback to call when @data is not needed anymore * @replace: Whether to replace an existing data with the same key * - * Attaches a user-data key/data pair to the given face object. + * Attaches a user-data key/data pair to the given face object. * * Return value: %true if success, %false otherwise * @@ -441,7 +442,7 @@ hb_face_set_index (hb_face_t *face, * * <note>Note: face indices within a collection are zero-based.</note> * - * Return value: The index of @face. + * Return value: The index of @face. * * Since: 0.9.2 **/ @@ -623,26 +624,26 @@ hb_face_collect_variation_unicodes (hb_face_t *face, struct hb_face_builder_data_t { - struct table_entry_t - { - int cmp (hb_tag_t t) const - { - if (t < tag) return -1; - if (t > tag) return -1; - return 0; - } - - hb_tag_t tag; - hb_blob_t *blob; - }; - - hb_vector_t<table_entry_t> tables; + hb_hashmap_t<hb_tag_t, hb_blob_t *> tables; }; +static int compare_entries (const void* pa, const void* pb) +{ + const auto& a = * (const hb_pair_t<hb_tag_t, hb_blob_t*> *) pa; + const auto& b = * (const hb_pair_t<hb_tag_t, hb_blob_t*> *) pb; + + /* Order by blob size first (smallest to largest) and then table tag */ + + if (a.second->length != b.second->length) + return a.second->length < b.second->length ? -1 : +1; + + return a.first < b.first ? -1 : a.first == b.first ? 0 : +1; +} + static hb_face_builder_data_t * _hb_face_builder_data_create () { - hb_face_builder_data_t *data = (hb_face_builder_data_t *) calloc (1, sizeof (hb_face_builder_data_t)); + hb_face_builder_data_t *data = (hb_face_builder_data_t *) hb_calloc (1, sizeof (hb_face_builder_data_t)); if (unlikely (!data)) return nullptr; @@ -656,25 +657,25 @@ _hb_face_builder_data_destroy (void *user_data) { hb_face_builder_data_t *data = (hb_face_builder_data_t *) user_data; - for (unsigned int i = 0; i < data->tables.length; i++) - hb_blob_destroy (data->tables[i].blob); + for (hb_blob_t* b : data->tables.values()) + hb_blob_destroy (b); data->tables.fini (); - free (data); + hb_free (data); } static hb_blob_t * _hb_face_builder_data_reference_blob (hb_face_builder_data_t *data) { - unsigned int table_count = data->tables.length; + unsigned int table_count = data->tables.get_population (); unsigned int face_length = table_count * 16 + 12; - for (unsigned int i = 0; i < table_count; i++) - face_length += hb_ceil_to_4 (hb_blob_get_length (data->tables[i].blob)); + for (hb_blob_t* b : data->tables.values()) + face_length += hb_ceil_to_4 (hb_blob_get_length (b)); - char *buf = (char *) malloc (face_length); + char *buf = (char *) hb_malloc (face_length); if (unlikely (!buf)) return nullptr; @@ -682,20 +683,31 @@ _hb_face_builder_data_reference_blob (hb_face_builder_data_t *data) c.propagate_error (data->tables); OT::OpenTypeFontFile *f = c.start_serialize<OT::OpenTypeFontFile> (); - bool is_cff = data->tables.lsearch (HB_TAG ('C','F','F',' ')) || data->tables.lsearch (HB_TAG ('C','F','F','2')); + bool is_cff = (data->tables.has (HB_TAG ('C','F','F',' ')) + || data->tables.has (HB_TAG ('C','F','F','2'))); hb_tag_t sfnt_tag = is_cff ? OT::OpenTypeFontFile::CFFTag : OT::OpenTypeFontFile::TrueTypeTag; - bool ret = f->serialize_single (&c, sfnt_tag, data->tables.as_array ()); + // Sort the tags so that produced face is deterministic. + hb_vector_t<hb_pair_t <hb_tag_t, hb_blob_t*>> sorted_entries; + data->tables.iter () | hb_sink (sorted_entries); + if (unlikely (sorted_entries.in_error ())) + { + hb_free (buf); + return nullptr; + } + + sorted_entries.qsort (compare_entries); + bool ret = f->serialize_single (&c, sfnt_tag, + sorted_entries.iter()); c.end_serialize (); if (unlikely (!ret)) { - free (buf); + hb_free (buf); return nullptr; } - return hb_blob_create (buf, face_length, HB_MEMORY_MODE_WRITABLE, buf, free); + return hb_blob_create (buf, face_length, HB_MEMORY_MODE_WRITABLE, buf, hb_free); } static hb_blob_t * @@ -706,11 +718,7 @@ _hb_face_builder_reference_table (hb_face_t *face HB_UNUSED, hb_tag_t tag, void if (!tag) return _hb_face_builder_data_reference_blob (data); - hb_face_builder_data_t::table_entry_t *entry = data->tables.lsearch (tag); - if (entry) - return hb_blob_reference (entry->blob); - - return nullptr; + return hb_blob_reference (data->tables[tag]); } @@ -750,17 +758,21 @@ hb_face_builder_create () hb_bool_t hb_face_builder_add_table (hb_face_t *face, hb_tag_t tag, hb_blob_t *blob) { + if (tag == HB_MAP_VALUE_INVALID) + return false; + if (unlikely (face->destroy != (hb_destroy_func_t) _hb_face_builder_data_destroy)) return false; hb_face_builder_data_t *data = (hb_face_builder_data_t *) face->user_data; - hb_face_builder_data_t::table_entry_t *entry = data->tables.push (); - if (unlikely (data->tables.in_error())) + hb_blob_t* previous = data->tables.get (tag); + if (!data->tables.set (tag, hb_blob_reference (blob))) + { + hb_blob_destroy (blob); return false; + } - entry->tag = tag; - entry->blob = hb_blob_reference (blob); - + hb_blob_destroy (previous); return true; } diff --git a/thirdparty/harfbuzz/src/hb-font.cc b/thirdparty/harfbuzz/src/hb-font.cc index 37a0e7fe85..fa8da96395 100644 --- a/thirdparty/harfbuzz/src/hb-font.cc +++ b/thirdparty/harfbuzz/src/hb-font.cc @@ -620,7 +620,7 @@ hb_font_funcs_destroy (hb_font_funcs_t *ffuncs) HB_FONT_FUNCS_IMPLEMENT_CALLBACKS #undef HB_FONT_FUNC_IMPLEMENT - free (ffuncs); + hb_free (ffuncs); } /** @@ -1544,8 +1544,8 @@ _hb_font_adopt_var_coords (hb_font_t *font, float *design_coords, unsigned int coords_length) { - free (font->coords); - free (font->design_coords); + hb_free (font->coords); + hb_free (font->design_coords); font->coords = coords; font->design_coords = design_coords; @@ -1586,8 +1586,8 @@ hb_font_create_sub_font (hb_font_t *parent) unsigned int num_coords = parent->num_coords; if (num_coords) { - int *coords = (int *) calloc (num_coords, sizeof (parent->coords[0])); - float *design_coords = (float *) calloc (num_coords, sizeof (parent->design_coords[0])); + int *coords = (int *) hb_calloc (num_coords, sizeof (parent->coords[0])); + float *design_coords = (float *) hb_calloc (num_coords, sizeof (parent->design_coords[0])); if (likely (coords && design_coords)) { memcpy (coords, parent->coords, num_coords * sizeof (parent->coords[0])); @@ -1596,8 +1596,8 @@ hb_font_create_sub_font (hb_font_t *parent) } else { - free (coords); - free (design_coords); + hb_free (coords); + hb_free (design_coords); } } @@ -1659,10 +1659,10 @@ hb_font_destroy (hb_font_t *font) hb_face_destroy (font->face); hb_font_funcs_destroy (font->klass); - free (font->coords); - free (font->design_coords); + hb_free (font->coords); + hb_free (font->design_coords); - free (font); + hb_free (font); } /** @@ -2052,29 +2052,30 @@ hb_font_set_variations (hb_font_t *font, return; } - unsigned int coords_length = hb_ot_var_get_axis_count (font->face); + const OT::fvar &fvar = *font->face->table.fvar; + auto axes = fvar.get_axes (); + const unsigned coords_length = axes.length; - int *normalized = coords_length ? (int *) calloc (coords_length, sizeof (int)) : nullptr; - float *design_coords = coords_length ? (float *) calloc (coords_length, sizeof (float)) : nullptr; + int *normalized = coords_length ? (int *) hb_calloc (coords_length, sizeof (int)) : nullptr; + float *design_coords = coords_length ? (float *) hb_calloc (coords_length, sizeof (float)) : nullptr; if (unlikely (coords_length && !(normalized && design_coords))) { - free (normalized); - free (design_coords); + hb_free (normalized); + hb_free (design_coords); return; } - const OT::fvar &fvar = *font->face->table.fvar; for (unsigned int i = 0; i < variations_length; i++) { - hb_ot_var_axis_info_t info; - if (hb_ot_var_find_axis_info (font->face, variations[i].tag, &info) && - info.axis_index < coords_length) - { - float v = variations[i].value; - design_coords[info.axis_index] = v; - normalized[info.axis_index] = fvar.normalize_axis_value (info.axis_index, v); - } + const auto tag = variations[i].tag; + const auto v = variations[i].value; + for (unsigned axis_index = 0; axis_index < coords_length; axis_index++) + if (axes[axis_index].axisTag == tag) + { + design_coords[axis_index] = v; + normalized[axis_index] = fvar.normalize_axis_value (axis_index, v); + } } font->face->table.avar->map_coords (normalized, coords_length); @@ -2100,13 +2101,13 @@ hb_font_set_var_coords_design (hb_font_t *font, if (hb_object_is_immutable (font)) return; - int *normalized = coords_length ? (int *) calloc (coords_length, sizeof (int)) : nullptr; - float *design_coords = coords_length ? (float *) calloc (coords_length, sizeof (float)) : nullptr; + int *normalized = coords_length ? (int *) hb_calloc (coords_length, sizeof (int)) : nullptr; + float *design_coords = coords_length ? (float *) hb_calloc (coords_length, sizeof (float)) : nullptr; if (unlikely (coords_length && !(normalized && design_coords))) { - free (normalized); - free (design_coords); + hb_free (normalized); + hb_free (design_coords); return; } @@ -2135,13 +2136,13 @@ hb_font_set_var_named_instance (hb_font_t *font, unsigned int coords_length = hb_ot_var_named_instance_get_design_coords (font->face, instance_index, nullptr, nullptr); - float *coords = coords_length ? (float *) calloc (coords_length, sizeof (float)) : nullptr; + float *coords = coords_length ? (float *) hb_calloc (coords_length, sizeof (float)) : nullptr; if (unlikely (coords_length && !coords)) return; hb_ot_var_named_instance_get_design_coords (font->face, instance_index, &coords_length, coords); hb_font_set_var_coords_design (font, coords, coords_length); - free (coords); + hb_free (coords); } /** @@ -2165,15 +2166,15 @@ hb_font_set_var_coords_normalized (hb_font_t *font, if (hb_object_is_immutable (font)) return; - int *copy = coords_length ? (int *) calloc (coords_length, sizeof (coords[0])) : nullptr; - int *unmapped = coords_length ? (int *) calloc (coords_length, sizeof (coords[0])) : nullptr; - float *design_coords = coords_length ? (float *) calloc (coords_length, sizeof (design_coords[0])) : nullptr; + int *copy = coords_length ? (int *) hb_calloc (coords_length, sizeof (coords[0])) : nullptr; + int *unmapped = coords_length ? (int *) hb_calloc (coords_length, sizeof (coords[0])) : nullptr; + float *design_coords = coords_length ? (float *) hb_calloc (coords_length, sizeof (design_coords[0])) : nullptr; if (unlikely (coords_length && !(copy && unmapped && design_coords))) { - free (copy); - free (unmapped); - free (design_coords); + hb_free (copy); + hb_free (unmapped); + hb_free (design_coords); return; } @@ -2187,7 +2188,7 @@ hb_font_set_var_coords_normalized (hb_font_t *font, font->face->table.avar->unmap_coords (unmapped, coords_length); for (unsigned int i = 0; i < coords_length; ++i) design_coords[i] = font->face->table.fvar->unnormalize_axis_value (i, unmapped[i]); - free (unmapped); + hb_free (unmapped); _hb_font_adopt_var_coords (font, copy, design_coords, coords_length); } @@ -2267,7 +2268,7 @@ trampoline_create (FuncType func, { typedef hb_trampoline_t<FuncType> trampoline_t; - trampoline_t *trampoline = (trampoline_t *) calloc (1, sizeof (trampoline_t)); + trampoline_t *trampoline = (trampoline_t *) hb_calloc (1, sizeof (trampoline_t)); if (unlikely (!trampoline)) return nullptr; @@ -2296,7 +2297,7 @@ trampoline_destroy (void *user_data) if (closure->destroy) closure->destroy (closure->user_data); - free (closure); + hb_free (closure); } typedef hb_trampoline_t<hb_font_get_glyph_func_t> hb_font_get_glyph_trampoline_t; diff --git a/thirdparty/harfbuzz/src/hb-ft.cc b/thirdparty/harfbuzz/src/hb-ft.cc index b82c1a67bd..97a2c82e68 100644 --- a/thirdparty/harfbuzz/src/hb-ft.cc +++ b/thirdparty/harfbuzz/src/hb-ft.cc @@ -91,7 +91,7 @@ struct hb_ft_font_t static hb_ft_font_t * _hb_ft_font_create (FT_Face ft_face, bool symbol, bool unref) { - hb_ft_font_t *ft_font = (hb_ft_font_t *) calloc (1, sizeof (hb_ft_font_t)); + hb_ft_font_t *ft_font = (hb_ft_font_t *) hb_calloc (1, sizeof (hb_ft_font_t)); if (unlikely (!ft_font)) return nullptr; ft_font->lock.init (); @@ -125,7 +125,7 @@ _hb_ft_font_destroy (void *data) ft_font->lock.fini (); - free (ft_font); + hb_free (ft_font); } /** @@ -561,9 +561,7 @@ hb_ft_get_font_h_extents (hb_font_t *font HB_UNUSED, return true; } -#if HB_USE_ATEXIT -static void free_static_ft_funcs (); -#endif +static inline void free_static_ft_funcs (); static struct hb_ft_font_funcs_lazy_loader_t : hb_font_funcs_lazy_loader_t<hb_ft_font_funcs_lazy_loader_t> { @@ -591,21 +589,17 @@ static struct hb_ft_font_funcs_lazy_loader_t : hb_font_funcs_lazy_loader_t<hb_ft hb_font_funcs_make_immutable (funcs); -#if HB_USE_ATEXIT - atexit (free_static_ft_funcs); -#endif + hb_atexit (free_static_ft_funcs); return funcs; } } static_ft_funcs; -#if HB_USE_ATEXIT -static +static inline void free_static_ft_funcs () { static_ft_funcs.free_instance (); } -#endif static hb_font_funcs_t * _hb_ft_get_font_funcs () @@ -642,20 +636,20 @@ _hb_ft_reference_table (hb_face_t *face HB_UNUSED, hb_tag_t tag, void *user_data if (error) return nullptr; - buffer = (FT_Byte *) malloc (length); + buffer = (FT_Byte *) hb_malloc (length); if (!buffer) return nullptr; error = FT_Load_Sfnt_Table (ft_face, tag, 0, buffer, &length); if (error) { - free (buffer); + hb_free (buffer); return nullptr; } return hb_blob_create ((const char *) buffer, length, HB_MEMORY_MODE_WRITABLE, - buffer, free); + buffer, hb_free); } /** @@ -846,8 +840,8 @@ hb_ft_font_changed (hb_font_t *font) FT_MM_Var *mm_var = nullptr; if (!FT_Get_MM_Var (ft_face, &mm_var)) { - FT_Fixed *ft_coords = (FT_Fixed *) calloc (mm_var->num_axis, sizeof (FT_Fixed)); - int *coords = (int *) calloc (mm_var->num_axis, sizeof (int)); + FT_Fixed *ft_coords = (FT_Fixed *) hb_calloc (mm_var->num_axis, sizeof (FT_Fixed)); + int *coords = (int *) hb_calloc (mm_var->num_axis, sizeof (int)); if (coords && ft_coords) { if (!FT_Get_Var_Blend_Coordinates (ft_face, mm_var->num_axis, ft_coords)) @@ -866,12 +860,12 @@ hb_ft_font_changed (hb_font_t *font) hb_font_set_var_coords_normalized (font, nullptr, 0); } } - free (coords); - free (ft_coords); + hb_free (coords); + hb_free (ft_coords); #ifdef HAVE_FT_DONE_MM_VAR FT_Done_MM_Var (ft_face->glyph->library, mm_var); #else - free (mm_var); + hb_free (mm_var); #endif } #endif @@ -905,9 +899,7 @@ hb_ft_font_create_referenced (FT_Face ft_face) return hb_ft_font_create (ft_face, _hb_ft_face_destroy); } -#if HB_USE_ATEXIT -static void free_static_ft_library (); -#endif +static inline void free_static_ft_library (); static struct hb_ft_library_lazy_loader_t : hb_lazy_loader_t<hb_remove_pointer<FT_Library>, hb_ft_library_lazy_loader_t> @@ -918,9 +910,7 @@ static struct hb_ft_library_lazy_loader_t : hb_lazy_loader_t<hb_remove_pointer<F if (FT_Init_FreeType (&l)) return nullptr; -#if HB_USE_ATEXIT - atexit (free_static_ft_library); -#endif + hb_atexit (free_static_ft_library); return l; } @@ -934,13 +924,11 @@ static struct hb_ft_library_lazy_loader_t : hb_lazy_loader_t<hb_remove_pointer<F } } static_ft_library; -#if HB_USE_ATEXIT -static +static inline void free_static_ft_library () { static_ft_library.free_instance (); } -#endif static FT_Library get_ft_library () @@ -1020,13 +1008,13 @@ hb_ft_font_set_funcs (hb_font_t *font) const int *coords = hb_font_get_var_coords_normalized (font, &num_coords); if (num_coords) { - FT_Fixed *ft_coords = (FT_Fixed *) calloc (num_coords, sizeof (FT_Fixed)); + FT_Fixed *ft_coords = (FT_Fixed *) hb_calloc (num_coords, sizeof (FT_Fixed)); if (ft_coords) { for (unsigned int i = 0; i < num_coords; i++) ft_coords[i] = coords[i] * 4; FT_Set_Var_Blend_Coordinates (ft_face, num_coords, ft_coords); - free (ft_coords); + hb_free (ft_coords); } } #endif diff --git a/thirdparty/harfbuzz/src/hb-gdi.cc b/thirdparty/harfbuzz/src/hb-gdi.cc index dc4659c7f6..8e7589beac 100644 --- a/thirdparty/harfbuzz/src/hb-gdi.cc +++ b/thirdparty/harfbuzz/src/hb-gdi.cc @@ -50,16 +50,16 @@ _hb_gdi_reference_table (hb_face_t *face HB_UNUSED, hb_tag_t tag, void *user_dat length = GetFontData (hdc, hb_uint32_swap (tag), 0, buffer, length); if (unlikely (length == GDI_ERROR)) goto fail_with_releasedc; - buffer = (char *) malloc (length); + buffer = (char *) hb_malloc (length); if (unlikely (!buffer)) goto fail_with_releasedc; length = GetFontData (hdc, hb_uint32_swap (tag), 0, buffer, length); if (unlikely (length == GDI_ERROR)) goto fail_with_releasedc_and_free; ReleaseDC (nullptr, hdc); - return hb_blob_create ((const char *) buffer, length, HB_MEMORY_MODE_WRITABLE, buffer, free); + return hb_blob_create ((const char *) buffer, length, HB_MEMORY_MODE_WRITABLE, buffer, hb_free); fail_with_releasedc_and_free: - free (buffer); + hb_free (buffer); fail_with_releasedc: ReleaseDC (nullptr, hdc); fail: diff --git a/thirdparty/harfbuzz/src/hb-glib.cc b/thirdparty/harfbuzz/src/hb-glib.cc index f93bb8853c..8ddc7ebad8 100644 --- a/thirdparty/harfbuzz/src/hb-glib.cc +++ b/thirdparty/harfbuzz/src/hb-glib.cc @@ -218,9 +218,7 @@ hb_glib_unicode_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED, } -#if HB_USE_ATEXIT -static void free_static_glib_funcs (); -#endif +static inline void free_static_glib_funcs (); static struct hb_glib_unicode_funcs_lazy_loader_t : hb_unicode_funcs_lazy_loader_t<hb_glib_unicode_funcs_lazy_loader_t> { @@ -237,21 +235,17 @@ static struct hb_glib_unicode_funcs_lazy_loader_t : hb_unicode_funcs_lazy_loader hb_unicode_funcs_make_immutable (funcs); -#if HB_USE_ATEXIT - atexit (free_static_glib_funcs); -#endif + hb_atexit (free_static_glib_funcs); return funcs; } } static_glib_funcs; -#if HB_USE_ATEXIT -static +static inline void free_static_glib_funcs () { static_glib_funcs.free_instance (); } -#endif /** * hb_glib_get_unicode_funcs: diff --git a/thirdparty/harfbuzz/src/hb-gobject-structs.cc b/thirdparty/harfbuzz/src/hb-gobject-structs.cc index 7c46e26400..540b11f911 100644 --- a/thirdparty/harfbuzz/src/hb-gobject-structs.cc +++ b/thirdparty/harfbuzz/src/hb-gobject-structs.cc @@ -80,12 +80,12 @@ hb_gobject_##name##_get_type () \ #define HB_DEFINE_VALUE_TYPE(name) \ static hb_##name##_t *_hb_##name##_reference (const hb_##name##_t *l) \ { \ - hb_##name##_t *c = (hb_##name##_t *) calloc (1, sizeof (hb_##name##_t)); \ + hb_##name##_t *c = (hb_##name##_t *) hb_calloc (1, sizeof (hb_##name##_t)); \ if (unlikely (!c)) return nullptr; \ *c = *l; \ return c; \ } \ - static void _hb_##name##_destroy (hb_##name##_t *l) { free (l); } \ + static void _hb_##name##_destroy (hb_##name##_t *l) { hb_free (l); } \ HB_DEFINE_BOXED_TYPE (name, _hb_##name##_reference, _hb_##name##_destroy) HB_DEFINE_OBJECT_TYPE (buffer) diff --git a/thirdparty/harfbuzz/src/hb-graphite2.cc b/thirdparty/harfbuzz/src/hb-graphite2.cc index 9dafe654c8..209207f1e5 100644 --- a/thirdparty/harfbuzz/src/hb-graphite2.cc +++ b/thirdparty/harfbuzz/src/hb-graphite2.cc @@ -88,7 +88,7 @@ static const void *hb_graphite2_get_table (const void *data, unsigned int tag, s { blob = face_data->face->reference_table (tag); - hb_graphite2_tablelist_t *p = (hb_graphite2_tablelist_t *) calloc (1, sizeof (hb_graphite2_tablelist_t)); + hb_graphite2_tablelist_t *p = (hb_graphite2_tablelist_t *) hb_calloc (1, sizeof (hb_graphite2_tablelist_t)); if (unlikely (!p)) { hb_blob_destroy (blob); return nullptr; @@ -123,15 +123,16 @@ _hb_graphite2_shaper_face_data_create (hb_face_t *face) } hb_blob_destroy (silf_blob); - hb_graphite2_face_data_t *data = (hb_graphite2_face_data_t *) calloc (1, sizeof (hb_graphite2_face_data_t)); + hb_graphite2_face_data_t *data = (hb_graphite2_face_data_t *) hb_calloc (1, sizeof (hb_graphite2_face_data_t)); if (unlikely (!data)) return nullptr; data->face = face; - data->grface = gr_make_face (data, &hb_graphite2_get_table, gr_face_preloadAll); + const gr_face_ops ops = {sizeof(gr_face_ops), &hb_graphite2_get_table, NULL}; + data->grface = gr_make_face_with_ops (data, &ops, gr_face_preloadAll); if (unlikely (!data->grface)) { - free (data); + hb_free (data); return nullptr; } @@ -148,12 +149,12 @@ _hb_graphite2_shaper_face_data_destroy (hb_graphite2_face_data_t *data) hb_graphite2_tablelist_t *old = tlist; hb_blob_destroy (tlist->blob); tlist = tlist->next; - free (old); + hb_free (old); } gr_face_destroy (data->grface); - free (data); + hb_free (data); } /** diff --git a/thirdparty/harfbuzz/src/hb-icu.cc b/thirdparty/harfbuzz/src/hb-icu.cc index 008a39e414..e46401f7a6 100644 --- a/thirdparty/harfbuzz/src/hb-icu.cc +++ b/thirdparty/harfbuzz/src/hb-icu.cc @@ -233,9 +233,7 @@ hb_icu_unicode_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED, } -#if HB_USE_ATEXIT -static void free_static_icu_funcs (); -#endif +static inline void free_static_icu_funcs (); static struct hb_icu_unicode_funcs_lazy_loader_t : hb_unicode_funcs_lazy_loader_t<hb_icu_unicode_funcs_lazy_loader_t> { @@ -257,21 +255,17 @@ static struct hb_icu_unicode_funcs_lazy_loader_t : hb_unicode_funcs_lazy_loader_ hb_unicode_funcs_make_immutable (funcs); -#if HB_USE_ATEXIT - atexit (free_static_icu_funcs); -#endif + hb_atexit (free_static_icu_funcs); return funcs; } } static_icu_funcs; -#if HB_USE_ATEXIT -static +static inline void free_static_icu_funcs () { static_icu_funcs.free_instance (); } -#endif /** * hb_icu_get_unicode_funcs: diff --git a/thirdparty/harfbuzz/src/hb-iter.hh b/thirdparty/harfbuzz/src/hb-iter.hh index f7018150e4..b8c4472636 100644 --- a/thirdparty/harfbuzz/src/hb-iter.hh +++ b/thirdparty/harfbuzz/src/hb-iter.hh @@ -46,7 +46,7 @@ * TODO Document more. * * If iterator implementation implements operator!=, then can be - * used in range-based for loop. That comes free if the iterator + * used in range-based for loop. That already happens if the iterator * is random-access. Otherwise, the range-based for loop incurs * one traversal to find end(), which can be avoided if written * as a while-style for loop, or if iterator implements a faster diff --git a/thirdparty/harfbuzz/src/hb-machinery.hh b/thirdparty/harfbuzz/src/hb-machinery.hh index 3bd5a979b0..010c2570d7 100644 --- a/thirdparty/harfbuzz/src/hb-machinery.hh +++ b/thirdparty/harfbuzz/src/hb-machinery.hh @@ -242,14 +242,14 @@ struct hb_lazy_loader_t : hb_data_wrapper_t<Data, WheresData> static const Stored* get_null () { return &Null (Stored); } static Stored *create (Data *data) { - Stored *p = (Stored *) calloc (1, sizeof (Stored)); + Stored *p = (Stored *) hb_calloc (1, sizeof (Stored)); if (likely (p)) p->init (data); return p; } static Stored *create () { - Stored *p = (Stored *) calloc (1, sizeof (Stored)); + Stored *p = (Stored *) hb_calloc (1, sizeof (Stored)); if (likely (p)) p->init (); return p; @@ -257,7 +257,7 @@ struct hb_lazy_loader_t : hb_data_wrapper_t<Data, WheresData> static void destroy (Stored *p) { p->fini (); - free (p); + hb_free (p); } // private: diff --git a/thirdparty/harfbuzz/src/hb-map.cc b/thirdparty/harfbuzz/src/hb-map.cc index f115da2bb8..9f1ac42846 100644 --- a/thirdparty/harfbuzz/src/hb-map.cc +++ b/thirdparty/harfbuzz/src/hb-map.cc @@ -109,7 +109,7 @@ hb_map_destroy (hb_map_t *map) map->fini_shallow (); - free (map); + hb_free (map); } /** @@ -188,6 +188,7 @@ hb_map_set (hb_map_t *map, hb_codepoint_t key, hb_codepoint_t value) { + /* Immutable-safe. */ map->set (key, value); } @@ -220,6 +221,7 @@ void hb_map_del (hb_map_t *map, hb_codepoint_t key) { + /* Immutable-safe. */ map->del (key); } @@ -253,9 +255,6 @@ hb_map_has (const hb_map_t *map, void hb_map_clear (hb_map_t *map) { - if (unlikely (hb_object_is_immutable (map))) - return; - return map->clear (); } diff --git a/thirdparty/harfbuzz/src/hb-map.hh b/thirdparty/harfbuzz/src/hb-map.hh index 84fe1d549b..dcd5267d74 100644 --- a/thirdparty/harfbuzz/src/hb-map.hh +++ b/thirdparty/harfbuzz/src/hb-map.hh @@ -85,7 +85,7 @@ struct hb_hashmap_t } void fini_shallow () { - free (items); + hb_free (items); items = nullptr; population = occupancy = 0; } @@ -109,7 +109,7 @@ struct hb_hashmap_t unsigned int power = hb_bit_storage (population * 2 + 8); unsigned int new_size = 1u << power; - item_t *new_items = (item_t *) malloc ((size_t) new_size * sizeof (item_t)); + item_t *new_items = (item_t *) hb_malloc ((size_t) new_size * sizeof (item_t)); if (unlikely (!new_items)) { successful = false; @@ -135,14 +135,14 @@ struct hb_hashmap_t old_items[i].hash, old_items[i].value); - free (old_items); + hb_free (old_items); return true; } - void set (K key, V value) + bool set (K key, V value) { - set_with_hash (key, hb_hash (key), value); + return set_with_hash (key, hb_hash (key), value); } V get (K key) const @@ -169,6 +169,8 @@ struct hb_hashmap_t void clear () { + if (unlikely (!successful)) return; + if (items) for (auto &_ : hb_iter (items, mask + 1)) _.clear (); @@ -211,20 +213,20 @@ struct hb_hashmap_t protected: - void set_with_hash (K key, uint32_t hash, V value) + bool set_with_hash (K key, uint32_t hash, V value) { - if (unlikely (!successful)) return; - if (unlikely (key == kINVALID)) return; - if ((occupancy + occupancy / 2) >= mask && !resize ()) return; + if (unlikely (!successful)) return false; + if (unlikely (key == kINVALID)) return true; + if (unlikely ((occupancy + occupancy / 2) >= mask && !resize ())) return false; unsigned int i = bucket_for_hash (key, hash); if (value == vINVALID && items[i].key != key) - return; /* Trying to delete non-existent key. */ + return true; /* Trying to delete non-existent key. */ if (!items[i].is_unused ()) { occupancy--; - if (items[i].is_tombstone ()) + if (!items[i].is_tombstone ()) population--; } @@ -235,6 +237,8 @@ struct hb_hashmap_t occupancy++; if (!items[i].is_tombstone ()) population++; + + return true; } unsigned int bucket_for (K key) const diff --git a/thirdparty/harfbuzz/src/hb-meta.hh b/thirdparty/harfbuzz/src/hb-meta.hh index e40d9fd178..a714bc2bf0 100644 --- a/thirdparty/harfbuzz/src/hb-meta.hh +++ b/thirdparty/harfbuzz/src/hb-meta.hh @@ -101,14 +101,14 @@ HB_FUNCOBJ (hb_addressof); template <typename T> static inline T hb_declval (); #define hb_declval(T) (hb_declval<T> ()) -template <typename T> struct hb_match_const : hb_type_identity_t<T>, hb_bool_constant<false>{}; -template <typename T> struct hb_match_const<const T> : hb_type_identity_t<T>, hb_bool_constant<true> {}; +template <typename T> struct hb_match_const : hb_type_identity_t<T>, hb_false_type {}; +template <typename T> struct hb_match_const<const T> : hb_type_identity_t<T>, hb_true_type {}; template <typename T> using hb_remove_const = typename hb_match_const<T>::type; template <typename T> using hb_add_const = const T; #define hb_is_const(T) hb_match_const<T>::value -template <typename T> struct hb_match_reference : hb_type_identity_t<T>, hb_bool_constant<false>{}; -template <typename T> struct hb_match_reference<T &> : hb_type_identity_t<T>, hb_bool_constant<true> {}; -template <typename T> struct hb_match_reference<T &&> : hb_type_identity_t<T>, hb_bool_constant<true> {}; +template <typename T> struct hb_match_reference : hb_type_identity_t<T>, hb_false_type {}; +template <typename T> struct hb_match_reference<T &> : hb_type_identity_t<T>, hb_true_type {}; +template <typename T> struct hb_match_reference<T &&> : hb_type_identity_t<T>, hb_true_type {}; template <typename T> using hb_remove_reference = typename hb_match_reference<T>::type; template <typename T> auto _hb_try_add_lvalue_reference (hb_priority<1>) -> hb_type_identity<T&>; template <typename T> auto _hb_try_add_lvalue_reference (hb_priority<0>) -> hb_type_identity<T>; @@ -117,8 +117,8 @@ template <typename T> auto _hb_try_add_rvalue_reference (hb_priority<1>) -> hb_t template <typename T> auto _hb_try_add_rvalue_reference (hb_priority<0>) -> hb_type_identity<T>; template <typename T> using hb_add_rvalue_reference = decltype (_hb_try_add_rvalue_reference<T> (hb_prioritize)); #define hb_is_reference(T) hb_match_reference<T>::value -template <typename T> struct hb_match_pointer : hb_type_identity_t<T>, hb_bool_constant<false>{}; -template <typename T> struct hb_match_pointer<T *> : hb_type_identity_t<T>, hb_bool_constant<true> {}; +template <typename T> struct hb_match_pointer : hb_type_identity_t<T>, hb_false_type {}; +template <typename T> struct hb_match_pointer<T *> : hb_type_identity_t<T>, hb_true_type {}; template <typename T> using hb_remove_pointer = typename hb_match_pointer<T>::type; template <typename T> auto _hb_try_add_pointer (hb_priority<1>) -> hb_type_identity<hb_remove_reference<T>*>; template <typename T> auto _hb_try_add_pointer (hb_priority<1>) -> hb_type_identity<T>; @@ -259,15 +259,15 @@ using hb_is_arithmetic = hb_bool_constant< #define hb_is_arithmetic(T) hb_is_arithmetic<T>::value -template <typename T> -using hb_is_signed = hb_conditional<hb_is_arithmetic (T), - hb_bool_constant<(T) -1 < (T) 0>, - hb_false_type>; +template <typename T, bool is_arithmetic> struct hb_is_signed_; +template <typename T> struct hb_is_signed_<T, false> : hb_false_type {}; +template <typename T> struct hb_is_signed_<T, true> : hb_bool_constant<(T) -1 < (T) 0> {}; +template <typename T> struct hb_is_signed : hb_is_signed_<T, hb_is_arithmetic (T)> {}; #define hb_is_signed(T) hb_is_signed<T>::value -template <typename T> -using hb_is_unsigned = hb_conditional<hb_is_arithmetic (T), - hb_bool_constant<(T) 0 < (T) -1>, - hb_false_type>; +template <typename T, bool is_arithmetic> struct hb_is_unsigned_; +template <typename T> struct hb_is_unsigned_<T, false> : hb_false_type {}; +template <typename T> struct hb_is_unsigned_<T, true> : hb_bool_constant<(T) 0 < (T) -1> {}; +template <typename T> struct hb_is_unsigned : hb_is_unsigned_<T, hb_is_arithmetic (T)> {}; #define hb_is_unsigned(T) hb_is_unsigned<T>::value template <typename T> struct hb_int_min; @@ -282,6 +282,7 @@ template <> struct hb_int_min<signed long> : hb_integral_constant<signed long, template <> struct hb_int_min<unsigned long> : hb_integral_constant<unsigned long, 0> {}; template <> struct hb_int_min<signed long long> : hb_integral_constant<signed long long, LLONG_MIN> {}; template <> struct hb_int_min<unsigned long long> : hb_integral_constant<unsigned long long, 0> {}; +template <typename T> struct hb_int_min<T *> : hb_integral_constant<T *, nullptr> {}; #define hb_int_min(T) hb_int_min<T>::value template <typename T> struct hb_int_max; template <> struct hb_int_max<char> : hb_integral_constant<char, CHAR_MAX> {}; diff --git a/thirdparty/harfbuzz/src/hb-ms-feature-ranges.cc b/thirdparty/harfbuzz/src/hb-ms-feature-ranges.cc new file mode 100644 index 0000000000..6d09b252d8 --- /dev/null +++ b/thirdparty/harfbuzz/src/hb-ms-feature-ranges.cc @@ -0,0 +1,177 @@ +/* + * Copyright © 2011,2012,2013 Google, Inc. + * Copyright © 2021 Khaled Hosny + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + * Google Author(s): Behdad Esfahbod + */ + +#include "hb-ms-feature-ranges.hh" + +bool +hb_ms_setup_features (const hb_feature_t *features, + unsigned int num_features, + hb_vector_t<hb_ms_feature_t> &feature_records, /* OUT */ + hb_vector_t<hb_ms_range_record_t> &range_records /* OUT */) +{ + feature_records.shrink(0); + range_records.shrink(0); + + /* Sort features by start/end events. */ + hb_vector_t<hb_ms_feature_event_t> feature_events; + for (unsigned int i = 0; i < num_features; i++) + { + hb_ms_active_feature_t feature; + feature.fea.tag_le = hb_uint32_swap (features[i].tag); + feature.fea.value = features[i].value; + feature.order = i; + + hb_ms_feature_event_t *event; + + event = feature_events.push (); + event->index = features[i].start; + event->start = true; + event->feature = feature; + + event = feature_events.push (); + event->index = features[i].end; + event->start = false; + event->feature = feature; + } + feature_events.qsort (); + /* Add a strategic final event. */ + { + hb_ms_active_feature_t feature; + feature.fea.tag_le = 0; + feature.fea.value = 0; + feature.order = num_features + 1; + + auto *event = feature_events.push (); + event->index = 0; /* This value does magic. */ + event->start = false; + event->feature = feature; + } + + /* Scan events and save features for each range. */ + hb_vector_t<hb_ms_active_feature_t> active_features; + unsigned int last_index = 0; + for (unsigned int i = 0; i < feature_events.length; i++) + { + auto *event = &feature_events[i]; + + if (event->index != last_index) + { + /* Save a snapshot of active features and the range. */ + auto *range = range_records.push (); + auto offset = feature_records.length; + + active_features.qsort (); + for (unsigned int j = 0; j < active_features.length; j++) + { + if (!j || active_features[j].fea.tag_le != feature_records[feature_records.length - 1].tag_le) + { + feature_records.push (active_features[j].fea); + } + else + { + /* Overrides value for existing feature. */ + feature_records[feature_records.length - 1].value = active_features[j].fea.value; + } + } + + /* Will convert to pointer after all is ready, since feature_records.array + * may move as we grow it. */ + range->features.features = reinterpret_cast<hb_ms_feature_t *> (offset); + range->features.num_features = feature_records.length - offset; + range->index_first = last_index; + range->index_last = event->index - 1; + + last_index = event->index; + } + + if (event->start) + { + active_features.push (event->feature); + } + else + { + auto *feature = active_features.find (&event->feature); + if (feature) + active_features.remove (feature - active_features.arrayZ); + } + } + + if (!range_records.length) /* No active feature found. */ + num_features = 0; + + /* Fixup the pointers. */ + for (unsigned int i = 0; i < range_records.length; i++) + { + auto *range = &range_records[i]; + range->features.features = (hb_ms_feature_t *) feature_records + reinterpret_cast<uintptr_t> (range->features.features); + } + + return !!num_features; +} + +void +hb_ms_make_feature_ranges (hb_vector_t<hb_ms_feature_t> &feature_records, + hb_vector_t<hb_ms_range_record_t> &range_records, + unsigned int chars_offset, + unsigned int chars_len, + uint16_t *log_clusters, + hb_vector_t<hb_ms_features_t*> &range_features, /* OUT */ + hb_vector_t<uint32_t> &range_counts /* OUT */) +{ + range_features.shrink (0); + range_counts.shrink (0); + + auto *last_range = &range_records[0]; + for (unsigned int i = chars_offset; i < chars_len; i++) + { + auto *range = last_range; + while (log_clusters[i] < range->index_first) + range--; + while (log_clusters[i] > range->index_last) + range++; + if (!range_features.length || + &range->features != range_features[range_features.length - 1]) + { + auto **features = range_features.push (); + auto *c = range_counts.push (); + if (unlikely (!features || !c)) + { + range_features.shrink (0); + range_counts.shrink (0); + break; + } + *features = &range->features; + *c = 1; + } + else + { + range_counts[range_counts.length - 1]++; + } + + last_range = range; + } +} diff --git a/thirdparty/harfbuzz/src/hb-ms-feature-ranges.hh b/thirdparty/harfbuzz/src/hb-ms-feature-ranges.hh new file mode 100644 index 0000000000..401d1e1d97 --- /dev/null +++ b/thirdparty/harfbuzz/src/hb-ms-feature-ranges.hh @@ -0,0 +1,96 @@ +/* + * Copyright © 2011,2012,2013 Google, Inc. + * Copyright © 2021 Khaled Hosny + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + * Google Author(s): Behdad Esfahbod + */ + +#ifndef HB_MS_FEATURE_RANGES_HH +#define HB_MS_FEATURE_RANGES_HH + +#include "hb.hh" + +typedef struct hb_ms_feature_t { + uint32_t tag_le; + uint32_t value; +} hb_ms_feature_t; + +typedef struct hb_ms_features_t { + hb_ms_feature_t *features; + uint32_t num_features; +} hb_ms_features_t; + +struct hb_ms_active_feature_t { + hb_ms_feature_t fea; + unsigned int order; + + HB_INTERNAL static int cmp (const void *pa, const void *pb) { + const auto *a = (const hb_ms_active_feature_t *) pa; + const auto *b = (const hb_ms_active_feature_t *) pb; + return a->fea.tag_le < b->fea.tag_le ? -1 : a->fea.tag_le > b->fea.tag_le ? 1 : + a->order < b->order ? -1 : a->order > b->order ? 1 : + a->fea.value < b->fea.value ? -1 : a->fea.value > b->fea.value ? 1 : + 0; + } + bool operator== (const hb_ms_active_feature_t *f) + { return cmp (this, f) == 0; } +}; + +struct hb_ms_feature_event_t { + unsigned int index; + bool start; + hb_ms_active_feature_t feature; + + HB_INTERNAL static int cmp (const void *pa, const void *pb) + { + const auto *a = (const hb_ms_feature_event_t *) pa; + const auto *b = (const hb_ms_feature_event_t *) pb; + return a->index < b->index ? -1 : a->index > b->index ? 1 : + a->start < b->start ? -1 : a->start > b->start ? 1 : + hb_ms_active_feature_t::cmp (&a->feature, &b->feature); + } +}; + +struct hb_ms_range_record_t { + hb_ms_features_t features; + unsigned int index_first; /* == start */ + unsigned int index_last; /* == end - 1 */ +}; + +HB_INTERNAL bool +hb_ms_setup_features (const hb_feature_t *features, + unsigned int num_features, + hb_vector_t<hb_ms_feature_t> &feature_records, /* OUT */ + hb_vector_t<hb_ms_range_record_t> &range_records /* OUT */); + + +HB_INTERNAL void +hb_ms_make_feature_ranges (hb_vector_t<hb_ms_feature_t> &feature_records, + hb_vector_t<hb_ms_range_record_t> &range_records, + unsigned int chars_offset, + unsigned int chars_len, + uint16_t *log_clusters, + hb_vector_t<hb_ms_features_t*> &range_features, /* OUT */ + hb_vector_t<uint32_t> &range_counts /* OUT */); + +#endif /* HB_MS_FEATURE_RANGES_HH */ diff --git a/thirdparty/harfbuzz/src/hb-mutex.hh b/thirdparty/harfbuzz/src/hb-mutex.hh index 2fc8d7ee58..a9227a741d 100644 --- a/thirdparty/harfbuzz/src/hb-mutex.hh +++ b/thirdparty/harfbuzz/src/hb-mutex.hh @@ -39,8 +39,7 @@ /* We need external help for these */ -#if defined(HB_MUTEX_IMPL_INIT) \ - && defined(hb_mutex_impl_init) \ +#if defined(hb_mutex_impl_init) \ && defined(hb_mutex_impl_lock) \ && defined(hb_mutex_impl_unlock) \ && defined(hb_mutex_impl_finish) @@ -52,7 +51,6 @@ #include <pthread.h> typedef pthread_mutex_t hb_mutex_impl_t; -#define HB_MUTEX_IMPL_INIT PTHREAD_MUTEX_INITIALIZER #define hb_mutex_impl_init(M) pthread_mutex_init (M, nullptr) #define hb_mutex_impl_lock(M) pthread_mutex_lock (M) #define hb_mutex_impl_unlock(M) pthread_mutex_unlock (M) @@ -62,7 +60,6 @@ typedef pthread_mutex_t hb_mutex_impl_t; #elif !defined(HB_NO_MT) && defined(_WIN32) typedef CRITICAL_SECTION hb_mutex_impl_t; -#define HB_MUTEX_IMPL_INIT {0} #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) #define hb_mutex_impl_init(M) InitializeCriticalSectionEx (M, 0, 0) #else @@ -76,7 +73,6 @@ typedef CRITICAL_SECTION hb_mutex_impl_t; #elif defined(HB_NO_MT) typedef int hb_mutex_impl_t; -#define HB_MUTEX_IMPL_INIT 0 #define hb_mutex_impl_init(M) HB_STMT_START {} HB_STMT_END #define hb_mutex_impl_lock(M) HB_STMT_START {} HB_STMT_END #define hb_mutex_impl_unlock(M) HB_STMT_START {} HB_STMT_END @@ -91,8 +87,6 @@ typedef int hb_mutex_impl_t; #endif -#define HB_MUTEX_INIT {HB_MUTEX_IMPL_INIT} - struct hb_mutex_t { hb_mutex_impl_t m; diff --git a/thirdparty/harfbuzz/src/hb-null.hh b/thirdparty/harfbuzz/src/hb-null.hh index d09f858cde..db38a4dfd2 100644 --- a/thirdparty/harfbuzz/src/hb-null.hh +++ b/thirdparty/harfbuzz/src/hb-null.hh @@ -39,8 +39,11 @@ #define HB_NULL_POOL_SIZE 384 -/* Use SFINAE to sniff whether T has min_size; in which case return T::null_size, - * otherwise return sizeof(T). */ +/* Use SFINAE to sniff whether T has min_size; in which case return the larger + * of sizeof(T) and T::null_size, otherwise return sizeof(T). + * + * The main purpose of this is to let structs communicate that they are not nullable, + * by defining min_size but *not* null_size. */ /* The hard way... * https://stackoverflow.com/questions/7776448/sfinae-tried-with-bool-gives-compiler-error-template-argument-tvalue-invol @@ -49,8 +52,9 @@ template <typename T, typename> struct _hb_null_size : hb_integral_constant<unsigned, sizeof (T)> {}; template <typename T> -struct _hb_null_size<T, hb_void_t<decltype (T::min_size)>> : hb_integral_constant<unsigned, T::null_size> {}; - +struct _hb_null_size<T, hb_void_t<decltype (T::min_size)>> + : hb_integral_constant<unsigned, + (sizeof (T) > T::null_size ? sizeof (T) : T::null_size)> {}; template <typename T> using hb_null_size = _hb_null_size<T, void>; #define hb_null_size(T) hb_null_size<T>::value @@ -68,6 +72,14 @@ template <typename T> using hb_static_size = _hb_static_size<T, void>; #define hb_static_size(T) hb_static_size<T>::value +template <typename T, typename> +struct _hb_min_size : hb_integral_constant<unsigned, sizeof (T)> {}; +template <typename T> +struct _hb_min_size<T, hb_void_t<decltype (T::min_size)>> : hb_integral_constant<unsigned, T::min_size> {}; +template <typename T> +using hb_min_size = _hb_min_size<T, void>; +#define hb_min_size(T) hb_min_size<T>::value + /* * Null() diff --git a/thirdparty/harfbuzz/src/hb-object.hh b/thirdparty/harfbuzz/src/hb-object.hh index f3048b1c3e..0e15cb12c4 100644 --- a/thirdparty/harfbuzz/src/hb-object.hh +++ b/thirdparty/harfbuzz/src/hb-object.hh @@ -140,8 +140,6 @@ struct hb_lockable_set_t * Reference-count. */ -#define HB_REFERENCE_COUNT_INIT {0} - struct hb_reference_count_t { mutable hb_atomic_int_t ref_count; @@ -197,6 +195,8 @@ struct hb_object_header_t hb_reference_count_t ref_count; mutable hb_atomic_int_t writable = 0; hb_atomic_ptr_t<hb_user_data_array_t> user_data; + + bool is_inert () const { return !ref_count.get_relaxed (); } }; #define HB_OBJECT_HEADER_STATIC {} @@ -217,7 +217,7 @@ static inline void hb_object_trace (const Type *obj, const char *function) template <typename Type> static inline Type *hb_object_create () { - Type *obj = (Type *) calloc (1, sizeof (Type)); + Type *obj = (Type *) hb_calloc (1, sizeof (Type)); if (unlikely (!obj)) return obj; @@ -234,11 +234,6 @@ static inline void hb_object_init (Type *obj) obj->header.user_data.init (); } template <typename Type> -static inline bool hb_object_is_inert (const Type *obj) -{ - return unlikely (obj->header.ref_count.is_inert ()); -} -template <typename Type> static inline bool hb_object_is_valid (const Type *obj) { return likely (obj->header.ref_count.is_valid ()); @@ -257,7 +252,7 @@ template <typename Type> static inline Type *hb_object_reference (Type *obj) { hb_object_trace (obj, HB_FUNC); - if (unlikely (!obj || hb_object_is_inert (obj))) + if (unlikely (!obj || obj->header.is_inert ())) return obj; assert (hb_object_is_valid (obj)); obj->header.ref_count.inc (); @@ -267,7 +262,7 @@ template <typename Type> static inline bool hb_object_destroy (Type *obj) { hb_object_trace (obj, HB_FUNC); - if (unlikely (!obj || hb_object_is_inert (obj))) + if (unlikely (!obj || obj->header.is_inert ())) return false; assert (hb_object_is_valid (obj)); if (obj->header.ref_count.dec () != 1) @@ -284,7 +279,7 @@ static inline void hb_object_fini (Type *obj) if (user_data) { user_data->fini (); - free (user_data); + hb_free (user_data); user_data = nullptr; } } @@ -295,7 +290,7 @@ static inline bool hb_object_set_user_data (Type *obj, hb_destroy_func_t destroy, hb_bool_t replace) { - if (unlikely (!obj || hb_object_is_inert (obj))) + if (unlikely (!obj || obj->header.is_inert ())) return false; assert (hb_object_is_valid (obj)); @@ -303,14 +298,14 @@ retry: hb_user_data_array_t *user_data = obj->header.user_data.get (); if (unlikely (!user_data)) { - user_data = (hb_user_data_array_t *) calloc (sizeof (hb_user_data_array_t), 1); + user_data = (hb_user_data_array_t *) hb_calloc (sizeof (hb_user_data_array_t), 1); if (unlikely (!user_data)) return false; user_data->init (); if (unlikely (!obj->header.user_data.cmpexch (nullptr, user_data))) { user_data->fini (); - free (user_data); + hb_free (user_data); goto retry; } } @@ -322,7 +317,7 @@ template <typename Type> static inline void *hb_object_get_user_data (Type *obj, hb_user_data_key_t *key) { - if (unlikely (!obj || hb_object_is_inert (obj))) + if (unlikely (!obj || obj->header.is_inert ())) return nullptr; assert (hb_object_is_valid (obj)); hb_user_data_array_t *user_data = obj->header.user_data.get (); diff --git a/thirdparty/harfbuzz/src/hb-open-file.hh b/thirdparty/harfbuzz/src/hb-open-file.hh index 54c07ff13c..6eee5827c1 100644 --- a/thirdparty/harfbuzz/src/hb-open-file.hh +++ b/thirdparty/harfbuzz/src/hb-open-file.hh @@ -35,7 +35,6 @@ namespace OT { - /* * * The OpenType Font File @@ -102,7 +101,13 @@ typedef struct OpenTypeOffsetTable { Tag t; t = tag; - return tables.bfind (t, table_index, HB_BFIND_NOT_FOUND_STORE, Index::NOT_FOUND_INDEX); + /* Use lfind for small fonts; there are fonts that have unsorted table entries; + * those tend to work in other tools, so tolerate them. + * https://github.com/harfbuzz/harfbuzz/issues/3065 */ + if (tables.len < 16) + return tables.lfind (t, table_index, HB_NOT_FOUND_STORE, Index::NOT_FOUND_INDEX); + else + return tables.bfind (t, table_index, HB_NOT_FOUND_STORE, Index::NOT_FOUND_INDEX); } const TableRecord& get_table_by_tag (hb_tag_t tag) const { @@ -113,44 +118,53 @@ typedef struct OpenTypeOffsetTable public: - template <typename item_t> + template <typename Iterator, + hb_requires ((hb_is_source_of<Iterator, hb_pair_t<hb_tag_t, hb_blob_t *>>::value))> bool serialize (hb_serialize_context_t *c, hb_tag_t sfnt_tag, - hb_array_t<item_t> items) + Iterator it) { TRACE_SERIALIZE (this); /* Alloc 12 for the OTHeader. */ - if (unlikely (!c->extend_min (*this))) return_trace (false); + if (unlikely (!c->extend_min (this))) return_trace (false); /* Write sfntVersion (bytes 0..3). */ sfnt_version = sfnt_tag; /* Take space for numTables, searchRange, entrySelector, RangeShift * and the TableRecords themselves. */ - if (unlikely (!tables.serialize (c, items.length))) return_trace (false); + unsigned num_items = it.len (); + if (unlikely (!tables.serialize (c, num_items))) return_trace (false); const char *dir_end = (const char *) c->head; HBUINT32 *checksum_adjustment = nullptr; /* Write OffsetTables, alloc for and write actual table blobs. */ - for (unsigned int i = 0; i < tables.len; i++) + unsigned i = 0; + for (hb_pair_t<hb_tag_t, hb_blob_t*> entry : it) { - TableRecord &rec = tables.arrayZ[i]; - hb_blob_t *blob = items[i].blob; - rec.tag = items[i].tag; - rec.length = blob->length; - rec.offset.serialize (c, this); + hb_blob_t *blob = entry.second; + unsigned len = blob->length; /* Allocate room for the table and copy it. */ - char *start = (char *) c->allocate_size<void> (rec.length); + char *start = (char *) c->allocate_size<void> (len); if (unlikely (!start)) return false; - if (likely (rec.length)) - memcpy (start, blob->data, rec.length); + TableRecord &rec = tables.arrayZ[i]; + rec.tag = entry.first; + rec.length = len; + rec.offset = 0; + if (unlikely (!c->check_assign (rec.offset, + (unsigned) ((char *) start - (char *) this), + HB_SERIALIZE_ERROR_OFFSET_OVERFLOW))) + return_trace (false); + + if (likely (len)) + memcpy (start, blob->data, len); /* 4-byte alignment. */ c->align (4); const char *end = (const char *) c->head; - if (items[i].tag == HB_OT_TAG_head && + if (entry.first == HB_OT_TAG_head && (unsigned) (end - start) >= head::static_size) { head *h = (head *) start; @@ -159,6 +173,7 @@ typedef struct OpenTypeOffsetTable } rec.checkSum.set_for_data (start, end - start); + i++; } tables.qsort (); @@ -170,7 +185,7 @@ typedef struct OpenTypeOffsetTable /* The following line is a slower version of the following block. */ //checksum.set_for_data (this, (const char *) c->head - (const char *) this); checksum.set_for_data (this, dir_end - (const char *) this); - for (unsigned int i = 0; i < items.length; i++) + for (unsigned int i = 0; i < num_items; i++) { TableRecord &rec = tables.arrayZ[i]; checksum = checksum + rec.checkSum; @@ -218,7 +233,7 @@ struct TTCHeaderVersion1 Tag ttcTag; /* TrueType Collection ID string: 'ttcf' */ FixedVersion<>version; /* Version of the TTC Header (1.0), * 0x00010000u */ - LArrayOf<LOffsetTo<OpenTypeOffsetTable>> + Array32Of<Offset32To<OpenTypeOffsetTable>> table; /* Array of offsets to the OffsetTable for each font * from the beginning of the file */ public: @@ -295,7 +310,7 @@ struct ResourceRecord HBINT16 nameOffset; /* Offset from beginning of resource name list * to resource name, -1 means there is none. */ HBUINT8 attrs; /* Resource attributes */ - NNOffsetTo<LArrayOf<HBUINT8>, HBUINT24> + NNOffset24To<Array32Of<HBUINT8>> offset; /* Offset from beginning of data block to * data for this resource */ HBUINT32 reserved; /* Reserved for handle to resource */ @@ -330,7 +345,7 @@ struct ResourceTypeRecord protected: Tag tag; /* Resource type. */ HBUINT16 resCountM1; /* Number of resources minus 1. */ - NNOffsetTo<UnsizedArrayOf<ResourceRecord>> + NNOffset16To<UnsizedArrayOf<ResourceRecord>> resourcesZ; /* Offset from beginning of resource type list * to reference item list for this type. */ public: @@ -386,7 +401,7 @@ struct ResourceMap HBUINT32 reserved1; /* Reserved for handle to next resource map */ HBUINT16 resreved2; /* Reserved for file reference number */ HBUINT16 attrs; /* Resource fork attribute */ - NNOffsetTo<ArrayOfM1<ResourceTypeRecord>> + NNOffset16To<ArrayOfM1<ResourceTypeRecord>> typeList; /* Offset from beginning of map to * resource type list */ Offset16 nameList; /* Offset from beginning of map to @@ -418,10 +433,10 @@ struct ResourceForkHeader } protected: - LNNOffsetTo<UnsizedArrayOf<HBUINT8>> + NNOffset32To<UnsizedArrayOf<HBUINT8>> data; /* Offset from beginning of resource fork * to resource data */ - LNNOffsetTo<ResourceMap > + NNOffset32To<ResourceMap > map; /* Offset from beginning of resource fork * to resource map */ HBUINT32 dataLen; /* Length of resource data */ @@ -477,14 +492,15 @@ struct OpenTypeFontFile } } - template <typename item_t> + template <typename Iterator, + hb_requires ((hb_is_source_of<Iterator, hb_pair_t<hb_tag_t, hb_blob_t *>>::value))> bool serialize_single (hb_serialize_context_t *c, hb_tag_t sfnt_tag, - hb_array_t<item_t> items) + Iterator items) { TRACE_SERIALIZE (this); assert (sfnt_tag != TTCTag); - if (unlikely (!c->extend_min (*this))) return_trace (false); + if (unlikely (!c->extend_min (this))) return_trace (false); return_trace (u.fontFace.serialize (c, sfnt_tag, items)); } diff --git a/thirdparty/harfbuzz/src/hb-open-type.hh b/thirdparty/harfbuzz/src/hb-open-type.hh index dc0ae1d989..49653ce97e 100644 --- a/thirdparty/harfbuzz/src/hb-open-type.hh +++ b/thirdparty/harfbuzz/src/hb-open-type.hh @@ -196,6 +196,12 @@ DECLARE_NULL_NAMESPACE_BYTES (OT, Index); typedef Index NameID; +struct VarIdx : HBUINT32 { + static constexpr unsigned NO_VARIATION = 0xFFFFFFFFu; + VarIdx& operator = (uint32_t i) { HBUINT32::operator= (i); return *this; } +}; +DECLARE_NULL_NAMESPACE_BYTES (OT, VarIdx); + /* Offset, Null offset = 0 */ template <typename Type, bool has_null=true> struct Offset : Type @@ -206,18 +212,12 @@ struct Offset : Type bool is_null () const { return has_null && 0 == *this; } - void *serialize (hb_serialize_context_t *c, const void *base) - { - void *t = c->start_embed<void> (); - c->check_assign (*this, (unsigned) ((char *) t - (char *) base)); - return t; - } - public: DEFINE_SIZE_STATIC (sizeof (Type)); }; typedef Offset<HBUINT16> Offset16; +typedef Offset<HBUINT24> Offset24; typedef Offset<HBUINT32> Offset32; @@ -287,7 +287,7 @@ struct _hb_has_null<Type, true> static Type *get_crap () { return &Crap (Type); } }; -template <typename Type, typename OffsetType=HBUINT16, bool has_null=true> +template <typename Type, typename OffsetType, bool has_null=true> struct OffsetTo : Offset<OffsetType, has_null> { HB_DELETE_COPY_ASSIGN (OffsetTo); @@ -319,10 +319,6 @@ struct OffsetTo : Offset<OffsetType, has_null> hb_enable_if (hb_is_convertible (Base, void *))> friend Type& operator + (OffsetTo &offset, Base &&base) { return offset ((void *) base); } - Type& serialize (hb_serialize_context_t *c, const void *base) - { - return * (Type *) Offset<OffsetType>::serialize (c, base); - } template <typename ...Ts> bool serialize_subset (hb_subset_context_t *c, const OffsetTo& src, @@ -346,6 +342,23 @@ struct OffsetTo : Offset<OffsetType, has_null> return ret; } + + template <typename ...Ts> + bool serialize_serialize (hb_serialize_context_t *c, Ts&&... ds) + { + *this = 0; + + Type* obj = c->push<Type> (); + bool ret = obj->serialize (c, hb_forward<Ts> (ds)...); + + if (ret) + c->add_link (*this, c->pop_pack ()); + else + c->pop_discard (); + + return ret; + } + /* TODO: Somehow merge this with previous function into a serialize_dispatch(). */ /* Workaround clang bug: https://bugs.llvm.org/show_bug.cgi?id=23029 * Can't compile: whence = hb_serialize_context_t::Head followed by Ts&&... @@ -378,7 +391,7 @@ struct OffsetTo : Offset<OffsetType, has_null> TRACE_SANITIZE (this); if (unlikely (!c->check_struct (this))) return_trace (false); if (unlikely (this->is_null ())) return_trace (true); - if (unlikely (!c->check_range (base, *this))) return_trace (false); + if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false); return_trace (true); } @@ -401,12 +414,14 @@ struct OffsetTo : Offset<OffsetType, has_null> DEFINE_SIZE_STATIC (sizeof (OffsetType)); }; /* Partial specializations. */ -template <typename Type, bool has_null=true> -using LOffsetTo = OffsetTo<Type, HBUINT32, has_null>; -template <typename Type, typename OffsetType=HBUINT16> -using NNOffsetTo = OffsetTo<Type, OffsetType, false>; -template <typename Type> -using LNNOffsetTo = LOffsetTo<Type, false>; +template <typename Type, bool has_null=true> using Offset16To = OffsetTo<Type, HBUINT16, has_null>; +template <typename Type, bool has_null=true> using Offset24To = OffsetTo<Type, HBUINT24, has_null>; +template <typename Type, bool has_null=true> using Offset32To = OffsetTo<Type, HBUINT32, has_null>; + +template <typename Type, typename OffsetType> using NNOffsetTo = OffsetTo<Type, OffsetType, false>; +template <typename Type> using NNOffset16To = Offset16To<Type, false>; +template <typename Type> using NNOffset24To = Offset24To<Type, false>; +template <typename Type> using NNOffset32To = Offset32To<Type, false>; /* @@ -453,8 +468,10 @@ struct UnsizedArrayOf const Type &lsearch (unsigned int len, const T &x, const Type ¬_found = Null (Type)) const { return *as_array (len).lsearch (x, ¬_found); } template <typename T> - bool lfind (unsigned int len, const T &x, unsigned *pos = nullptr) const - { return as_array (len).lfind (x, pos); } + bool lfind (unsigned int len, const T &x, unsigned int *i = nullptr, + hb_not_found_t not_found = HB_NOT_FOUND_DONT_STORE, + unsigned int to_store = (unsigned int) -1) const + { return as_array (len).lfind (x, i, not_found, to_store); } void qsort (unsigned int len, unsigned int start = 0, unsigned int end = (unsigned int) -1) { as_array (len).qsort (start, end); } @@ -462,7 +479,7 @@ struct UnsizedArrayOf bool serialize (hb_serialize_context_t *c, unsigned int items_len) { TRACE_SERIALIZE (this); - if (unlikely (!c->extend (*this, items_len))) return_trace (false); + if (unlikely (!c->extend (this, items_len))) return_trace (false); return_trace (true); } template <typename Iterator, @@ -513,11 +530,11 @@ struct UnsizedArrayOf /* Unsized array of offset's */ template <typename Type, typename OffsetType, bool has_null=true> -using UnsizedOffsetArrayOf = UnsizedArrayOf<OffsetTo<Type, OffsetType, has_null>>; +using UnsizedArray16OfOffsetTo = UnsizedArrayOf<OffsetTo<Type, OffsetType, has_null>>; /* Unsized array of offsets relative to the beginning of the array itself. */ template <typename Type, typename OffsetType, bool has_null=true> -struct UnsizedOffsetListOf : UnsizedOffsetArrayOf<Type, OffsetType, has_null> +struct UnsizedListOfOffset16To : UnsizedArray16OfOffsetTo<Type, OffsetType, has_null> { const Type& operator [] (int i_) const { @@ -538,7 +555,7 @@ struct UnsizedOffsetListOf : UnsizedOffsetArrayOf<Type, OffsetType, has_null> bool sanitize (hb_sanitize_context_t *c, unsigned int count, Ts&&... ds) const { TRACE_SANITIZE (this); - return_trace ((UnsizedOffsetArrayOf<Type, OffsetType, has_null> + return_trace ((UnsizedArray16OfOffsetTo<Type, OffsetType, has_null> ::sanitize (c, count, this, hb_forward<Ts> (ds)...))); } }; @@ -562,14 +579,14 @@ struct SortedUnsizedArrayOf : UnsizedArrayOf<Type> { return *as_array (len).bsearch (x, ¬_found); } template <typename T> bool bfind (unsigned int len, const T &x, unsigned int *i = nullptr, - hb_bfind_not_found_t not_found = HB_BFIND_NOT_FOUND_DONT_STORE, + hb_not_found_t not_found = HB_NOT_FOUND_DONT_STORE, unsigned int to_store = (unsigned int) -1) const { return as_array (len).bfind (x, i, not_found, to_store); } }; /* An array with a number of elements. */ -template <typename Type, typename LenType=HBUINT16> +template <typename Type, typename LenType> struct ArrayOf { typedef Type item_t; @@ -617,17 +634,32 @@ struct ArrayOf hb_array_t<Type> sub_array (unsigned int start_offset, unsigned int *count = nullptr /* IN/OUT */) { return as_array ().sub_array (start_offset, count); } - hb_success_t serialize (hb_serialize_context_t *c, unsigned items_len) + template <typename T> + Type &lsearch (const T &x, Type ¬_found = Crap (Type)) + { return *as_array ().lsearch (x, ¬_found); } + template <typename T> + const Type &lsearch (const T &x, const Type ¬_found = Null (Type)) const + { return *as_array ().lsearch (x, ¬_found); } + template <typename T> + bool lfind (const T &x, unsigned int *i = nullptr, + hb_not_found_t not_found = HB_NOT_FOUND_DONT_STORE, + unsigned int to_store = (unsigned int) -1) const + { return as_array ().lfind (x, i, not_found, to_store); } + + void qsort (unsigned int start = 0, unsigned int end = (unsigned int) -1) + { as_array ().qsort (start, end); } + + HB_NODISCARD bool serialize (hb_serialize_context_t *c, unsigned items_len) { TRACE_SERIALIZE (this); - if (unlikely (!c->extend_min (*this))) return_trace (false); - c->check_assign (len, items_len); - if (unlikely (!c->extend (*this))) return_trace (false); + if (unlikely (!c->extend_min (this))) return_trace (false); + c->check_assign (len, items_len, HB_SERIALIZE_ERROR_ARRAY_OVERFLOW); + if (unlikely (!c->extend (this))) return_trace (false); return_trace (true); } template <typename Iterator, hb_requires (hb_is_source_of (Iterator, Type))> - hb_success_t serialize (hb_serialize_context_t *c, Iterator items) + HB_NODISCARD bool serialize (hb_serialize_context_t *c, Iterator items) { TRACE_SERIALIZE (this); unsigned count = items.len (); @@ -643,7 +675,7 @@ struct ArrayOf { TRACE_SERIALIZE (this); len++; - if (unlikely (!len || !c->extend (*this))) + if (unlikely (!len || !c->extend (this))) { len--; return_trace (nullptr); @@ -656,7 +688,7 @@ struct ArrayOf TRACE_SERIALIZE (this); auto *out = c->start_embed (this); if (unlikely (!c->extend_min (out))) return_trace (nullptr); - c->check_assign (out->len, len); + c->check_assign (out->len, len, HB_SERIALIZE_ERROR_ARRAY_OVERFLOW); if (unlikely (!as_array ().copy (c))) return_trace (nullptr); return_trace (out); } @@ -674,19 +706,6 @@ struct ArrayOf return_trace (true); } - template <typename T> - Type &lsearch (const T &x, Type ¬_found = Crap (Type)) - { return *as_array ().lsearch (x, ¬_found); } - template <typename T> - const Type &lsearch (const T &x, const Type ¬_found = Null (Type)) const - { return *as_array ().lsearch (x, ¬_found); } - template <typename T> - bool lfind (const T &x, unsigned *pos = nullptr) const - { return as_array ().lfind (x, pos); } - - void qsort (unsigned int start = 0, unsigned int end = (unsigned int) -1) - { as_array ().qsort (start, end); } - bool sanitize_shallow (hb_sanitize_context_t *c) const { TRACE_SANITIZE (this); @@ -699,21 +718,18 @@ struct ArrayOf public: DEFINE_SIZE_ARRAY (sizeof (LenType), arrayZ); }; -template <typename Type> -using LArrayOf = ArrayOf<Type, HBUINT32>; +template <typename Type> using Array16Of = ArrayOf<Type, HBUINT16>; +template <typename Type> using Array32Of = ArrayOf<Type, HBUINT32>; using PString = ArrayOf<HBUINT8, HBUINT8>; /* Array of Offset's */ -template <typename Type> -using OffsetArrayOf = ArrayOf<OffsetTo<Type, HBUINT16>>; -template <typename Type> -using LOffsetArrayOf = ArrayOf<OffsetTo<Type, HBUINT32>>; -template <typename Type> -using LOffsetLArrayOf = ArrayOf<OffsetTo<Type, HBUINT32>, HBUINT32>; +template <typename Type> using Array16OfOffset16To = ArrayOf<OffsetTo<Type, HBUINT16>, HBUINT16>; +template <typename Type> using Array16OfOffset32To = ArrayOf<OffsetTo<Type, HBUINT32>, HBUINT16>; +template <typename Type> using Array32OfOffset32To = ArrayOf<OffsetTo<Type, HBUINT32>, HBUINT32>; /* Array of offsets relative to the beginning of the array itself. */ template <typename Type> -struct OffsetListOf : OffsetArrayOf<Type> +struct List16OfOffset16To : Array16OfOffset16To<Type> { const Type& operator [] (int i_) const { @@ -731,7 +747,7 @@ struct OffsetListOf : OffsetArrayOf<Type> bool subset (hb_subset_context_t *c) const { TRACE_SUBSET (this); - struct OffsetListOf<Type> *out = c->serializer->embed (*this); + struct List16OfOffset16To<Type> *out = c->serializer->embed (*this); if (unlikely (!out)) return_trace (false); unsigned int count = this->len; for (unsigned int i = 0; i < count; i++) @@ -743,7 +759,7 @@ struct OffsetListOf : OffsetArrayOf<Type> bool sanitize (hb_sanitize_context_t *c, Ts&&... ds) const { TRACE_SANITIZE (this); - return_trace (OffsetArrayOf<Type>::sanitize (c, this, hb_forward<Ts> (ds)...)); + return_trace (Array16OfOffset16To<Type>::sanitize (c, this, hb_forward<Ts> (ds)...)); } }; @@ -786,9 +802,9 @@ struct HeadlessArrayOf bool serialize (hb_serialize_context_t *c, unsigned int items_len) { TRACE_SERIALIZE (this); - if (unlikely (!c->extend_min (*this))) return_trace (false); - c->check_assign (lenP1, items_len + 1); - if (unlikely (!c->extend (*this))) return_trace (false); + if (unlikely (!c->extend_min (this))) return_trace (false); + c->check_assign (lenP1, items_len + 1, HB_SERIALIZE_ERROR_ARRAY_OVERFLOW); + if (unlikely (!c->extend (this))) return_trace (false); return_trace (true); } template <typename Iterator, @@ -859,6 +875,7 @@ struct ArrayOfM1 { TRACE_SANITIZE (this); if (unlikely (!sanitize_shallow (c))) return_trace (false); + if (!sizeof... (Ts) && hb_is_trivially_copyable (Type)) return_trace (true); unsigned int count = lenM1 + 1; for (unsigned int i = 0; i < count; i++) if (unlikely (!c->dispatch (arrayZ[i], hb_forward<Ts> (ds)...))) @@ -882,7 +899,7 @@ struct ArrayOfM1 }; /* An array with sorted elements. Supports binary searching. */ -template <typename Type, typename LenType=HBUINT16> +template <typename Type, typename LenType> struct SortedArrayOf : ArrayOf<Type, LenType> { hb_sorted_array_t< Type> as_array () { return hb_sorted_array (this->arrayZ, this->len); } @@ -928,11 +945,14 @@ struct SortedArrayOf : ArrayOf<Type, LenType> { return *as_array ().bsearch (x, ¬_found); } template <typename T> bool bfind (const T &x, unsigned int *i = nullptr, - hb_bfind_not_found_t not_found = HB_BFIND_NOT_FOUND_DONT_STORE, + hb_not_found_t not_found = HB_NOT_FOUND_DONT_STORE, unsigned int to_store = (unsigned int) -1) const { return as_array ().bfind (x, i, not_found, to_store); } }; +template <typename Type> using SortedArray16Of = SortedArrayOf<Type, HBUINT16>; +template <typename Type> using SortedArray32Of = SortedArrayOf<Type, HBUINT32>; + /* * Binary-search arrays */ diff --git a/thirdparty/harfbuzz/src/hb-ot-cff-common.hh b/thirdparty/harfbuzz/src/hb-ot-cff-common.hh index 864a27f458..eaaf5e12ec 100644 --- a/thirdparty/harfbuzz/src/hb-ot-cff-common.hh +++ b/thirdparty/harfbuzz/src/hb-ot-cff-common.hh @@ -126,7 +126,7 @@ struct CFFIndex else { /* serialize CFFIndex header */ - if (unlikely (!c->extend_min (*this))) return_trace (false); + if (unlikely (!c->extend_min (this))) return_trace (false); this->count = byteArray.length; this->offSize = offSize_; if (unlikely (!c->allocate_size<HBUINT8> (offSize_ * (byteArray.length + 1)))) @@ -214,7 +214,7 @@ struct CFFIndex unsigned off_size = calcOffSize (total); /* serialize CFFIndex header */ - if (unlikely (!c->extend_min (*this))) return_trace (false); + if (unlikely (!c->extend_min (this))) return_trace (false); this->count = it.len (); this->offSize = off_size; if (unlikely (!c->allocate_size<HBUINT8> (off_size * (it.len () + 1)))) @@ -335,7 +335,7 @@ struct CFFIndexOf : CFFIndex<COUNT> { TRACE_SERIALIZE (this); /* serialize CFFIndex header */ - if (unlikely (!c->extend_min (*this))) return_trace (false); + if (unlikely (!c->extend_min (this))) return_trace (false); this->count = dataArrayLen; this->offSize = offSize_; if (unlikely (!c->allocate_size<HBUINT8> (offSize_ * (dataArrayLen + 1)))) diff --git a/thirdparty/harfbuzz/src/hb-ot-cff1-table.hh b/thirdparty/harfbuzz/src/hb-ot-cff1-table.hh index 7228f77727..5dd183e3a0 100644 --- a/thirdparty/harfbuzz/src/hb-ot-cff1-table.hh +++ b/thirdparty/harfbuzz/src/hb-ot-cff1-table.hh @@ -187,7 +187,7 @@ struct Encoding const hb_vector_t<code_pair_t>& supp_codes) { TRACE_SERIALIZE (this); - Encoding *dest = c->extend_min (*this); + Encoding *dest = c->extend_min (this); if (unlikely (!dest)) return_trace (false); dest->format = format | ((supp_codes.length > 0) ? 0x80 : 0); switch (format) { @@ -457,7 +457,7 @@ struct Charset const hb_vector_t<code_pair_t>& sid_ranges) { TRACE_SERIALIZE (this); - Charset *dest = c->extend_min (*this); + Charset *dest = c->extend_min (this); if (unlikely (!dest)) return_trace (false); dest->format = format; switch (format) @@ -713,6 +713,7 @@ struct cff1_top_dict_opset_t : top_dict_opset_t<cff1_top_dict_val_t> case OpCode_Notice: case OpCode_Copyright: case OpCode_FullName: + case OpCode_FontName: case OpCode_FamilyName: case OpCode_Weight: case OpCode_PostScript: @@ -1390,7 +1391,7 @@ struct cff1 public: FixedVersion<HBUINT8> version; /* Version of CFF table. set to 0x0100u */ - OffsetTo<CFF1NameIndex, HBUINT8> nameIndex; /* headerSize = Offset to Name INDEX. */ + NNOffsetTo<CFF1NameIndex, HBUINT8> nameIndex; /* headerSize = Offset to Name INDEX. */ HBUINT8 offSize; /* offset size (unused?) */ public: diff --git a/thirdparty/harfbuzz/src/hb-ot-cmap-table.hh b/thirdparty/harfbuzz/src/hb-ot-cmap-table.hh index 878e02ff17..b904bb46a8 100644 --- a/thirdparty/harfbuzz/src/hb-ot-cmap-table.hh +++ b/thirdparty/harfbuzz/src/hb-ot-cmap-table.hh @@ -49,6 +49,12 @@ struct CmapSubtableFormat0 *glyph = gid; return true; } + + unsigned get_language () const + { + return language; + } + void collect_unicodes (hb_set_t *out) const { for (unsigned int i = 0; i < 256; i++) @@ -212,29 +218,24 @@ struct CmapSubtableFormat4 HBINT16 *idDelta, unsigned segcount) { + hb_hashmap_t<hb_codepoint_t, hb_codepoint_t> cp_to_gid; + + it | hb_sink (cp_to_gid); + HBUINT16 *idRangeOffset = c->allocate_size<HBUINT16> (HBUINT16::static_size * segcount); if (unlikely (!c->check_success (idRangeOffset))) return nullptr; if (unlikely ((char *)idRangeOffset - (char *)idDelta != (int) segcount * (int) HBINT16::static_size)) return nullptr; - + hb_range (segcount) - | hb_filter ([&] (const unsigned _) { return idDelta[_] == 0; }) - | hb_apply ([&] (const unsigned i) - { - idRangeOffset[i] = 2 * (c->start_embed<HBUINT16> () - idRangeOffset - i); - - + it - | hb_filter ([&] (const hb_item_type<Iterator> _) { return _.first >= startCode[i] && _.first <= endCode[i]; }) - | hb_apply ([&] (const hb_item_type<Iterator> _) - { - HBUINT16 glyID; - glyID = _.second; - c->copy<HBUINT16> (glyID); - }) - ; - - - }) - ; + for (unsigned i : + hb_range (segcount) + | hb_filter ([&] (const unsigned _) { return idDelta[_] == 0; })) + { + idRangeOffset[i] = 2 * (c->start_embed<HBUINT16> () - idRangeOffset - i); + for (hb_codepoint_t cp = startCode[i]; cp <= endCode[i]; cp++) + { + HBUINT16 gid; + gid = cp_to_gid[cp]; + c->copy<HBUINT16> (gid); + } + } return idRangeOffset; } @@ -253,7 +254,7 @@ struct CmapSubtableFormat4 if (format4_iter.len () == 0) return; unsigned table_initpos = c->length (); - if (unlikely (!c->extend_min (*this))) return; + if (unlikely (!c->extend_min (this))) return; this->format = 4; //serialize endCode[] @@ -276,7 +277,17 @@ struct CmapSubtableFormat4 HBUINT16 *idRangeOffset = serialize_rangeoffset_glyid (c, format4_iter, endCode, startCode, idDelta, segcount); if (unlikely (!c->check_success (idRangeOffset))) return; - if (unlikely (!c->check_assign(this->length, c->length () - table_initpos))) return; + this->length = c->length () - table_initpos; + if ((long long) this->length != (long long) c->length () - table_initpos) + { + // Length overflowed. Discard the current object before setting the error condition, otherwise + // discard is a noop which prevents the higher level code from reverting the serializer to the + // pre-error state in cmap4 overflow handling code. + c->pop_discard (); + c->err (HB_SERIALIZE_ERROR_INT_OVERFLOW); + return; + } + this->segCountX2 = segcount * 2; this->entrySelector = hb_max (1u, hb_bit_storage (segcount)) - 1; this->searchRange = 2 * (1u << this->entrySelector); @@ -285,6 +296,11 @@ struct CmapSubtableFormat4 : 0; } + unsigned get_language () const + { + return language; + } + struct accelerator_t { accelerator_t () {} @@ -547,6 +563,12 @@ struct CmapSubtableTrimmed *glyph = gid; return true; } + + unsigned get_language () const + { + return language; + } + void collect_unicodes (hb_set_t *out) const { hb_codepoint_t start = startCharCode; @@ -606,6 +628,11 @@ struct CmapSubtableLongSegmented return true; } + unsigned get_language () const + { + return language; + } + void collect_unicodes (hb_set_t *out, unsigned int num_glyphs) const { for (unsigned int i = 0; i < this->groups.len; i++) @@ -670,7 +697,7 @@ struct CmapSubtableLongSegmented HBUINT16 reserved; /* Reserved; set to 0. */ HBUINT32 length; /* Byte length of this subtable. */ HBUINT32 language; /* Ignore. */ - SortedArrayOf<CmapSubtableLongGroup, HBUINT32> + SortedArray32Of<CmapSubtableLongGroup> groups; /* Groupings. */ public: DEFINE_SIZE_ARRAY (16, groups); @@ -691,7 +718,7 @@ struct CmapSubtableFormat12 : CmapSubtableLongSegmented<CmapSubtableFormat12> { if (it.len () == 0) return; unsigned table_initpos = c->length (); - if (unlikely (!c->extend_min (*this))) return; + if (unlikely (!c->extend_min (this))) return; hb_codepoint_t startCharCode = 0xFFFF, endCharCode = 0xFFFF; hb_codepoint_t glyphID = 0; @@ -784,7 +811,7 @@ struct UnicodeValueRange DEFINE_SIZE_STATIC (4); }; -struct DefaultUVS : SortedArrayOf<UnicodeValueRange, HBUINT32> +struct DefaultUVS : SortedArray32Of<UnicodeValueRange> { void collect_unicodes (hb_set_t *out) const { @@ -850,7 +877,9 @@ struct DefaultUVS : SortedArrayOf<UnicodeValueRange, HBUINT32> } else { - if (unlikely (!c->check_assign (out->len, (c->length () - init_len) / UnicodeValueRange::static_size))) return nullptr; + if (unlikely (!c->check_assign (out->len, + (c->length () - init_len) / UnicodeValueRange::static_size, + HB_SERIALIZE_ERROR_INT_OVERFLOW))) return nullptr; return out; } } @@ -876,23 +905,21 @@ struct UVSMapping DEFINE_SIZE_STATIC (5); }; -struct NonDefaultUVS : SortedArrayOf<UVSMapping, HBUINT32> +struct NonDefaultUVS : SortedArray32Of<UVSMapping> { void collect_unicodes (hb_set_t *out) const { - unsigned int count = len; - for (unsigned int i = 0; i < count; i++) - out->add (arrayZ[i].unicodeValue); + for (const auto& a : as_array ()) + out->add (a.unicodeValue); } void collect_mapping (hb_set_t *unicodes, /* OUT */ hb_map_t *mapping /* OUT */) const { - unsigned count = len; - for (unsigned i = 0; i < count; i++) + for (const auto& a : as_array ()) { - hb_codepoint_t unicode = arrayZ[i].unicodeValue; - hb_codepoint_t glyphid = arrayZ[i].glyphID; + hb_codepoint_t unicode = a.unicodeValue; + hb_codepoint_t glyphid = a.glyphID; unicodes->add (unicode); mapping->set (unicode, glyphid); } @@ -1041,9 +1068,9 @@ struct VariationSelectorRecord } HBUINT24 varSelector; /* Variation selector. */ - LOffsetTo<DefaultUVS> + Offset32To<DefaultUVS> defaultUVS; /* Offset to Default UVS Table. May be 0. */ - LOffsetTo<NonDefaultUVS> + Offset32To<NonDefaultUVS> nonDefaultUVS; /* Offset to Non-Default UVS Table. May be 0. */ public: DEFINE_SIZE_STATIC (11); @@ -1058,9 +1085,8 @@ struct CmapSubtableFormat14 void collect_variation_selectors (hb_set_t *out) const { - unsigned int count = record.len; - for (unsigned int i = 0; i < count; i++) - out->add (record.arrayZ[i].varSelector); + for (const auto& a : record.as_array ()) + out->add (a.varSelector); } void collect_variation_unicodes (hb_codepoint_t variation_selector, hb_set_t *out) const @@ -1076,7 +1102,7 @@ struct CmapSubtableFormat14 unsigned table_initpos = c->length (); const char* init_tail = c->tail; - if (unlikely (!c->extend_min (*this))) return; + if (unlikely (!c->extend_min (this))) return; this->format = 14; auto src_tbl = reinterpret_cast<const CmapSubtableFormat14*> (base); @@ -1112,10 +1138,12 @@ struct CmapSubtableFormat14 return; int tail_len = init_tail - c->tail; - c->check_assign (this->length, c->length () - table_initpos + tail_len); + c->check_assign (this->length, c->length () - table_initpos + tail_len, + HB_SERIALIZE_ERROR_INT_OVERFLOW); c->check_assign (this->record.len, (c->length () - table_initpos - CmapSubtableFormat14::min_size) / - VariationSelectorRecord::static_size); + VariationSelectorRecord::static_size, + HB_SERIALIZE_ERROR_INT_OVERFLOW); /* Correct the incorrect write order by reversing the order of the variation records array. */ @@ -1180,7 +1208,7 @@ struct CmapSubtableFormat14 protected: HBUINT16 format; /* Format number is set to 14. */ HBUINT32 length; /* Byte length of this subtable. */ - SortedArrayOf<VariationSelectorRecord, HBUINT32> + SortedArray32Of<VariationSelectorRecord> record; /* Variation selector records; sorted * in increasing order of `varSelector'. */ public: @@ -1235,6 +1263,20 @@ struct CmapSubtable } } + unsigned get_language () const + { + switch (u.format) { + case 0: return u.format0 .get_language (); + case 4: return u.format4 .get_language (); + case 6: return u.format6 .get_language (); + case 10: return u.format10.get_language (); + case 12: return u.format12.get_language (); + case 13: return u.format13.get_language (); + case 14: + default: return 0; + } + } + template<typename Iterator, hb_requires (hb_is_iterator (Iterator))> void serialize (hb_serialize_context_t *c, @@ -1338,7 +1380,7 @@ struct EncodingRecord HBUINT16 platformID; /* Platform ID. */ HBUINT16 encodingID; /* Platform-specific encoding ID. */ - LOffsetTo<CmapSubtable> + Offset32To<CmapSubtable> subtable; /* Byte offset from beginning of table to the subtable for this encoding. */ public: DEFINE_SIZE_STATIC (8); @@ -1350,58 +1392,112 @@ struct cmap template<typename Iterator, typename EncodingRecIter, hb_requires (hb_is_iterator (EncodingRecIter))> - void serialize (hb_serialize_context_t *c, + bool serialize (hb_serialize_context_t *c, Iterator it, EncodingRecIter encodingrec_iter, const void *base, - const hb_subset_plan_t *plan) + const hb_subset_plan_t *plan, + bool drop_format_4 = false) { - if (unlikely (!c->extend_min ((*this)))) return; + if (unlikely (!c->extend_min ((*this)))) return false; this->version = 0; unsigned format4objidx = 0, format12objidx = 0, format14objidx = 0; + auto snap = c->snapshot (); for (const EncodingRecord& _ : encodingrec_iter) { + if (c->in_error ()) + return false; + unsigned format = (base+_.subtable).u.format; - if (!plan->glyphs_requested->is_empty ()) + if (format != 4 && format != 12 && format != 14) continue; + + hb_set_t unicodes_set; + (base+_.subtable).collect_unicodes (&unicodes_set); + + if (!drop_format_4 && format == 4) { - hb_set_t unicodes_set; - hb_map_t cp_glyphid_map; - (base+_.subtable).collect_mapping (&unicodes_set, &cp_glyphid_map); - - auto table_iter = - + hb_zip (unicodes_set.iter(), unicodes_set.iter() | hb_map(cp_glyphid_map)) - | hb_filter (plan->_glyphset, hb_second) - | hb_filter ([plan] (const hb_pair_t<hb_codepoint_t, hb_codepoint_t>& p) - { - return plan->unicodes->has (p.first) || - plan->glyphs_requested->has (p.second); - }) - | hb_map ([plan] (const hb_pair_t<hb_codepoint_t, hb_codepoint_t>& p_org) - { - return hb_pair_t<hb_codepoint_t, hb_codepoint_t> (p_org.first, plan->glyph_map->get(p_org.second)); - }) - ; - - if (format == 4) c->copy (_, table_iter, 4u, base, plan, &format4objidx); - else if (format == 12) c->copy (_, table_iter, 12u, base, plan, &format12objidx); - else if (format == 14) c->copy (_, table_iter, 14u, base, plan, &format14objidx); + c->copy (_, + it | hb_filter (unicodes_set, hb_first), 4u, base, plan, &format4objidx); + if (c->in_error () && c->only_overflow ()) + { + // cmap4 overflowed, reset and retry serialization without format 4 subtables. + c->revert (snap); + return serialize (c, it, + encodingrec_iter, + base, + plan, + true); + } } - /* when --gids option is not used, we iterate input unicodes instead of - * all codepoints in each subtable, which is more efficient */ - else + + else if (format == 12) { - hb_set_t unicodes_set; - (base+_.subtable).collect_unicodes (&unicodes_set); + if (_can_drop (_, unicodes_set, base, + it | hb_map (hb_first), encodingrec_iter)) continue; + c->copy (_, + it | hb_filter (unicodes_set, hb_first), 12u, base, plan, &format12objidx); + } + else if (format == 14) c->copy (_, it, 14u, base, plan, &format14objidx); + } + c->check_assign(this->encodingRecord.len, + (c->length () - cmap::min_size)/EncodingRecord::static_size, + HB_SERIALIZE_ERROR_INT_OVERFLOW); - if (format == 4) c->copy (_, + it | hb_filter (unicodes_set, hb_first), 4u, base, plan, &format4objidx); - else if (format == 12) c->copy (_, + it | hb_filter (unicodes_set, hb_first), 12u, base, plan, &format12objidx); - else if (format == 14) c->copy (_, it, 14u, base, plan, &format14objidx); + // Fail if format 4 was dropped and there is no cmap12. + return !drop_format_4 || format12objidx; + } + + template<typename Iterator, typename EncodingRecordIterator, + hb_requires (hb_is_iterator (Iterator)), + hb_requires (hb_is_iterator (EncodingRecordIterator))> + bool _can_drop (const EncodingRecord& cmap12, + const hb_set_t& cmap12_unicodes, + const void* base, + Iterator subset_unicodes, + EncodingRecordIterator encoding_records) + { + for (auto cp : + subset_unicodes | hb_filter (cmap12_unicodes)) + { + if (cp >= 0x10000) return false; + } + + unsigned target_platform; + unsigned target_encoding; + unsigned target_language = (base+cmap12.subtable).get_language (); + + if (cmap12.platformID == 0 && cmap12.encodingID == 4) + { + target_platform = 0; + target_encoding = 3; + } else if (cmap12.platformID == 3 && cmap12.encodingID == 10) { + target_platform = 3; + target_encoding = 1; + } else { + return false; + } + + for (const auto& _ : encoding_records) + { + if (_.platformID != target_platform + || _.encodingID != target_encoding + || (base+_.subtable).get_language() != target_language) + continue; + + hb_set_t sibling_unicodes; + (base+_.subtable).collect_unicodes (&sibling_unicodes); + + auto cmap12 = + subset_unicodes | hb_filter (cmap12_unicodes); + auto sibling = + subset_unicodes | hb_filter (sibling_unicodes); + for (; cmap12 && sibling; cmap12++, sibling++) + { + unsigned a = *cmap12; + unsigned b = *sibling; + if (a != b) return false; } + + return !cmap12 && !sibling; } - c->check_assign(this->encodingRecord.len, (c->length () - cmap::min_size)/EncodingRecord::static_size); + return false; } void closure_glyphs (const hb_set_t *unicodes, @@ -1468,8 +1564,8 @@ struct cmap | hb_filter ([&] (const hb_pair_t<hb_codepoint_t, hb_codepoint_t> _) { return (_.second != HB_MAP_VALUE_INVALID); }) ; - cmap_prime->serialize (c->serializer, it, encodingrec_iter, this, c->plan); - return_trace (true); + + return_trace (cmap_prime->serialize (c->serializer, it, encodingrec_iter, this, c->plan)); } const CmapSubtable *find_best_subtable (bool *symbol = nullptr) const @@ -1697,7 +1793,7 @@ struct cmap protected: HBUINT16 version; /* Table version number (0). */ - SortedArrayOf<EncodingRecord> + SortedArray16Of<EncodingRecord> encodingRecord; /* Encoding tables. */ public: DEFINE_SIZE_ARRAY (4, encodingRecord); diff --git a/thirdparty/harfbuzz/src/hb-ot-color-cbdt-table.hh b/thirdparty/harfbuzz/src/hb-ot-color-cbdt-table.hh index e285acec3d..6c31d1b53e 100644 --- a/thirdparty/harfbuzz/src/hb-ot-color-cbdt-table.hh +++ b/thirdparty/harfbuzz/src/hb-ot-color-cbdt-table.hh @@ -510,7 +510,7 @@ struct IndexSubtableRecord HBGlyphID firstGlyphIndex; HBGlyphID lastGlyphIndex; - LOffsetTo<IndexSubtable> offsetToSubtable; + Offset32To<IndexSubtable> offsetToSubtable; public: DEFINE_SIZE_STATIC (8); }; @@ -672,7 +672,7 @@ struct BitmapSizeTable } protected: - LNNOffsetTo<IndexSubtableArray> + NNOffset32To<IndexSubtableArray> indexSubtableArrayOffset; HBUINT32 indexTablesSize; HBUINT32 numberOfIndexSubtables; @@ -697,7 +697,7 @@ struct BitmapSizeTable struct GlyphBitmapDataFormat17 { SmallGlyphMetrics glyphMetrics; - LArrayOf<HBUINT8> data; + Array32Of<HBUINT8> data; public: DEFINE_SIZE_ARRAY (9, data); }; @@ -705,14 +705,14 @@ struct GlyphBitmapDataFormat17 struct GlyphBitmapDataFormat18 { BigGlyphMetrics glyphMetrics; - LArrayOf<HBUINT8> data; + Array32Of<HBUINT8> data; public: DEFINE_SIZE_ARRAY (12, data); }; struct GlyphBitmapDataFormat19 { - LArrayOf<HBUINT8> data; + Array32Of<HBUINT8> data; public: DEFINE_SIZE_ARRAY (4, data); }; @@ -738,7 +738,7 @@ struct CBLC cbdt_prime->length, HB_MEMORY_MODE_WRITABLE, cbdt_prime->arrayZ, - free); + hb_free); cbdt_prime->init (); // Leak arrayZ to the blob. bool ret = c->plan->add_table (HB_OT_TAG_CBDT, cbdt_prime_blob); hb_blob_destroy (cbdt_prime_blob); @@ -798,7 +798,7 @@ struct CBLC protected: FixedVersion<> version; - LArrayOf<BitmapSizeTable> sizeTables; + Array32Of<BitmapSizeTable> sizeTables; public: DEFINE_SIZE_ARRAY (8, sizeTables); }; diff --git a/thirdparty/harfbuzz/src/hb-ot-color-colr-table.hh b/thirdparty/harfbuzz/src/hb-ot-color-colr-table.hh index e2a1ff4662..007ff3f47b 100644 --- a/thirdparty/harfbuzz/src/hb-ot-color-colr-table.hh +++ b/thirdparty/harfbuzz/src/hb-ot-color-colr-table.hh @@ -29,6 +29,7 @@ #define HB_OT_COLOR_COLR_TABLE_HH #include "hb-open-type.hh" +#include "hb-ot-layout-common.hh" /* * COLR -- Color @@ -36,9 +37,78 @@ */ #define HB_OT_TAG_COLR HB_TAG('C','O','L','R') +#ifndef COLRV1_MAX_NESTING_LEVEL +#define COLRV1_MAX_NESTING_LEVEL 100 +#endif + +#ifndef COLRV1_ENABLE_SUBSETTING +#define COLRV1_ENABLE_SUBSETTING 0 +#endif namespace OT { +struct COLR; +struct hb_colrv1_closure_context_t : + hb_dispatch_context_t<hb_colrv1_closure_context_t> +{ + template <typename T> + return_t dispatch (const T &obj) + { + if (unlikely (nesting_level_left == 0)) + return hb_empty_t (); + + if (paint_visited (&obj)) + return hb_empty_t (); + + nesting_level_left--; + obj.closurev1 (this); + nesting_level_left++; + return hb_empty_t (); + } + static return_t default_return_value () { return hb_empty_t (); } + + bool paint_visited (const void *paint) + { + hb_codepoint_t delta = (hb_codepoint_t) ((uintptr_t) paint - (uintptr_t) base); + if (visited_paint.has (delta)) + return true; + + visited_paint.add (delta); + return false; + } + + const COLR* get_colr_table () const + { return reinterpret_cast<const COLR *> (base); } + + void add_glyph (unsigned glyph_id) + { glyphs->add (glyph_id); } + + void add_layer_indices (unsigned first_layer_index, unsigned num_of_layers) + { layer_indices->add_range (first_layer_index, first_layer_index + num_of_layers - 1); } + + void add_palette_index (unsigned palette_index) + { palette_indices->add (palette_index); } + + public: + const void *base; + hb_set_t visited_paint; + hb_set_t *glyphs; + hb_set_t *layer_indices; + hb_set_t *palette_indices; + unsigned nesting_level_left; + + hb_colrv1_closure_context_t (const void *base_, + hb_set_t *glyphs_, + hb_set_t *layer_indices_, + hb_set_t *palette_indices_, + unsigned nesting_level_left_ = COLRV1_MAX_NESTING_LEVEL) : + base (base_), + glyphs (glyphs_), + layer_indices (layer_indices_), + palette_indices (palette_indices_), + nesting_level_left (nesting_level_left_) + {} +}; struct LayerRecord { @@ -90,6 +160,707 @@ struct BaseGlyphRecord DEFINE_SIZE_STATIC (6); }; +template <typename T> +struct Variable +{ + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this)); + } + + protected: + T value; + VarIdx varIdx; + public: + DEFINE_SIZE_STATIC (4 + T::static_size); +}; + +template <typename T> +struct NoVariable +{ + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this)); + } + + T value; + public: + DEFINE_SIZE_STATIC (T::static_size); +}; + +// Color structures + +template <template<typename> class Var> +struct ColorIndex +{ + bool subset (hb_subset_context_t *c) const + { + TRACE_SUBSET (this); + auto *out = c->serializer->embed (*this); + if (unlikely (!out)) return_trace (false); + return_trace (c->serializer->check_assign (out->paletteIndex, c->plan->colr_palettes->get (paletteIndex), + HB_SERIALIZE_ERROR_INT_OVERFLOW)); + } + + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this)); + } + + HBUINT16 paletteIndex; + Var<F2DOT14> alpha; + public: + DEFINE_SIZE_STATIC (2 + Var<F2DOT14>::static_size); +}; + +template <template<typename> class Var> +struct ColorStop +{ + bool subset (hb_subset_context_t *c) const + { + TRACE_SUBSET (this); + if (unlikely (!c->serializer->embed (stopOffset))) return_trace (false); + return_trace (color.subset (c)); + } + + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this)); + } + + Var<F2DOT14> stopOffset; + ColorIndex<Var> color; + public: + DEFINE_SIZE_STATIC (Var<F2DOT14>::static_size + ColorIndex<Var>::static_size); +}; + +struct Extend : HBUINT8 +{ + enum { + EXTEND_PAD = 0, + EXTEND_REPEAT = 1, + EXTEND_REFLECT = 2, + }; + public: + DEFINE_SIZE_STATIC (1); +}; + +template <template<typename> class Var> +struct ColorLine +{ + bool subset (hb_subset_context_t *c) const + { + TRACE_SUBSET (this); + auto *out = c->serializer->start_embed (this); + if (unlikely (!out)) return_trace (false); + if (unlikely (!c->serializer->extend_min (out))) return_trace (false); + + if (!c->serializer->check_assign (out->extend, extend, HB_SERIALIZE_ERROR_INT_OVERFLOW)) return_trace (false); + if (!c->serializer->check_assign (out->stops.len, stops.len, HB_SERIALIZE_ERROR_ARRAY_OVERFLOW)) return_trace (false); + + for (const auto& stop : stops.iter ()) + { + if (!stop.subset (c)) return_trace (false); + } + return_trace (true); + } + + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this) && + stops.sanitize (c)); + } + + Extend extend; + Array16Of<ColorStop<Var>> stops; + public: + DEFINE_SIZE_ARRAY_SIZED (3, stops); +}; + +// Composition modes + +// Compositing modes are taken from https://www.w3.org/TR/compositing-1/ +// NOTE: a brief audit of major implementations suggests most support most +// or all of the specified modes. +struct CompositeMode : HBUINT8 +{ + enum { + // Porter-Duff modes + // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators + COMPOSITE_CLEAR = 0, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_clear + COMPOSITE_SRC = 1, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_src + COMPOSITE_DEST = 2, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_dst + COMPOSITE_SRC_OVER = 3, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_srcover + COMPOSITE_DEST_OVER = 4, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_dstover + COMPOSITE_SRC_IN = 5, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_srcin + COMPOSITE_DEST_IN = 6, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_dstin + COMPOSITE_SRC_OUT = 7, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_srcout + COMPOSITE_DEST_OUT = 8, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_dstout + COMPOSITE_SRC_ATOP = 9, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_srcatop + COMPOSITE_DEST_ATOP = 10, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_dstatop + COMPOSITE_XOR = 11, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_xor + COMPOSITE_PLUS = 12, // https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators_plus + + // Blend modes + // https://www.w3.org/TR/compositing-1/#blending + COMPOSITE_SCREEN = 13, // https://www.w3.org/TR/compositing-1/#blendingscreen + COMPOSITE_OVERLAY = 14, // https://www.w3.org/TR/compositing-1/#blendingoverlay + COMPOSITE_DARKEN = 15, // https://www.w3.org/TR/compositing-1/#blendingdarken + COMPOSITE_LIGHTEN = 16, // https://www.w3.org/TR/compositing-1/#blendinglighten + COMPOSITE_COLOR_DODGE = 17, // https://www.w3.org/TR/compositing-1/#blendingcolordodge + COMPOSITE_COLOR_BURN = 18, // https://www.w3.org/TR/compositing-1/#blendingcolorburn + COMPOSITE_HARD_LIGHT = 19, // https://www.w3.org/TR/compositing-1/#blendinghardlight + COMPOSITE_SOFT_LIGHT = 20, // https://www.w3.org/TR/compositing-1/#blendingsoftlight + COMPOSITE_DIFFERENCE = 21, // https://www.w3.org/TR/compositing-1/#blendingdifference + COMPOSITE_EXCLUSION = 22, // https://www.w3.org/TR/compositing-1/#blendingexclusion + COMPOSITE_MULTIPLY = 23, // https://www.w3.org/TR/compositing-1/#blendingmultiply + + // Modes that, uniquely, do not operate on components + // https://www.w3.org/TR/compositing-1/#blendingnonseparable + COMPOSITE_HSL_HUE = 24, // https://www.w3.org/TR/compositing-1/#blendinghue + COMPOSITE_HSL_SATURATION = 25, // https://www.w3.org/TR/compositing-1/#blendingsaturation + COMPOSITE_HSL_COLOR = 26, // https://www.w3.org/TR/compositing-1/#blendingcolor + COMPOSITE_HSL_LUMINOSITY = 27, // https://www.w3.org/TR/compositing-1/#blendingluminosity + }; + public: + DEFINE_SIZE_STATIC (1); +}; + +template <template<typename> class Var> +struct Affine2x3 +{ + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this)); + } + + Var<HBFixed> xx; + Var<HBFixed> yx; + Var<HBFixed> xy; + Var<HBFixed> yy; + Var<HBFixed> dx; + Var<HBFixed> dy; + public: + DEFINE_SIZE_STATIC (6 * Var<HBFixed>::static_size); +}; + +struct PaintColrLayers +{ + void closurev1 (hb_colrv1_closure_context_t* c) const; + + bool subset (hb_subset_context_t *c) const + { + TRACE_SUBSET (this); + auto *out = c->serializer->embed (this); + if (unlikely (!out)) return_trace (false); + return_trace (c->serializer->check_assign (out->firstLayerIndex, c->plan->colrv1_layers->get (firstLayerIndex), + HB_SERIALIZE_ERROR_INT_OVERFLOW)); + + return_trace (true); + } + + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this)); + } + + HBUINT8 format; /* format = 1 */ + HBUINT8 numLayers; + HBUINT32 firstLayerIndex; /* index into COLRv1::layersV1 */ + public: + DEFINE_SIZE_STATIC (6); +}; + +template <template<typename> class Var> +struct PaintSolid +{ + void closurev1 (hb_colrv1_closure_context_t* c) const + { c->add_palette_index (color.paletteIndex); } + + bool subset (hb_subset_context_t *c) const + { + TRACE_SUBSET (this); + if (unlikely (!c->serializer->embed (format))) return_trace (false); + return_trace (color.subset (c)); + } + + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this)); + } + + HBUINT8 format; /* format = 2(noVar) or 3(Var)*/ + ColorIndex<Var> color; + public: + DEFINE_SIZE_STATIC (1 + ColorIndex<Var>::static_size); +}; + +template <template<typename> class Var> +struct PaintLinearGradient +{ + void closurev1 (hb_colrv1_closure_context_t* c) const + { + for (const auto &stop : (this+colorLine).stops.iter ()) + c->add_palette_index (stop.color.paletteIndex); + } + + bool subset (hb_subset_context_t *c) const + { + TRACE_SUBSET (this); + auto *out = c->serializer->embed (this); + if (unlikely (!out)) return_trace (false); + + return_trace (out->colorLine.serialize_subset (c, colorLine, this)); + } + + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this) && colorLine.sanitize (c, this)); + } + + HBUINT8 format; /* format = 4(noVar) or 5 (Var) */ + Offset24To<ColorLine<Var>> colorLine; /* Offset (from beginning of PaintLinearGradient + * table) to ColorLine subtable. */ + Var<FWORD> x0; + Var<FWORD> y0; + Var<FWORD> x1; + Var<FWORD> y1; + Var<FWORD> x2; + Var<FWORD> y2; + public: + DEFINE_SIZE_STATIC (4 + 6 * Var<FWORD>::static_size); +}; + +template <template<typename> class Var> +struct PaintRadialGradient +{ + bool subset (hb_subset_context_t *c) const + { + TRACE_SUBSET (this); + auto *out = c->serializer->embed (this); + if (unlikely (!out)) return_trace (false); + + return_trace (out->colorLine.serialize_subset (c, colorLine, this)); + } + + void closurev1 (hb_colrv1_closure_context_t* c) const + { + for (const auto &stop : (this+colorLine).stops.iter ()) + c->add_palette_index (stop.color.paletteIndex); + } + + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this) && colorLine.sanitize (c, this)); + } + + HBUINT8 format; /* format = 6(noVar) or 7 (Var) */ + Offset24To<ColorLine<Var>> colorLine; /* Offset (from beginning of PaintRadialGradient + * table) to ColorLine subtable. */ + Var<FWORD> x0; + Var<FWORD> y0; + Var<UFWORD> radius0; + Var<FWORD> x1; + Var<FWORD> y1; + Var<UFWORD> radius1; + public: + DEFINE_SIZE_STATIC (4 + 6 * Var<FWORD>::static_size); +}; + +template <template<typename> class Var> +struct PaintSweepGradient +{ + bool subset (hb_subset_context_t *c) const + { + TRACE_SUBSET (this); + auto *out = c->serializer->embed (this); + if (unlikely (!out)) return_trace (false); + + return_trace (out->colorLine.serialize_subset (c, colorLine, this)); + } + + void closurev1 (hb_colrv1_closure_context_t* c) const + { + for (const auto &stop : (this+colorLine).stops.iter ()) + c->add_palette_index (stop.color.paletteIndex); + } + + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this) && colorLine.sanitize (c, this)); + } + + HBUINT8 format; /* format = 8(noVar) or 9 (Var) */ + Offset24To<ColorLine<Var>> colorLine; /* Offset (from beginning of PaintSweepGradient + * table) to ColorLine subtable. */ + Var<FWORD> centerX; + Var<FWORD> centerY; + Var<HBFixed> startAngle; + Var<HBFixed> endAngle; + public: + DEFINE_SIZE_STATIC (2 * Var<FWORD>::static_size + 2 * Var<HBFixed>::static_size); +}; + +struct Paint; +// Paint a non-COLR glyph, filled as indicated by paint. +struct PaintGlyph +{ + void closurev1 (hb_colrv1_closure_context_t* c) const; + + bool subset (hb_subset_context_t *c) const + { + TRACE_SUBSET (this); + auto *out = c->serializer->embed (this); + if (unlikely (!out)) return_trace (false); + + if (! c->serializer->check_assign (out->gid, c->plan->glyph_map->get (gid), + HB_SERIALIZE_ERROR_INT_OVERFLOW)) + return_trace (false); + + return_trace (out->paint.serialize_subset (c, paint, this)); + } + + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this) && paint.sanitize (c, this)); + } + + HBUINT8 format; /* format = 10 */ + Offset24To<Paint> paint; /* Offset (from beginning of PaintGlyph table) to Paint subtable. */ + HBUINT16 gid; + public: + DEFINE_SIZE_STATIC (6); +}; + +struct PaintColrGlyph +{ + void closurev1 (hb_colrv1_closure_context_t* c) const; + + bool subset (hb_subset_context_t *c) const + { + TRACE_SUBSET (this); + auto *out = c->serializer->embed (this); + if (unlikely (!out)) return_trace (false); + + return_trace (c->serializer->check_assign (out->gid, c->plan->glyph_map->get (gid), + HB_SERIALIZE_ERROR_INT_OVERFLOW)); + } + + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this)); + } + + HBUINT8 format; /* format = 11 */ + HBUINT16 gid; + public: + DEFINE_SIZE_STATIC (3); +}; + +template <template<typename> class Var> +struct PaintTransform +{ + HB_INTERNAL void closurev1 (hb_colrv1_closure_context_t* c) const; + + bool subset (hb_subset_context_t *c) const + { + TRACE_SUBSET (this); + auto *out = c->serializer->embed (this); + if (unlikely (!out)) return_trace (false); + + return_trace (out->src.serialize_subset (c, src, this)); + } + + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this) && src.sanitize (c, this)); + } + + HBUINT8 format; /* format = 12(noVar) or 13 (Var) */ + Offset24To<Paint> src; /* Offset (from beginning of PaintTransform table) to Paint subtable. */ + Affine2x3<Var> transform; + public: + DEFINE_SIZE_STATIC (4 + Affine2x3<Var>::static_size); +}; + +template <template<typename> class Var> +struct PaintTranslate +{ + HB_INTERNAL void closurev1 (hb_colrv1_closure_context_t* c) const; + + bool subset (hb_subset_context_t *c) const + { + TRACE_SUBSET (this); + auto *out = c->serializer->embed (this); + if (unlikely (!out)) return_trace (false); + + return_trace (out->src.serialize_subset (c, src, this)); + } + + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this) && src.sanitize (c, this)); + } + + HBUINT8 format; /* format = 14(noVar) or 15 (Var) */ + Offset24To<Paint> src; /* Offset (from beginning of PaintTranslate table) to Paint subtable. */ + Var<HBFixed> dx; + Var<HBFixed> dy; + public: + DEFINE_SIZE_STATIC (4 + Var<HBFixed>::static_size); +}; + +template <template<typename> class Var> +struct PaintRotate +{ + HB_INTERNAL void closurev1 (hb_colrv1_closure_context_t* c) const; + + bool subset (hb_subset_context_t *c) const + { + TRACE_SUBSET (this); + auto *out = c->serializer->embed (this); + if (unlikely (!out)) return_trace (false); + + return_trace (out->src.serialize_subset (c, src, this)); + } + + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this) && src.sanitize (c, this)); + } + + HBUINT8 format; /* format = 16 (noVar) or 17(Var) */ + Offset24To<Paint> src; /* Offset (from beginning of PaintRotate table) to Paint subtable. */ + Var<HBFixed> angle; + Var<HBFixed> centerX; + Var<HBFixed> centerY; + public: + DEFINE_SIZE_STATIC (4 + 3 * Var<HBFixed>::static_size); +}; + +template <template<typename> class Var> +struct PaintSkew +{ + HB_INTERNAL void closurev1 (hb_colrv1_closure_context_t* c) const; + + bool subset (hb_subset_context_t *c) const + { + TRACE_SUBSET (this); + auto *out = c->serializer->embed (this); + if (unlikely (!out)) return_trace (false); + + return_trace (out->src.serialize_subset (c, src, this)); + } + + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this) && src.sanitize (c, this)); + } + + HBUINT8 format; /* format = 18(noVar) or 19 (Var) */ + Offset24To<Paint> src; /* Offset (from beginning of PaintSkew table) to Paint subtable. */ + Var<HBFixed> xSkewAngle; + Var<HBFixed> ySkewAngle; + Var<HBFixed> centerX; + Var<HBFixed> centerY; + public: + DEFINE_SIZE_STATIC (4 + 4 * Var<HBFixed>::static_size); +}; + +struct PaintComposite +{ + void closurev1 (hb_colrv1_closure_context_t* c) const; + + bool subset (hb_subset_context_t *c) const + { + TRACE_SUBSET (this); + auto *out = c->serializer->embed (this); + if (unlikely (!out)) return_trace (false); + + if (!out->src.serialize_subset (c, src, this)) return_trace (false); + return_trace (out->backdrop.serialize_subset (c, backdrop, this)); + } + + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this) && + src.sanitize (c, this) && + backdrop.sanitize (c, this)); + } + + HBUINT8 format; /* format = 20 */ + Offset24To<Paint> src; /* Offset (from beginning of PaintComposite table) to source Paint subtable. */ + CompositeMode mode; /* If mode is unrecognized use COMPOSITE_CLEAR */ + Offset24To<Paint> backdrop; /* Offset (from beginning of PaintComposite table) to backdrop Paint subtable. */ + public: + DEFINE_SIZE_STATIC (8); +}; + +struct Paint +{ + template <typename context_t, typename ...Ts> + typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const + { + TRACE_DISPATCH (this, u.format); + if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ()); + switch (u.format) { + case 1: return_trace (c->dispatch (u.paintformat1, hb_forward<Ts> (ds)...)); + case 2: return_trace (c->dispatch (u.paintformat2, hb_forward<Ts> (ds)...)); + case 3: return_trace (c->dispatch (u.paintformat3, hb_forward<Ts> (ds)...)); + case 4: return_trace (c->dispatch (u.paintformat4, hb_forward<Ts> (ds)...)); + case 5: return_trace (c->dispatch (u.paintformat5, hb_forward<Ts> (ds)...)); + case 6: return_trace (c->dispatch (u.paintformat6, hb_forward<Ts> (ds)...)); + case 7: return_trace (c->dispatch (u.paintformat7, hb_forward<Ts> (ds)...)); + case 8: return_trace (c->dispatch (u.paintformat8, hb_forward<Ts> (ds)...)); + case 9: return_trace (c->dispatch (u.paintformat9, hb_forward<Ts> (ds)...)); + case 10: return_trace (c->dispatch (u.paintformat10, hb_forward<Ts> (ds)...)); + case 11: return_trace (c->dispatch (u.paintformat11, hb_forward<Ts> (ds)...)); + case 12: return_trace (c->dispatch (u.paintformat12, hb_forward<Ts> (ds)...)); + case 13: return_trace (c->dispatch (u.paintformat13, hb_forward<Ts> (ds)...)); + case 14: return_trace (c->dispatch (u.paintformat14, hb_forward<Ts> (ds)...)); + case 15: return_trace (c->dispatch (u.paintformat15, hb_forward<Ts> (ds)...)); + case 16: return_trace (c->dispatch (u.paintformat16, hb_forward<Ts> (ds)...)); + case 17: return_trace (c->dispatch (u.paintformat17, hb_forward<Ts> (ds)...)); + case 18: return_trace (c->dispatch (u.paintformat18, hb_forward<Ts> (ds)...)); + case 19: return_trace (c->dispatch (u.paintformat19, hb_forward<Ts> (ds)...)); + case 20: return_trace (c->dispatch (u.paintformat20, hb_forward<Ts> (ds)...)); + default:return_trace (c->default_return_value ()); + } + } + + protected: + union { + HBUINT8 format; + PaintColrLayers paintformat1; + PaintSolid<NoVariable> paintformat2; + PaintSolid<Variable> paintformat3; + PaintLinearGradient<NoVariable> paintformat4; + PaintLinearGradient<Variable> paintformat5; + PaintRadialGradient<NoVariable> paintformat6; + PaintRadialGradient<Variable> paintformat7; + PaintSweepGradient<NoVariable> paintformat8; + PaintSweepGradient<Variable> paintformat9; + PaintGlyph paintformat10; + PaintColrGlyph paintformat11; + PaintTransform<NoVariable> paintformat12; + PaintTransform<Variable> paintformat13; + PaintTranslate<NoVariable> paintformat14; + PaintTranslate<Variable> paintformat15; + PaintRotate<NoVariable> paintformat16; + PaintRotate<Variable> paintformat17; + PaintSkew<NoVariable> paintformat18; + PaintSkew<Variable> paintformat19; + PaintComposite paintformat20; + } u; +}; + +struct BaseGlyphV1Record +{ + int cmp (hb_codepoint_t g) const + { return g < glyphId ? -1 : g > glyphId ? 1 : 0; } + + bool serialize (hb_serialize_context_t *s, const hb_map_t* glyph_map, + const void* src_base, hb_subset_context_t *c) const + { + TRACE_SERIALIZE (this); + auto *out = s->embed (this); + if (unlikely (!out)) return_trace (false); + if (!s->check_assign (out->glyphId, glyph_map->get (glyphId), + HB_SERIALIZE_ERROR_INT_OVERFLOW)) + return_trace (false); + + return_trace (out->paint.serialize_subset (c, paint, src_base)); + } + + bool sanitize (hb_sanitize_context_t *c, const void *base) const + { + TRACE_SANITIZE (this); + return_trace (likely (c->check_struct (this) && paint.sanitize (c, base))); + } + + public: + HBGlyphID glyphId; /* Glyph ID of reference glyph */ + Offset32To<Paint> paint; /* Offset (from beginning of BaseGlyphV1Record array) to Paint, + * Typically PaintColrLayers */ + public: + DEFINE_SIZE_STATIC (6); +}; + +struct BaseGlyphV1List : SortedArray32Of<BaseGlyphV1Record> +{ + bool subset (hb_subset_context_t *c) const + { + TRACE_SUBSET (this); + auto *out = c->serializer->start_embed (this); + if (unlikely (!c->serializer->extend_min (out))) return_trace (false); + const hb_set_t* glyphset = c->plan->_glyphset; + + for (const auto& _ : as_array ()) + { + unsigned gid = _.glyphId; + if (!glyphset->has (gid)) continue; + + if (_.serialize (c->serializer, c->plan->glyph_map, this, c)) out->len++; + else return_trace (false); + } + + return_trace (out->len != 0); + } + + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (SortedArray32Of<BaseGlyphV1Record>::sanitize (c, this)); + } +}; + +struct LayerV1List : Array32OfOffset32To<Paint> +{ + const Paint& get_paint (unsigned i) const + { return this+(*this)[i]; } + + bool subset (hb_subset_context_t *c) const + { + TRACE_SUBSET (this); + auto *out = c->serializer->start_embed (this); + if (unlikely (!c->serializer->extend_min (out))) return_trace (false); + + for (const auto& _ : + hb_enumerate (*this) + | hb_filter (c->plan->colrv1_layers, hb_first)) + + { + auto *o = out->serialize_append (c->serializer); + if (unlikely (!o) || !o->serialize_subset (c, _.second, this)) + return_trace (false); + } + return_trace (true); + } + + bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (Array32OfOffset32To<Paint>::sanitize (c, this)); + } +}; + struct COLR { static constexpr hb_tag_t tableTag = HB_OT_TAG_COLR; @@ -131,6 +902,15 @@ struct COLR hb_set_t *related_ids /* OUT */) const { colr->closure_glyphs (glyph, related_ids); } + void closure_V0palette_indices (const hb_set_t *glyphs, + hb_set_t *palettes /* OUT */) const + { colr->closure_V0palette_indices (glyphs, palettes); } + + void closure_forV1 (hb_set_t *glyphset, + hb_set_t *layer_indices, + hb_set_t *palette_indices) const + { colr->closure_forV1 (glyphset, layer_indices, palette_indices); } + private: hb_blob_ptr_t<COLR> colr; }; @@ -147,21 +927,70 @@ struct COLR related_ids->add_array (&glyph_layers[0].glyphId, glyph_layers.length, LayerRecord::min_size); } + void closure_V0palette_indices (const hb_set_t *glyphs, + hb_set_t *palettes /* OUT */) const + { + if (!numBaseGlyphs || !numLayers) return; + hb_array_t<const BaseGlyphRecord> baseGlyphs = (this+baseGlyphsZ).as_array (numBaseGlyphs); + hb_array_t<const LayerRecord> all_layers = (this+layersZ).as_array (numLayers); + + for (const BaseGlyphRecord record : baseGlyphs) + { + if (!glyphs->has (record.glyphId)) continue; + hb_array_t<const LayerRecord> glyph_layers = all_layers.sub_array (record.firstLayerIdx, + record.numLayers); + for (const LayerRecord layer : glyph_layers) + palettes->add (layer.colorIdx); + } + } + + void closure_forV1 (hb_set_t *glyphset, + hb_set_t *layer_indices, + hb_set_t *palette_indices) const + { + if (version != 1) return; + hb_set_t visited_glyphs; + + hb_colrv1_closure_context_t c (this, &visited_glyphs, layer_indices, palette_indices); + const BaseGlyphV1List &baseglyphV1_records = this+baseGlyphsV1List; + + for (const BaseGlyphV1Record &baseglyphV1record: baseglyphV1_records.iter ()) + { + unsigned gid = baseglyphV1record.glyphId; + if (!glyphset->has (gid)) continue; + + const Paint &paint = &baseglyphV1_records+baseglyphV1record.paint; + paint.dispatch (&c); + } + hb_set_union (glyphset, &visited_glyphs); + } + + const LayerV1List& get_layerV1List () const + { return (this+layersV1); } + + const BaseGlyphV1List& get_baseglyphV1List () const + { return (this+baseGlyphsV1List); } + bool sanitize (hb_sanitize_context_t *c) const { TRACE_SANITIZE (this); - return_trace (likely (c->check_struct (this) && - (this+baseGlyphsZ).sanitize (c, numBaseGlyphs) && - (this+layersZ).sanitize (c, numLayers))); + return_trace (c->check_struct (this) && + (this+baseGlyphsZ).sanitize (c, numBaseGlyphs) && + (this+layersZ).sanitize (c, numLayers) && + (version == 0 || + (COLRV1_ENABLE_SUBSETTING && version == 1 && + baseGlyphsV1List.sanitize (c, this) && + layersV1.sanitize (c, this) && + varStore.sanitize (c, this)))); } template<typename BaseIterator, typename LayerIterator, hb_requires (hb_is_iterator (BaseIterator)), hb_requires (hb_is_iterator (LayerIterator))> - bool serialize (hb_serialize_context_t *c, - unsigned version, - BaseIterator base_it, - LayerIterator layer_it) + bool serialize_V0 (hb_serialize_context_t *c, + unsigned version, + BaseIterator base_it, + LayerIterator layer_it) { TRACE_SERIALIZE (this); if (unlikely (base_it.len () != layer_it.len ())) @@ -171,6 +1000,12 @@ struct COLR this->version = version; numLayers = 0; numBaseGlyphs = base_it.len (); + if (base_it.len () == 0) + { + baseGlyphsZ = 0; + layersZ = 0; + return_trace (true); + } baseGlyphsZ = COLR::min_size; layersZ = COLR::min_size + numBaseGlyphs * BaseGlyphRecord::min_size; @@ -198,6 +1033,14 @@ struct COLR return record; } + const BaseGlyphV1Record* get_base_glyphV1_record (hb_codepoint_t gid) const + { + const BaseGlyphV1Record* record = &(this+baseGlyphsV1List).bsearch ((unsigned) gid); + if ((record && (hb_codepoint_t) record->glyphId != gid)) + record = nullptr; + return record; + } + bool subset (hb_subset_context_t *c) const { TRACE_SUBSET (this); @@ -245,6 +1088,7 @@ struct COLR if (unlikely (!c->plan->new_gid_for_old_gid (out_layers[i].glyphId, &new_gid))) return hb_pair_t<bool, hb_vector_t<LayerRecord>> (false, out_layers); out_layers[i].glyphId = new_gid; + out_layers[i].colorIdx = c->plan->colr_palettes->get (layers[i].colorIdx); } return hb_pair_t<bool, hb_vector_t<LayerRecord>> (true, out_layers); @@ -253,23 +1097,45 @@ struct COLR | hb_map_retains_sorting (hb_second) ; - if (unlikely (!base_it || !layer_it || base_it.len () != layer_it.len ())) + if (version == 0 && (!base_it || !layer_it)) return_trace (false); COLR *colr_prime = c->serializer->start_embed<COLR> (); - return_trace (colr_prime->serialize (c->serializer, version, base_it, layer_it)); + bool ret = colr_prime->serialize_V0 (c->serializer, version, base_it, layer_it); + + if (version == 0) return_trace (ret); + auto snap = c->serializer->snapshot (); + if (!c->serializer->allocate_size<void> (3 * HBUINT32::static_size)) return_trace (false); + if (!colr_prime->baseGlyphsV1List.serialize_subset (c, baseGlyphsV1List, this)) + { + if (c->serializer->in_error ()) return_trace (false); + //no more COLRv1 glyphs: downgrade to version 0 + c->serializer->revert (snap); + colr_prime->version = 0; + return_trace (true); + } + + if (!colr_prime->layersV1.serialize_subset (c, layersV1, this)) return_trace (false); + + colr_prime->varStore = 0; + //TODO: subset varStore once it's implemented in fonttools + return_trace (true); } protected: HBUINT16 version; /* Table version number (starts at 0). */ HBUINT16 numBaseGlyphs; /* Number of Base Glyph Records. */ - LNNOffsetTo<SortedUnsizedArrayOf<BaseGlyphRecord>> + NNOffset32To<SortedUnsizedArrayOf<BaseGlyphRecord>> baseGlyphsZ; /* Offset to Base Glyph records. */ - LNNOffsetTo<UnsizedArrayOf<LayerRecord>> + NNOffset32To<UnsizedArrayOf<LayerRecord>> layersZ; /* Offset to Layer Records. */ HBUINT16 numLayers; /* Number of Layer Records. */ + // Version-1 additions + Offset32To<BaseGlyphV1List> baseGlyphsV1List; + Offset32To<LayerV1List> layersV1; + Offset32To<VariationStore> varStore; public: - DEFINE_SIZE_STATIC (14); + DEFINE_SIZE_MIN (14); }; } /* namespace OT */ diff --git a/thirdparty/harfbuzz/src/hb-ot-color-colrv1-closure.hh b/thirdparty/harfbuzz/src/hb-ot-color-colrv1-closure.hh new file mode 100644 index 0000000000..4124efe0b1 --- /dev/null +++ b/thirdparty/harfbuzz/src/hb-ot-color-colrv1-closure.hh @@ -0,0 +1,101 @@ +/* + * Copyright © 2018 Ebrahim Byagowi + * Copyright © 2020 Google, Inc. + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + */ + +#ifndef HB_OT_COLR_COLRV1_CLOSURE_HH +#define HB_OT_COLR_COLRV1_CLOSURE_HH + +#include "hb-open-type.hh" +#include "hb-ot-layout-common.hh" +#include "hb-ot-color-colr-table.hh" + +/* + * COLR -- Color + * https://docs.microsoft.com/en-us/typography/opentype/spec/colr + */ +namespace OT { + +HB_INTERNAL void PaintColrLayers::closurev1 (hb_colrv1_closure_context_t* c) const +{ + c->add_layer_indices (firstLayerIndex, numLayers); + const LayerV1List &paint_offset_lists = c->get_colr_table ()->get_layerV1List (); + for (unsigned i = firstLayerIndex; i < firstLayerIndex + numLayers; i++) + { + const Paint &paint = hb_addressof (paint_offset_lists) + paint_offset_lists[i]; + paint.dispatch (c); + } +} + +HB_INTERNAL void PaintGlyph::closurev1 (hb_colrv1_closure_context_t* c) const +{ + c->add_glyph (gid); + (this+paint).dispatch (c); +} + +HB_INTERNAL void PaintColrGlyph::closurev1 (hb_colrv1_closure_context_t* c) const +{ + const COLR *colr_table = c->get_colr_table (); + const BaseGlyphV1Record* baseglyphV1_record = colr_table->get_base_glyphV1_record (gid); + if (!baseglyphV1_record) return; + c->add_glyph (gid); + + const BaseGlyphV1List &baseglyphV1_list = colr_table->get_baseglyphV1List (); + (&baseglyphV1_list+baseglyphV1_record->paint).dispatch (c); +} + +template <template<typename> class Var> +HB_INTERNAL void PaintTransform<Var>::closurev1 (hb_colrv1_closure_context_t* c) const +{ + (this+src).dispatch (c); +} + +template <template<typename> class Var> +HB_INTERNAL void PaintTranslate<Var>::closurev1 (hb_colrv1_closure_context_t* c) const +{ + (this+src).dispatch (c); +} + +template <template<typename> class Var> +HB_INTERNAL void PaintRotate<Var>::closurev1 (hb_colrv1_closure_context_t* c) const +{ + (this+src).dispatch (c); +} + +template <template<typename> class Var> +HB_INTERNAL void PaintSkew<Var>::closurev1 (hb_colrv1_closure_context_t* c) const +{ + (this+src).dispatch (c); +} + +HB_INTERNAL void PaintComposite::closurev1 (hb_colrv1_closure_context_t* c) const +{ + (this+src).dispatch (c); + (this+backdrop).dispatch (c); +} + +} /* namespace OT */ + + +#endif /* HB_OT_COLR_COLRV1_CLOSURE_HH */ diff --git a/thirdparty/harfbuzz/src/hb-ot-color-cpal-table.hh b/thirdparty/harfbuzz/src/hb-ot-color-cpal-table.hh index fa7d3207be..a9deeba9a7 100644 --- a/thirdparty/harfbuzz/src/hb-ot-color-cpal-table.hh +++ b/thirdparty/harfbuzz/src/hb-ot-color-cpal-table.hh @@ -39,7 +39,6 @@ */ #define HB_OT_TAG_CPAL HB_TAG('C','P','A','L') - namespace OT { @@ -74,6 +73,44 @@ struct CPALV1Tail } public: + bool serialize (hb_serialize_context_t *c, + unsigned palette_count, + unsigned color_count, + const void *base, + const hb_map_t *color_index_map) const + { + TRACE_SERIALIZE (this); + auto *out = c->allocate_size<CPALV1Tail> (static_size); + if (unlikely (!out)) return_trace (false); + + out->paletteFlagsZ = 0; + if (paletteFlagsZ) + out->paletteFlagsZ.serialize_copy (c, paletteFlagsZ, base, 0, hb_serialize_context_t::Head, palette_count); + + out->paletteLabelsZ = 0; + if (paletteLabelsZ) + out->paletteLabelsZ.serialize_copy (c, paletteLabelsZ, base, 0, hb_serialize_context_t::Head, palette_count); + + const hb_array_t<const NameID> colorLabels = (base+colorLabelsZ).as_array (color_count); + if (colorLabelsZ) + { + c->push (); + for (const auto _ : colorLabels) + { + if (!color_index_map->has (_)) continue; + NameID new_color_idx; + new_color_idx = color_index_map->get (_); + if (!c->copy<NameID> (new_color_idx)) + { + c->pop_discard (); + return_trace (false); + } + } + c->add_link (out->colorLabelsZ, c->pop_pack ()); + } + return_trace (true); + } + bool sanitize (hb_sanitize_context_t *c, const void *base, unsigned int palette_count, @@ -87,15 +124,17 @@ struct CPALV1Tail } protected: - LNNOffsetTo<UnsizedArrayOf<HBUINT32>> + // TODO(garretrieger): these offsets can hold nulls so we should not be using non-null offsets + // here. Currently they are needed since UnsizedArrayOf doesn't define null_size + NNOffset32To<UnsizedArrayOf<HBUINT32>> paletteFlagsZ; /* Offset from the beginning of CPAL table to * the Palette Type Array. Set to 0 if no array * is provided. */ - LNNOffsetTo<UnsizedArrayOf<NameID>> + NNOffset32To<UnsizedArrayOf<NameID>> paletteLabelsZ; /* Offset from the beginning of CPAL table to * the palette labels array. Set to 0 if no * array is provided. */ - LNNOffsetTo<UnsizedArrayOf<NameID>> + NNOffset32To<UnsizedArrayOf<NameID>> colorLabelsZ; /* Offset from the beginning of CPAL table to * the color labels array. Set to 0 * if no array is provided. */ @@ -157,6 +196,84 @@ struct CPAL } public: + bool serialize (hb_serialize_context_t *c, + const hb_array_t<const BGRAColor> &color_records, + const hb_array_t<const HBUINT16> &color_record_indices, + const hb_map_t &color_record_index_map, + const hb_set_t &retained_color_record_indices) const + { + TRACE_SERIALIZE (this); + + for (const auto idx : color_record_indices) + { + HBUINT16 new_idx; + if (idx == 0) new_idx = 0; + else new_idx = color_record_index_map.get (idx); + if (!c->copy<HBUINT16> (new_idx)) return_trace (false); + } + + c->push (); + for (const auto _ : retained_color_record_indices.iter ()) + { + if (!c->copy<BGRAColor> (color_records[_])) + { + c->pop_discard (); + return_trace (false); + } + } + c->add_link (colorRecordsZ, c->pop_pack ()); + return_trace (true); + } + + bool subset (hb_subset_context_t *c) const + { + TRACE_SUBSET (this); + const hb_map_t *color_index_map = c->plan->colr_palettes; + if (color_index_map->is_empty ()) return_trace (false); + + hb_set_t retained_color_indices; + for (const auto _ : color_index_map->keys ()) + { + if (_ == 0xFFFF) continue; + retained_color_indices.add (_); + } + if (retained_color_indices.is_empty ()) return_trace (false); + + auto *out = c->serializer->start_embed (*this); + if (unlikely (!c->serializer->extend_min (out))) return_trace (false); + + out->version = version; + out->numColors = retained_color_indices.get_population (); + out->numPalettes = numPalettes; + + const hb_array_t<const HBUINT16> colorRecordIndices = colorRecordIndicesZ.as_array (numPalettes); + hb_map_t color_record_index_map; + hb_set_t retained_color_record_indices; + + unsigned record_count = 0; + for (const auto first_color_record_idx : colorRecordIndices) + { + for (unsigned retained_color_idx : retained_color_indices.iter ()) + { + unsigned color_record_idx = first_color_record_idx + retained_color_idx; + if (color_record_index_map.has (color_record_idx)) continue; + color_record_index_map.set (color_record_idx, record_count); + retained_color_record_indices.add (color_record_idx); + record_count++; + } + } + + out->numColorRecords = record_count; + const hb_array_t<const BGRAColor> color_records = (this+colorRecordsZ).as_array (numColorRecords); + if (!out->serialize (c->serializer, color_records, colorRecordIndices, color_record_index_map, retained_color_record_indices)) + return_trace (false); + + if (version == 1) + return_trace (v1 ().serialize (c->serializer, numPalettes, numColors, this, color_index_map)); + + return_trace (true); + } + bool sanitize (hb_sanitize_context_t *c) const { TRACE_SANITIZE (this); @@ -173,7 +290,7 @@ struct CPAL HBUINT16 numPalettes; /* Number of palettes in the table. */ HBUINT16 numColorRecords; /* Total number of color records, combined for * all palettes. */ - LNNOffsetTo<UnsizedArrayOf<BGRAColor>> + NNOffset32To<UnsizedArrayOf<BGRAColor>> colorRecordsZ; /* Offset from the beginning of CPAL table to * the first ColorRecord. */ UnsizedArrayOf<HBUINT16> diff --git a/thirdparty/harfbuzz/src/hb-ot-color-sbix-table.hh b/thirdparty/harfbuzz/src/hb-ot-color-sbix-table.hh index 09da11597d..d2911f19e6 100644 --- a/thirdparty/harfbuzz/src/hb-ot-color-sbix-table.hh +++ b/thirdparty/harfbuzz/src/hb-ot-color-sbix-table.hh @@ -145,7 +145,7 @@ struct SBIXStrike auto* out = c->serializer->start_embed<SBIXStrike> (); if (unlikely (!out)) return_trace (false); auto snap = c->serializer->snapshot (); - if (unlikely (!c->serializer->extend (*out, num_output_glyphs + 1))) return_trace (false); + if (unlikely (!c->serializer->extend (out, num_output_glyphs + 1))) return_trace (false); out->ppem = ppem; out->resolution = resolution; HBUINT32 head; @@ -185,7 +185,7 @@ struct SBIXStrike HBUINT16 resolution; /* The device pixel density (in PPI) for which this * strike was designed. (E.g., 96 PPI, 192 PPI.) */ protected: - UnsizedArrayOf<LOffsetTo<SBIXGlyph>> + UnsizedArrayOf<Offset32To<SBIXGlyph>> imageOffsetsZ; /* Offset from the beginning of the strike data header * to bitmap data for an individual glyph ID. */ public: @@ -352,11 +352,11 @@ struct sbix { TRACE_SERIALIZE (this); - auto *out = c->serializer->start_embed<LOffsetLArrayOf<SBIXStrike>> (); + auto *out = c->serializer->start_embed<Array32OfOffset32To<SBIXStrike>> (); if (unlikely (!out)) return_trace (false); if (unlikely (!c->serializer->extend_min (out))) return_trace (false); - hb_vector_t<LOffsetTo<SBIXStrike>*> new_strikes; + hb_vector_t<Offset32To<SBIXStrike>*> new_strikes; hb_vector_t<hb_serialize_context_t::objidx_t> objidxs; for (int i = strikes.len - 1; i >= 0; --i) { @@ -400,7 +400,7 @@ struct sbix HBUINT16 version; /* Table version number — set to 1 */ HBUINT16 flags; /* Bit 0: Set to 1. Bit 1: Draw outlines. * Bits 2 to 15: reserved (set to 0). */ - LOffsetLArrayOf<SBIXStrike> + Array32OfOffset32To<SBIXStrike> strikes; /* Offsets from the beginning of the 'sbix' * table to data for each individual bitmap strike. */ public: diff --git a/thirdparty/harfbuzz/src/hb-ot-color-svg-table.hh b/thirdparty/harfbuzz/src/hb-ot-color-svg-table.hh index 1cc40ae53f..e022ef43b7 100644 --- a/thirdparty/harfbuzz/src/hb-ot-color-svg-table.hh +++ b/thirdparty/harfbuzz/src/hb-ot-color-svg-table.hh @@ -62,7 +62,7 @@ struct SVGDocumentIndexEntry * this index entry. */ HBUINT16 endGlyphID; /* The last glyph ID in the range described by * this index entry. Must be >= startGlyphID. */ - LNNOffsetTo<UnsizedArrayOf<HBUINT8>> + NNOffset32To<UnsizedArrayOf<HBUINT8>> svgDoc; /* Offset from the beginning of the SVG Document Index * to an SVG document. Must be non-zero. */ HBUINT32 svgDocLength; /* Length of the SVG document. @@ -107,7 +107,7 @@ struct SVG protected: HBUINT16 version; /* Table version (starting at 0). */ - LOffsetTo<SortedArrayOf<SVGDocumentIndexEntry>> + Offset32To<SortedArray16Of<SVGDocumentIndexEntry>> svgDocEntries; /* Offset (relative to the start of the SVG table) to the * SVG Documents Index. Must be non-zero. */ /* Array of SVG Document Index Entries. */ diff --git a/thirdparty/harfbuzz/src/hb-ot-face-table-list.hh b/thirdparty/harfbuzz/src/hb-ot-face-table-list.hh index 367e143fdf..ffbbb1bc53 100644 --- a/thirdparty/harfbuzz/src/hb-ot-face-table-list.hh +++ b/thirdparty/harfbuzz/src/hb-ot-face-table-list.hh @@ -40,7 +40,7 @@ /* This lists font tables that the hb_face_t will contain and lazily * load. Don't add a table unless it's used though. This is not - * exactly free. */ + * exactly zero-cost. */ /* v--- Add new tables in the right place here. */ diff --git a/thirdparty/harfbuzz/src/hb-ot-font.cc b/thirdparty/harfbuzz/src/hb-ot-font.cc index fae7b5b65a..5c044c1c4f 100644 --- a/thirdparty/harfbuzz/src/hb-ot-font.cc +++ b/thirdparty/harfbuzz/src/hb-ot-font.cc @@ -253,9 +253,7 @@ hb_ot_get_font_v_extents (hb_font_t *font, _hb_ot_metrics_get_position_common (font, HB_OT_METRICS_TAG_VERTICAL_LINE_GAP, &metrics->line_gap); } -#if HB_USE_ATEXIT -static void free_static_ot_funcs (); -#endif +static inline void free_static_ot_funcs (); static struct hb_ot_font_funcs_lazy_loader_t : hb_font_funcs_lazy_loader_t<hb_ot_font_funcs_lazy_loader_t> { @@ -281,21 +279,17 @@ static struct hb_ot_font_funcs_lazy_loader_t : hb_font_funcs_lazy_loader_t<hb_ot hb_font_funcs_make_immutable (funcs); -#if HB_USE_ATEXIT - atexit (free_static_ot_funcs); -#endif + hb_atexit (free_static_ot_funcs); return funcs; } } static_ot_funcs; -#if HB_USE_ATEXIT -static +static inline void free_static_ot_funcs () { static_ot_funcs.free_instance (); } -#endif static hb_font_funcs_t * _hb_ot_get_font_funcs () diff --git a/thirdparty/harfbuzz/src/hb-ot-gasp-table.hh b/thirdparty/harfbuzz/src/hb-ot-gasp-table.hh index 4f291924af..f2a9cad464 100644 --- a/thirdparty/harfbuzz/src/hb-ot-gasp-table.hh +++ b/thirdparty/harfbuzz/src/hb-ot-gasp-table.hh @@ -71,7 +71,7 @@ struct gasp protected: HBUINT16 version; /* Version number (set to 1) */ - ArrayOf<GaspRange> + Array16Of<GaspRange> gaspRanges; /* Number of records to follow * Sorted by ppem */ public: diff --git a/thirdparty/harfbuzz/src/hb-ot-glyf-table.hh b/thirdparty/harfbuzz/src/hb-ot-glyf-table.hh index 5352156f02..ff7b9b2d25 100644 --- a/thirdparty/harfbuzz/src/hb-ot-glyf-table.hh +++ b/thirdparty/harfbuzz/src/hb-ot-glyf-table.hh @@ -45,6 +45,10 @@ namespace OT { */ #define HB_OT_TAG_loca HB_TAG('l','o','c','a') +#ifndef HB_MAX_COMPOSITE_OPERATIONS +#define HB_MAX_COMPOSITE_OPERATIONS 100000 +#endif + struct loca { @@ -98,7 +102,7 @@ struct glyf unsigned num_offsets = padded_offsets.len () + 1; bool use_short_loca = max_offset < 0x1FFFF; unsigned entry_size = use_short_loca ? 2 : 4; - char *loca_prime_data = (char *) calloc (entry_size, num_offsets); + char *loca_prime_data = (char *) hb_calloc (entry_size, num_offsets); if (unlikely (!loca_prime_data)) return false; @@ -115,7 +119,7 @@ struct glyf entry_size * num_offsets, HB_MEMORY_MODE_WRITABLE, loca_prime_data, - free); + hb_free); bool result = plan->add_table (HB_OT_TAG_loca, loca_blob) && _add_head_and_set_loca_version (plan, use_short_loca); @@ -209,10 +213,15 @@ struct glyf if (!plan->old_gid_for_new_gid (new_gid, &subset_glyph.old_gid)) return subset_glyph; - subset_glyph.source_glyph = glyf.glyph_for_gid (subset_glyph.old_gid, true); - if (plan->drop_hints) subset_glyph.drop_hints_bytes (); - else subset_glyph.dest_start = subset_glyph.source_glyph.get_bytes (); - + if (new_gid == 0 && + !(plan->flags & HB_SUBSET_FLAGS_NOTDEF_OUTLINE)) + subset_glyph.source_glyph = Glyph (); + else + subset_glyph.source_glyph = glyf.glyph_for_gid (subset_glyph.old_gid, true); + if (plan->flags & HB_SUBSET_FLAGS_NO_HINTING) + subset_glyph.drop_hints_bytes (); + else + subset_glyph.dest_start = subset_glyph.source_glyph.get_bytes (); return subset_glyph; }) | hb_sink (glyphs) @@ -281,6 +290,11 @@ struct glyf hb_codepoint_t get_glyph_index () const { return glyphIndex; } void drop_instructions_flag () { flags = (uint16_t) flags & ~WE_HAVE_INSTRUCTIONS; } + void set_overlaps_flag () + { + flags = (uint16_t) flags | OVERLAP_COMPOUND; + } + bool has_instructions () const { return flags & WE_HAVE_INSTRUCTIONS; } bool has_more () const { return flags & MORE_COMPONENTS; } @@ -383,9 +397,12 @@ struct glyf { typedef const CompositeGlyphChain *__item_t__; composite_iter_t (hb_bytes_t glyph_, __item_t__ current_) : - glyph (glyph_), current (current_) - { if (!check_range (current)) current = nullptr; } - composite_iter_t () : glyph (hb_bytes_t ()), current (nullptr) {} + glyph (glyph_), current (nullptr), current_size (0) + { + set_next (current_); + } + + composite_iter_t () : glyph (hb_bytes_t ()), current (nullptr), current_size (0) {} const CompositeGlyphChain &__item__ () const { return *current; } bool __more__ () const { return current; } @@ -393,23 +410,36 @@ struct glyf { if (!current->has_more ()) { current = nullptr; return; } - const CompositeGlyphChain *possible = &StructAfter<CompositeGlyphChain, - CompositeGlyphChain> (*current); - if (!check_range (possible)) { current = nullptr; return; } - current = possible; + set_next (&StructAtOffset<CompositeGlyphChain> (current, current_size)); } bool operator != (const composite_iter_t& o) const { return glyph != o.glyph || current != o.current; } - bool check_range (const CompositeGlyphChain *composite) const + + void set_next (const CompositeGlyphChain *composite) { - return glyph.check_range (composite, CompositeGlyphChain::min_size) - && glyph.check_range (composite, composite->get_size ()); + if (!glyph.check_range (composite, CompositeGlyphChain::min_size)) + { + current = nullptr; + current_size = 0; + return; + } + unsigned size = composite->get_size (); + if (!glyph.check_range (composite, size)) + { + current = nullptr; + current_size = 0; + return; + } + + current = composite; + current_size = size; } private: hb_bytes_t glyph; __item_t__ current; + unsigned current_size; }; enum phantom_point_index_t @@ -427,14 +457,14 @@ struct glyf { enum simple_glyph_flag_t { - FLAG_ON_CURVE = 0x01, - FLAG_X_SHORT = 0x02, - FLAG_Y_SHORT = 0x04, - FLAG_REPEAT = 0x08, - FLAG_X_SAME = 0x10, - FLAG_Y_SAME = 0x20, - FLAG_RESERVED1 = 0x40, - FLAG_RESERVED2 = 0x80 + FLAG_ON_CURVE = 0x01, + FLAG_X_SHORT = 0x02, + FLAG_Y_SHORT = 0x04, + FLAG_REPEAT = 0x08, + FLAG_X_SAME = 0x10, + FLAG_Y_SAME = 0x20, + FLAG_OVERLAP_SIMPLE = 0x40, + FLAG_RESERVED2 = 0x80 }; private: @@ -495,8 +525,8 @@ struct glyf const Glyph trim_padding () const { /* based on FontTools _g_l_y_f.py::trim */ - const char *glyph = bytes.arrayZ; - const char *glyph_end = glyph + bytes.length; + const uint8_t *glyph = (uint8_t*) bytes.arrayZ; + const uint8_t *glyph_end = glyph + bytes.length; /* simple glyph w/contours, possibly trimmable */ glyph += instruction_len_offset (); @@ -553,6 +583,17 @@ struct glyf dest_end = bytes.sub_array (glyph_length, bytes.length - glyph_length); } + void set_overlaps_flag () + { + if (unlikely (!header.numberOfContours)) return; + + unsigned flags_offset = length (instructions_length ()); + if (unlikely (length (flags_offset + 1) > bytes.length)) return; + + HBUINT8 &first_flag = (HBUINT8 &) StructAtOffset<HBUINT16> (&bytes, flags_offset); + first_flag = (uint8_t) first_flag | FLAG_OVERLAP_SIMPLE; + } + static bool read_points (const HBUINT8 *&p /* IN/OUT */, contour_point_vector_t &points_ /* IN/OUT */, const hb_bytes_t &bytes, @@ -666,6 +707,12 @@ struct glyf /* Chop instructions off the end */ void drop_hints_bytes (hb_bytes_t &dest_start) const { dest_start = bytes.sub_array (0, bytes.length - instructions_length (bytes)); } + + void set_overlaps_flag () + { + const_cast<CompositeGlyphChain &> (StructAfter<CompositeGlyphChain, GlyphHeader> (header)) + .set_overlaps_flag (); + } }; enum glyph_type_t { EMPTY, SIMPLE, COMPOSITE }; @@ -695,6 +742,15 @@ struct glyf } } + void set_overlaps_flag () + { + switch (type) { + case COMPOSITE: CompositeGlyph (*header, bytes).set_overlaps_flag (); return; + case SIMPLE: SimpleGlyph (*header, bytes).set_overlaps_flag (); return; + default: return; + } + } + void drop_hints_bytes (hb_bytes_t &dest_start, hb_bytes_t &dest_end) const { switch (type) { @@ -886,7 +942,7 @@ struct glyf { if (gid >= num_glyphs) return false; - /* Making this alloc free is not that easy + /* Making this allocfree is not that easy https://github.com/harfbuzz/harfbuzz/issues/2095 mostly because of gvar handling in VF fonts, perhaps a separate path for non-VF fonts can be considered */ @@ -1045,18 +1101,28 @@ struct glyf return needs_padding_removal ? glyph.trim_padding () : glyph; } - void - add_gid_and_children (hb_codepoint_t gid, hb_set_t *gids_to_retain, - unsigned int depth = 0) const + unsigned + add_gid_and_children (hb_codepoint_t gid, + hb_set_t *gids_to_retain, + unsigned depth = 0, + unsigned operation_count = 0) const { - if (unlikely (depth++ > HB_MAX_NESTING_LEVEL)) return; + if (unlikely (depth++ > HB_MAX_NESTING_LEVEL)) return operation_count; + if (unlikely (operation_count++ > HB_MAX_COMPOSITE_OPERATIONS)) return operation_count; /* Check if is already visited */ - if (gids_to_retain->has (gid)) return; + if (gids_to_retain->has (gid)) return operation_count; gids_to_retain->add (gid); - for (auto &item : glyph_for_gid (gid).get_composite_iterator ()) - add_gid_and_children (item.get_glyph_index (), gids_to_retain, depth); + auto it = glyph_for_gid (gid).get_composite_iterator (); + while (it) + { + auto item = *(it++); + operation_count += + add_gid_and_children (item.get_glyph_index (), gids_to_retain, depth, operation_count); + } + + return operation_count; } #ifdef HB_EXPERIMENTAL_API @@ -1230,7 +1296,11 @@ struct glyf const_cast<CompositeGlyphChain &> (_).set_glyph_index (new_gid); } - if (plan->drop_hints) Glyph (dest_glyph).drop_hints (); + if (plan->flags & HB_SUBSET_FLAGS_NO_HINTING) + Glyph (dest_glyph).drop_hints (); + + if (plan->flags & HB_SUBSET_FLAGS_SET_OVERLAPS_FLAG) + Glyph (dest_glyph).set_overlaps_flag (); return_trace (true); } diff --git a/thirdparty/harfbuzz/src/hb-ot-hdmx-table.hh b/thirdparty/harfbuzz/src/hb-ot-hdmx-table.hh index c9c391bad5..dea2b7e29a 100644 --- a/thirdparty/harfbuzz/src/hb-ot-hdmx-table.hh +++ b/thirdparty/harfbuzz/src/hb-ot-hdmx-table.hh @@ -52,7 +52,7 @@ struct DeviceRecord unsigned length = it.len (); - if (unlikely (!c->extend (*this, length))) return_trace (false); + if (unlikely (!c->extend (this, length))) return_trace (false); this->pixelSize = pixelSize; this->maxWidth = @@ -110,7 +110,7 @@ struct hdmx for (const hb_item_type<Iterator>& _ : +it) c->start_embed<DeviceRecord> ()->serialize (c, _.first, _.second); - return_trace (c->successful); + return_trace (c->successful ()); } diff --git a/thirdparty/harfbuzz/src/hb-ot-hmtx-table.hh b/thirdparty/harfbuzz/src/hb-ot-hmtx-table.hh index d06c0fa4a4..4038329938 100644 --- a/thirdparty/harfbuzz/src/hb-ot-hmtx-table.hh +++ b/thirdparty/harfbuzz/src/hb-ot-hmtx-table.hh @@ -146,7 +146,7 @@ struct hmtxvmtx _mtx.fini (); - if (unlikely (c->serializer->ran_out_of_room || c->serializer->in_error ())) + if (unlikely (c->serializer->in_error ())) return_trace (false); // Amend header num hmetrics diff --git a/thirdparty/harfbuzz/src/hb-ot-layout-base-table.hh b/thirdparty/harfbuzz/src/hb-ot-layout-base-table.hh index 4df0d942ce..492947751e 100644 --- a/thirdparty/harfbuzz/src/hb-ot-layout-base-table.hh +++ b/thirdparty/harfbuzz/src/hb-ot-layout-base-table.hh @@ -103,7 +103,7 @@ struct BaseCoordFormat3 protected: HBUINT16 format; /* Format identifier--format = 3 */ FWORD coordinate; /* X or Y value, in design units */ - OffsetTo<Device> + Offset16To<Device> deviceTable; /* Offset to Device table for X or * Y value, from beginning of * BaseCoord table (may be NULL). */ @@ -173,11 +173,11 @@ struct FeatMinMaxRecord protected: Tag tag; /* 4-byte feature identification tag--must * match feature tag in FeatureList */ - OffsetTo<BaseCoord> + Offset16To<BaseCoord> minCoord; /* Offset to BaseCoord table that defines * the minimum extent value, from beginning * of MinMax table (may be NULL) */ - OffsetTo<BaseCoord> + Offset16To<BaseCoord> maxCoord; /* Offset to BaseCoord table that defines * the maximum extent value, from beginning * of MinMax table (may be NULL) */ @@ -212,15 +212,15 @@ struct MinMax } protected: - OffsetTo<BaseCoord> + Offset16To<BaseCoord> minCoord; /* Offset to BaseCoord table that defines * minimum extent value, from the beginning * of MinMax table (may be NULL) */ - OffsetTo<BaseCoord> + Offset16To<BaseCoord> maxCoord; /* Offset to BaseCoord table that defines * maximum extent value, from the beginning * of MinMax table (may be NULL) */ - SortedArrayOf<FeatMinMaxRecord> + SortedArray16Of<FeatMinMaxRecord> featMinMaxRecords; /* Array of FeatMinMaxRecords, in alphabetical * order by featureTableTag */ @@ -247,7 +247,7 @@ struct BaseValues Index defaultIndex; /* Index number of default baseline for this * script — equals index position of baseline tag * in baselineTags array of the BaseTagList */ - OffsetArrayOf<BaseCoord> + Array16OfOffset16To<BaseCoord> baseCoords; /* Number of BaseCoord tables defined — should equal * baseTagCount in the BaseTagList * @@ -275,7 +275,7 @@ struct BaseLangSysRecord protected: Tag baseLangSysTag; /* 4-byte language system identification tag */ - OffsetTo<MinMax> + Offset16To<MinMax> minMax; /* Offset to MinMax table, from beginning * of BaseScript table */ public: @@ -305,13 +305,13 @@ struct BaseScript } protected: - OffsetTo<BaseValues> + Offset16To<BaseValues> baseValues; /* Offset to BaseValues table, from beginning * of BaseScript table (may be NULL) */ - OffsetTo<MinMax> + Offset16To<MinMax> defaultMinMax; /* Offset to MinMax table, from beginning of * BaseScript table (may be NULL) */ - SortedArrayOf<BaseLangSysRecord> + SortedArray16Of<BaseLangSysRecord> baseLangSysRecords; /* Number of BaseLangSysRecords * defined — may be zero (0) */ @@ -339,7 +339,7 @@ struct BaseScriptRecord protected: Tag baseScriptTag; /* 4-byte script identification tag */ - OffsetTo<BaseScript> + Offset16To<BaseScript> baseScript; /* Offset to BaseScript table, from beginning * of BaseScriptList */ @@ -364,7 +364,7 @@ struct BaseScriptList } protected: - SortedArrayOf<BaseScriptRecord> + SortedArray16Of<BaseScriptRecord> baseScriptRecords; public: @@ -426,12 +426,12 @@ struct Axis } protected: - OffsetTo<SortedArrayOf<Tag>> + Offset16To<SortedArray16Of<Tag>> baseTagList; /* Offset to BaseTagList table, from beginning * of Axis table (may be NULL) * Array of 4-byte baseline identification tags — must * be in alphabetical order */ - OffsetTo<BaseScriptList> + Offset16To<BaseScriptList> baseScriptList; /* Offset to BaseScriptList table, from beginning * of Axis table * Array of BaseScriptRecords, in alphabetical order @@ -501,11 +501,11 @@ struct BASE protected: FixedVersion<>version; /* Version of the BASE table */ - OffsetTo<Axis>hAxis; /* Offset to horizontal Axis table, from beginning + Offset16To<Axis>hAxis; /* Offset to horizontal Axis table, from beginning * of BASE table (may be NULL) */ - OffsetTo<Axis>vAxis; /* Offset to vertical Axis table, from beginning + Offset16To<Axis>vAxis; /* Offset to vertical Axis table, from beginning * of BASE table (may be NULL) */ - LOffsetTo<VariationStore> + Offset32To<VariationStore> varStore; /* Offset to the table of Item Variation * Store--from beginning of BASE * header (may be NULL). Introduced diff --git a/thirdparty/harfbuzz/src/hb-ot-layout-common.hh b/thirdparty/harfbuzz/src/hb-ot-layout-common.hh index 0ba7e3c061..65f499a00d 100644 --- a/thirdparty/harfbuzz/src/hb-ot-layout-common.hh +++ b/thirdparty/harfbuzz/src/hb-ot-layout-common.hh @@ -88,12 +88,66 @@ static inline void ClassDef_serialize (hb_serialize_context_t *c, Iterator it); static void ClassDef_remap_and_serialize (hb_serialize_context_t *c, - const hb_set_t &glyphset, const hb_map_t &gid_klass_map, hb_sorted_vector_t<HBGlyphID> &glyphs, const hb_set_t &klasses, + bool use_class_zero, hb_map_t *klass_map /*INOUT*/); + +struct hb_prune_langsys_context_t +{ + hb_prune_langsys_context_t (const void *table_, + hb_hashmap_t<unsigned, hb_set_t *, (unsigned)-1, nullptr> *script_langsys_map_, + const hb_map_t *duplicate_feature_map_, + hb_set_t *new_collected_feature_indexes_) + :table (table_), + script_langsys_map (script_langsys_map_), + duplicate_feature_map (duplicate_feature_map_), + new_feature_indexes (new_collected_feature_indexes_), + script_count (0),langsys_count (0) {} + + bool visitedScript (const void *s) + { + if (script_count++ > HB_MAX_SCRIPTS) + return true; + + return visited (s, visited_script); + } + + bool visitedLangsys (const void *l) + { + if (langsys_count++ > HB_MAX_LANGSYS) + return true; + + return visited (l, visited_langsys); + } + + private: + template <typename T> + bool visited (const T *p, hb_set_t &visited_set) + { + hb_codepoint_t delta = (hb_codepoint_t) ((uintptr_t) p - (uintptr_t) table); + if (visited_set.has (delta)) + return true; + + visited_set.add (delta); + return false; + } + + public: + const void *table; + hb_hashmap_t<unsigned, hb_set_t *, (unsigned)-1, nullptr> *script_langsys_map; + const hb_map_t *duplicate_feature_map; + hb_set_t *new_feature_indexes; + + private: + hb_set_t visited_script; + hb_set_t visited_langsys; + unsigned script_count; + unsigned langsys_count; +}; + struct hb_subset_layout_context_t : hb_dispatch_context_t<hb_subset_layout_context_t, hb_empty_t, HB_DEBUG_SUBSET> { @@ -125,16 +179,21 @@ struct hb_subset_layout_context_t : hb_subset_context_t *subset_context; const hb_tag_t table_tag; const hb_map_t *lookup_index_map; + const hb_hashmap_t<unsigned, hb_set_t *, (unsigned)-1, nullptr> *script_langsys_map; const hb_map_t *feature_index_map; + unsigned cur_script_index; hb_subset_layout_context_t (hb_subset_context_t *c_, hb_tag_t tag_, hb_map_t *lookup_map_, - hb_map_t *feature_map_) : + hb_hashmap_t<unsigned, hb_set_t *, (unsigned)-1, nullptr> *script_langsys_map_, + hb_map_t *feature_index_map_) : subset_context (c_), table_tag (tag_), lookup_index_map (lookup_map_), - feature_index_map (feature_map_), + script_langsys_map (script_langsys_map_), + feature_index_map (feature_index_map_), + cur_script_index (0xFFFFu), script_count (0), langsys_count (0), feature_index_count (0), @@ -325,7 +384,7 @@ struct Record } Tag tag; /* 4-byte Tag identifier */ - OffsetTo<Type> + Offset16To<Type> offset; /* Offset from beginning of object holding * the Record */ public: @@ -333,11 +392,11 @@ struct Record }; template <typename Type> -struct RecordArrayOf : SortedArrayOf<Record<Type>> +struct RecordArrayOf : SortedArray16Of<Record<Type>> { - const OffsetTo<Type>& get_offset (unsigned int i) const + const Offset16To<Type>& get_offset (unsigned int i) const { return (*this)[i].offset; } - OffsetTo<Type>& get_offset (unsigned int i) + Offset16To<Type>& get_offset (unsigned int i) { return (*this)[i].offset; } const Tag& get_tag (unsigned int i) const { return (*this)[i].tag; } @@ -356,7 +415,7 @@ struct RecordArrayOf : SortedArrayOf<Record<Type>> } bool find_index (hb_tag_t tag, unsigned int *index) const { - return this->bfind (tag, index, HB_BFIND_NOT_FOUND_STORE, Index::NOT_FOUND_INDEX); + return this->bfind (tag, index, HB_NOT_FOUND_STORE, Index::NOT_FOUND_INDEX); } }; @@ -407,6 +466,30 @@ struct RecordListOfFeature : RecordListOf<Feature> } }; +struct Script; +struct RecordListOfScript : RecordListOf<Script> +{ + bool subset (hb_subset_context_t *c, + hb_subset_layout_context_t *l) const + { + TRACE_SUBSET (this); + auto *out = c->serializer->start_embed (*this); + if (unlikely (!out || !c->serializer->extend_min (out))) return_trace (false); + + unsigned count = this->len; + for (auto _ : + hb_zip (*this, hb_range (count))) + { + auto snap = c->serializer->snapshot (); + l->cur_script_index = _.second; + bool ret = _.first.subset (l, this); + if (!ret) c->serializer->revert (snap); + else out->len++; + } + + return_trace (true); + } +}; + struct RangeRecord { int cmp (hb_codepoint_t g) const @@ -434,7 +517,7 @@ struct RangeRecord DECLARE_NULL_NAMESPACE_BYTES (OT, RangeRecord); -struct IndexArray : ArrayOf<Index> +struct IndexArray : Array16Of<Index> { bool intersects (const hb_map_t *indexes) const { return hb_any (*this, indexes); } @@ -474,7 +557,7 @@ struct IndexArray : ArrayOf<Index> void add_indexes_to (hb_set_t* output /* OUT */) const { - output->add_array (arrayZ, len); + output->add_array (as_array ()); } }; @@ -506,18 +589,46 @@ struct LangSys return_trace (c->embed (*this)); } - bool operator == (const LangSys& o) const + bool compare (const LangSys& o, const hb_map_t *feature_index_map) const { - if (featureIndex.len != o.featureIndex.len || - reqFeatureIndex != o.reqFeatureIndex) + if (reqFeatureIndex != o.reqFeatureIndex) + return false; + + auto iter = + + hb_iter (featureIndex) + | hb_filter (feature_index_map) + | hb_map (feature_index_map) + ; + + auto o_iter = + + hb_iter (o.featureIndex) + | hb_filter (feature_index_map) + | hb_map (feature_index_map) + ; + + if (iter.len () != o_iter.len ()) return false; - for (const auto _ : + hb_zip (featureIndex, o.featureIndex)) + for (const auto _ : + hb_zip (iter, o_iter)) if (_.first != _.second) return false; return true; } + void collect_features (hb_prune_langsys_context_t *c) const + { + if (!has_required_feature () && !get_feature_count ()) return; + if (c->visitedLangsys (this)) return; + if (has_required_feature () && + c->duplicate_feature_map->has (reqFeatureIndex)) + c->new_feature_indexes->add (get_required_feature_index ()); + + + hb_iter (featureIndex) + | hb_filter (c->duplicate_feature_map) + | hb_sink (c->new_feature_indexes) + ; + } + bool subset (hb_subset_context_t *c, hb_subset_layout_context_t *l, const Tag *tag = nullptr) const @@ -581,6 +692,49 @@ struct Script bool has_default_lang_sys () const { return defaultLangSys != 0; } const LangSys& get_default_lang_sys () const { return this+defaultLangSys; } + void prune_langsys (hb_prune_langsys_context_t *c, + unsigned script_index) const + { + if (!has_default_lang_sys () && !get_lang_sys_count ()) return; + if (c->visitedScript (this)) return; + + if (!c->script_langsys_map->has (script_index)) + { + hb_set_t* empty_set = hb_set_create (); + if (unlikely (!c->script_langsys_map->set (script_index, empty_set))) + { + hb_set_destroy (empty_set); + return; + } + } + + unsigned langsys_count = get_lang_sys_count (); + if (has_default_lang_sys ()) + { + //only collect features from non-redundant langsys + const LangSys& d = get_default_lang_sys (); + d.collect_features (c); + + for (auto _ : + hb_zip (langSys, hb_range (langsys_count))) + { + const LangSys& l = this+_.first.offset; + if (l.compare (d, c->duplicate_feature_map)) continue; + + l.collect_features (c); + c->script_langsys_map->get (script_index)->add (_.second); + } + } + else + { + for (auto _ : + hb_zip (langSys, hb_range (langsys_count))) + { + const LangSys& l = this+_.first.offset; + l.collect_features (c); + c->script_langsys_map->get (script_index)->add (_.second); + } + } + } + bool subset (hb_subset_context_t *c, hb_subset_layout_context_t *l, const Tag *tag) const @@ -609,16 +763,17 @@ struct Script } } - + langSys.iter () - | hb_filter ([=] (const Record<LangSys>& record) {return l->visitLangSys (); }) - | hb_filter ([&] (const Record<LangSys>& record) - { - const LangSys& d = this+defaultLangSys; - const LangSys& l = this+record.offset; - return !(l == d); - }) - | hb_apply (subset_record_array (l, &(out->langSys), this)) - ; + const hb_set_t *active_langsys = l->script_langsys_map->get (l->cur_script_index); + if (active_langsys) + { + unsigned count = langSys.len; + + hb_zip (langSys, hb_range (count)) + | hb_filter (active_langsys, hb_second) + | hb_map (hb_first) + | hb_filter ([=] (const Record<LangSys>& record) {return l->visitLangSys (); }) + | hb_apply (subset_record_array (l, &(out->langSys), this)) + ; + } return_trace (bool (out->langSys.len) || defaultLang || l->table_tag == HB_OT_TAG_GSUB); } @@ -631,7 +786,7 @@ struct Script } protected: - OffsetTo<LangSys> + Offset16To<LangSys> defaultLangSys; /* Offset to DefaultLangSys table--from * beginning of Script table--may be Null */ RecordArrayOf<LangSys> @@ -641,7 +796,7 @@ struct Script DEFINE_SIZE_ARRAY_SIZED (4, langSys); }; -typedef RecordListOf<Script> ScriptList; +typedef RecordListOfScript ScriptList; /* https://docs.microsoft.com/en-us/typography/opentype/spec/features_pt#size */ @@ -856,7 +1011,7 @@ struct FeatureParamsCharacterVariants * user-interface labels for the * feature parameters. (Must be zero * if numParameters is zero.) */ - ArrayOf<HBUINT24> + Array16Of<HBUINT24> characters; /* Array of the Unicode Scalar Value * of the characters for which this * feature provides glyph variants. @@ -953,7 +1108,7 @@ struct Feature auto *out = c->serializer->start_embed (*this); if (unlikely (!out || !c->serializer->extend_min (out))) return_trace (false); - bool subset_featureParams = out->featureParams.serialize_subset (c, featureParams, this, tag); + out->featureParams.serialize_subset (c, featureParams, this, tag); auto it = + hb_iter (lookupIndex) @@ -962,8 +1117,9 @@ struct Feature ; out->lookupIndex.serialize (c->serializer, l, it); - return_trace (bool (it) || subset_featureParams - || (tag && *tag == HB_TAG ('p', 'r', 'e', 'f'))); + // The decision to keep or drop this feature is already made before we get here + // so always retain it. + return_trace (true); } bool sanitize (hb_sanitize_context_t *c, @@ -998,7 +1154,7 @@ struct Feature unsigned int new_offset_int = orig_offset - (((char *) this) - ((char *) closure->list_base)); - OffsetTo<FeatureParams> new_offset; + Offset16To<FeatureParams> new_offset; /* Check that it would not overflow. */ new_offset = new_offset_int; if (new_offset == new_offset_int && @@ -1010,7 +1166,7 @@ struct Feature return_trace (true); } - OffsetTo<FeatureParams> + Offset16To<FeatureParams> featureParams; /* Offset to Feature Parameters table (if one * has been defined for the feature), relative * to the beginning of the Feature Table; = Null @@ -1049,11 +1205,11 @@ struct Lookup unsigned int get_subtable_count () const { return subTable.len; } template <typename TSubTable> - const OffsetArrayOf<TSubTable>& get_subtables () const - { return reinterpret_cast<const OffsetArrayOf<TSubTable> &> (subTable); } + const Array16OfOffset16To<TSubTable>& get_subtables () const + { return reinterpret_cast<const Array16OfOffset16To<TSubTable> &> (subTable); } template <typename TSubTable> - OffsetArrayOf<TSubTable>& get_subtables () - { return reinterpret_cast<OffsetArrayOf<TSubTable> &> (subTable); } + Array16OfOffset16To<TSubTable>& get_subtables () + { return reinterpret_cast<Array16OfOffset16To<TSubTable> &> (subTable); } template <typename TSubTable> const TSubTable& get_subtable (unsigned int i) const @@ -1106,13 +1262,13 @@ struct Lookup unsigned int num_subtables) { TRACE_SERIALIZE (this); - if (unlikely (!c->extend_min (*this))) return_trace (false); + if (unlikely (!c->extend_min (this))) return_trace (false); lookupType = lookup_type; lookupFlag = lookup_props & 0xFFFFu; if (unlikely (!subTable.serialize (c, num_subtables))) return_trace (false); if (lookupFlag & LookupFlag::UseMarkFilteringSet) { - if (unlikely (!c->extend (*this))) return_trace (false); + if (unlikely (!c->extend (this))) return_trace (false); HBUINT16 &markFilteringSet = StructAfter<HBUINT16> (subTable); markFilteringSet = lookup_props >> 16; } @@ -1131,10 +1287,18 @@ struct Lookup const hb_set_t *glyphset = c->plan->glyphset_gsub (); unsigned int lookup_type = get_type (); + hb_iter (get_subtables <TSubTable> ()) - | hb_filter ([this, glyphset, lookup_type] (const OffsetTo<TSubTable> &_) { return (this+_).intersects (glyphset, lookup_type); }) + | hb_filter ([this, glyphset, lookup_type] (const Offset16To<TSubTable> &_) { return (this+_).intersects (glyphset, lookup_type); }) | hb_apply (subset_offset_array (c, out->get_subtables<TSubTable> (), this, lookup_type)) ; + if (lookupFlag & LookupFlag::UseMarkFilteringSet) + { + if (unlikely (!c->serializer->extend (out))) return_trace (false); + const HBUINT16 &markFilteringSet = StructAfter<HBUINT16> (subTable); + HBUINT16 &outMarkFilteringSet = StructAfter<HBUINT16> (out->subTable); + outMarkFilteringSet = markFilteringSet; + } + return_trace (true); } @@ -1179,7 +1343,7 @@ struct Lookup private: HBUINT16 lookupType; /* Different enumerations for GSUB and GPOS */ HBUINT16 lookupFlag; /* Lookup qualifiers */ - ArrayOf<Offset16> + Array16Of<Offset16> subTable; /* Array of SubTables */ /*HBUINT16 markFilteringSetX[HB_VAR_ARRAY];*//* Index (base 0) into GDEF mark glyph sets * structure. This field is only present if bit @@ -1188,10 +1352,10 @@ struct Lookup DEFINE_SIZE_ARRAY (6, subTable); }; -typedef OffsetListOf<Lookup> LookupList; +typedef List16OfOffset16To<Lookup> LookupList; template <typename TLookup> -struct LookupOffsetList : OffsetListOf<TLookup> +struct LookupOffsetList : List16OfOffset16To<TLookup> { bool subset (hb_subset_context_t *c, hb_subset_layout_context_t *l) const @@ -1212,7 +1376,7 @@ struct LookupOffsetList : OffsetListOf<TLookup> bool sanitize (hb_sanitize_context_t *c) const { TRACE_SANITIZE (this); - return_trace (OffsetListOf<TLookup>::sanitize (c, this)); + return_trace (List16OfOffset16To<TLookup>::sanitize (c, this)); } }; @@ -1229,7 +1393,7 @@ struct CoverageFormat1 unsigned int get_coverage (hb_codepoint_t glyph_id) const { unsigned int i; - glyphArray.bfind (glyph_id, &i, HB_BFIND_NOT_FOUND_STORE, NOT_COVERED); + glyphArray.bfind (glyph_id, &i, HB_NOT_FOUND_STORE, NOT_COVERED); return i; } @@ -1250,19 +1414,25 @@ struct CoverageFormat1 bool intersects (const hb_set_t *glyphs) const { /* TODO Speed up, using hb_set_next() and bsearch()? */ - unsigned int count = glyphArray.len; - const HBGlyphID *arr = glyphArray.arrayZ; - for (unsigned int i = 0; i < count; i++) - if (glyphs->has (arr[i])) + for (const auto& g : glyphArray.as_array ()) + if (glyphs->has (g)) return true; return false; } bool intersects_coverage (const hb_set_t *glyphs, unsigned int index) const { return glyphs->has (glyphArray[index]); } + void intersected_coverage_glyphs (const hb_set_t *glyphs, hb_set_t *intersect_glyphs) const + { + unsigned count = glyphArray.len; + for (unsigned i = 0; i < count; i++) + if (glyphs->has (glyphArray[i])) + intersect_glyphs->add (glyphArray[i]); + } + template <typename set_t> bool collect_coverage (set_t *glyphs) const - { return glyphs->add_sorted_array (glyphArray.arrayZ, glyphArray.len); } + { return glyphs->add_sorted_array (glyphArray.as_array ()); } public: /* Older compilers need this to be public. */ @@ -1284,7 +1454,7 @@ struct CoverageFormat1 protected: HBUINT16 coverageFormat; /* Format identifier--format = 1 */ - SortedArrayOf<HBGlyphID> + SortedArray16Of<HBGlyphID> glyphArray; /* Array of GlyphIDs--in numerical order */ public: DEFINE_SIZE_ARRAY (4, glyphArray); @@ -1308,7 +1478,7 @@ struct CoverageFormat2 bool serialize (hb_serialize_context_t *c, Iterator glyphs) { TRACE_SERIALIZE (this); - if (unlikely (!c->extend_min (*this))) return_trace (false); + if (unlikely (!c->extend_min (this))) return_trace (false); if (unlikely (!glyphs)) { @@ -1358,20 +1528,16 @@ struct CoverageFormat2 { /* TODO Speed up, using hb_set_next() and bsearch()? */ /* TODO(iter) Rewrite as dagger. */ - unsigned count = rangeRecord.len; - const RangeRecord *arr = rangeRecord.arrayZ; - for (unsigned i = 0; i < count; i++) - if (arr[i].intersects (glyphs)) + for (const auto& range : rangeRecord.as_array ()) + if (range.intersects (glyphs)) return true; return false; } bool intersects_coverage (const hb_set_t *glyphs, unsigned int index) const { /* TODO(iter) Rewrite as dagger. */ - unsigned count = rangeRecord.len; - const RangeRecord *arr = rangeRecord.arrayZ; - for (unsigned i = 0; i < count; i++) { - const RangeRecord &range = arr[i]; + for (const auto& range : rangeRecord.as_array ()) + { if (range.value <= index && index < (unsigned int) range.value + (range.last - range.first) && range.intersects (glyphs)) @@ -1382,6 +1548,16 @@ struct CoverageFormat2 return false; } + void intersected_coverage_glyphs (const hb_set_t *glyphs, hb_set_t *intersect_glyphs) const + { + for (const auto& range : rangeRecord.as_array ()) + { + if (!range.intersects (glyphs)) continue; + for (hb_codepoint_t g = range.first; g <= range.last; g++) + if (glyphs->has (g)) intersect_glyphs->add (g); + } + } + template <typename set_t> bool collect_coverage (set_t *glyphs) const { @@ -1448,7 +1624,7 @@ struct CoverageFormat2 protected: HBUINT16 coverageFormat; /* Format identifier--format = 2 */ - SortedArrayOf<RangeRecord> + SortedArray16Of<RangeRecord> rangeRecord; /* Array of glyph ranges--ordered by * Start GlyphID. rangeCount entries * long */ @@ -1481,7 +1657,7 @@ struct Coverage bool serialize (hb_serialize_context_t *c, Iterator glyphs) { TRACE_SERIALIZE (this); - if (unlikely (!c->extend_min (*this))) return_trace (false); + if (unlikely (!c->extend_min (this))) return_trace (false); unsigned count = 0; unsigned num_ranges = 0; @@ -1564,6 +1740,16 @@ struct Coverage } } + void intersected_coverage_glyphs (const hb_set_t *glyphs, hb_set_t *intersect_glyphs) const + { + switch (u.format) + { + case 1: return u.format1.intersected_coverage_glyphs (glyphs, intersect_glyphs); + case 2: return u.format2.intersected_coverage_glyphs (glyphs, intersect_glyphs); + default:return ; + } + } + struct iter_t : hb_iter_with_fallback_t<iter_t, hb_codepoint_t> { static constexpr bool is_sorted_iterator = true; @@ -1645,10 +1831,10 @@ Coverage_serialize (hb_serialize_context_t *c, { c->start_embed<Coverage> ()->serialize (c, it); } static void ClassDef_remap_and_serialize (hb_serialize_context_t *c, - const hb_set_t &glyphset, const hb_map_t &gid_klass_map, hb_sorted_vector_t<HBGlyphID> &glyphs, const hb_set_t &klasses, + bool use_class_zero, hb_map_t *klass_map /*INOUT*/) { if (!klass_map) @@ -1660,7 +1846,7 @@ static void ClassDef_remap_and_serialize (hb_serialize_context_t *c, /* any glyph not assigned a class value falls into Class zero (0), * if any glyph assigned to class 0, remapping must start with 0->0*/ - if (glyphset.get_population () > gid_klass_map.get_population ()) + if (!use_class_zero) klass_map->set (0, 0); unsigned idx = klass_map->has (0) ? 1 : 0; @@ -1704,10 +1890,11 @@ struct ClassDefFormat1 Iterator it) { TRACE_SERIALIZE (this); - if (unlikely (!c->extend_min (*this))) return_trace (false); + if (unlikely (!c->extend_min (this))) return_trace (false); if (unlikely (!it)) { + classFormat = 1; startGlyph = 0; classValue.len = 0; return_trace (true); @@ -1730,7 +1917,10 @@ struct ClassDefFormat1 } bool subset (hb_subset_context_t *c, - hb_map_t *klass_map = nullptr /*OUT*/) const + hb_map_t *klass_map = nullptr /*OUT*/, + bool keep_empty_table = true, + bool use_class_zero = true, + const Coverage* glyph_filter = nullptr) const { TRACE_SUBSET (this); const hb_set_t &glyphset = *c->plan->glyphset_gsub (); @@ -1742,9 +1932,12 @@ struct ClassDefFormat1 hb_codepoint_t start = startGlyph; hb_codepoint_t end = start + classValue.len; + for (const hb_codepoint_t gid : + hb_range (start, end) - | hb_filter (glyphset)) + | hb_filter (glyphset)) { + if (glyph_filter && !glyph_filter->has(gid)) continue; + unsigned klass = classValue[gid - start]; if (!klass) continue; @@ -1753,9 +1946,13 @@ struct ClassDefFormat1 orig_klasses.add (klass); } - ClassDef_remap_and_serialize (c->serializer, glyphset, gid_org_klass_map, - glyphs, orig_klasses, klass_map); - return_trace ((bool) glyphs); + unsigned glyph_count = glyph_filter + ? hb_len (hb_iter (glyphset) | hb_filter (glyph_filter)) + : glyphset.get_population (); + use_class_zero = use_class_zero && glyph_count <= gid_org_klass_map.get_population (); + ClassDef_remap_and_serialize (c->serializer, gid_org_klass_map, + glyphs, orig_klasses, use_class_zero, klass_map); + return_trace (keep_empty_table || (bool) glyphs); } bool sanitize (hb_sanitize_context_t *c) const @@ -1829,10 +2026,28 @@ struct ClassDefFormat1 return false; } + void intersected_class_glyphs (const hb_set_t *glyphs, unsigned klass, hb_set_t *intersect_glyphs) const + { + unsigned count = classValue.len; + if (klass == 0) + { + hb_codepoint_t endGlyph = startGlyph + count -1; + for (hb_codepoint_t g : glyphs->iter ()) + if (g < startGlyph || g > endGlyph) + intersect_glyphs->add (g); + + return; + } + + for (unsigned i = 0; i < count; i++) + if (classValue[i] == klass && glyphs->has (startGlyph + i)) + intersect_glyphs->add (startGlyph + i); + } + protected: HBUINT16 classFormat; /* Format identifier--format = 1 */ HBGlyphID startGlyph; /* First GlyphID of the classValueArray */ - ArrayOf<HBUINT16> + Array16Of<HBUINT16> classValue; /* Array of Class Values--one per GlyphID */ public: DEFINE_SIZE_ARRAY (6, classValue); @@ -1854,10 +2069,11 @@ struct ClassDefFormat2 Iterator it) { TRACE_SERIALIZE (this); - if (unlikely (!c->extend_min (*this))) return_trace (false); + if (unlikely (!c->extend_min (this))) return_trace (false); if (unlikely (!it)) { + classFormat = 2; rangeRecord.len = 0; return_trace (true); } @@ -1903,7 +2119,10 @@ struct ClassDefFormat2 } bool subset (hb_subset_context_t *c, - hb_map_t *klass_map = nullptr /*OUT*/) const + hb_map_t *klass_map = nullptr /*OUT*/, + bool keep_empty_table = true, + bool use_class_zero = true, + const Coverage* glyph_filter = nullptr) const { TRACE_SUBSET (this); const hb_set_t &glyphset = *c->plan->glyphset_gsub (); @@ -1923,15 +2142,20 @@ struct ClassDefFormat2 for (hb_codepoint_t g = start; g < end; g++) { if (!glyphset.has (g)) continue; + if (glyph_filter && !glyph_filter->has (g)) continue; glyphs.push (glyph_map[g]); gid_org_klass_map.set (glyph_map[g], klass); orig_klasses.add (klass); } } - ClassDef_remap_and_serialize (c->serializer, glyphset, gid_org_klass_map, - glyphs, orig_klasses, klass_map); - return_trace ((bool) glyphs); + unsigned glyph_count = glyph_filter + ? hb_len (hb_iter (glyphset) | hb_filter (glyph_filter)) + : glyphset.get_population (); + use_class_zero = use_class_zero && glyph_count <= gid_org_klass_map.get_population (); + ClassDef_remap_and_serialize (c->serializer, gid_org_klass_map, + glyphs, orig_klasses, use_class_zero, klass_map); + return_trace (keep_empty_table || (bool) glyphs); } bool sanitize (hb_sanitize_context_t *c) const @@ -2005,9 +2229,57 @@ struct ClassDefFormat2 return false; } + void intersected_class_glyphs (const hb_set_t *glyphs, unsigned klass, hb_set_t *intersect_glyphs) const + { + unsigned count = rangeRecord.len; + if (klass == 0) + { + hb_codepoint_t g = HB_SET_VALUE_INVALID; + for (unsigned int i = 0; i < count; i++) + { + if (!hb_set_next (glyphs, &g)) + break; + while (g != HB_SET_VALUE_INVALID && g < rangeRecord[i].first) + { + intersect_glyphs->add (g); + hb_set_next (glyphs, &g); + } + g = rangeRecord[i].last; + } + while (g != HB_SET_VALUE_INVALID && hb_set_next (glyphs, &g)) + intersect_glyphs->add (g); + + return; + } + + hb_codepoint_t g = HB_SET_VALUE_INVALID; + for (unsigned int i = 0; i < count; i++) + { + if (rangeRecord[i].value != klass) continue; + + if (g != HB_SET_VALUE_INVALID) + { + if (g >= rangeRecord[i].first && + g <= rangeRecord[i].last) + intersect_glyphs->add (g); + if (g > rangeRecord[i].last) + continue; + } + + g = rangeRecord[i].first - 1; + while (hb_set_next (glyphs, &g)) + { + if (g >= rangeRecord[i].first && g <= rangeRecord[i].last) + intersect_glyphs->add (g); + else if (g > rangeRecord[i].last) + break; + } + } + } + protected: HBUINT16 classFormat; /* Format identifier--format = 2 */ - SortedArrayOf<RangeRecord> + SortedArray16Of<RangeRecord> rangeRecord; /* Array of glyph ranges--ordered by * Start GlyphID */ public: @@ -2036,19 +2308,20 @@ struct ClassDef template<typename Iterator, hb_requires (hb_is_iterator (Iterator))> - bool serialize (hb_serialize_context_t *c, Iterator it) + bool serialize (hb_serialize_context_t *c, Iterator it_with_class_zero) { TRACE_SERIALIZE (this); - if (unlikely (!c->extend_min (*this))) return_trace (false); + if (unlikely (!c->extend_min (this))) return_trace (false); + + auto it = + it_with_class_zero | hb_filter (hb_second); unsigned format = 2; if (likely (it)) { hb_codepoint_t glyph_min = (*it).first; - hb_codepoint_t glyph_max = + it - | hb_map (hb_first) - | hb_reduce (hb_max, 0u); + hb_codepoint_t glyph_max = glyph_min; + unsigned num_glyphs = 0; unsigned num_ranges = 1; hb_codepoint_t prev_gid = glyph_min; unsigned prev_klass = (*it).second; @@ -2057,7 +2330,9 @@ struct ClassDef { hb_codepoint_t cur_gid = gid_klass_pair.first; unsigned cur_klass = gid_klass_pair.second; - if (cur_gid == glyph_min || !cur_klass) continue; + num_glyphs++; + if (cur_gid == glyph_min) continue; + if (cur_gid > glyph_max) glyph_max = cur_gid; if (cur_gid != prev_gid + 1 || cur_klass != prev_klass) num_ranges++; @@ -2066,7 +2341,7 @@ struct ClassDef prev_klass = cur_klass; } - if (1 + (glyph_max - glyph_min + 1) <= num_ranges * 3) + if (num_glyphs && 1 + (glyph_max - glyph_min + 1) <= num_ranges * 3) format = 1; } u.format = format; @@ -2080,12 +2355,15 @@ struct ClassDef } bool subset (hb_subset_context_t *c, - hb_map_t *klass_map = nullptr /*OUT*/) const + hb_map_t *klass_map = nullptr /*OUT*/, + bool keep_empty_table = true, + bool use_class_zero = true, + const Coverage* glyph_filter = nullptr) const { TRACE_SUBSET (this); switch (u.format) { - case 1: return_trace (u.format1.subset (c, klass_map)); - case 2: return_trace (u.format2.subset (c, klass_map)); + case 1: return_trace (u.format1.subset (c, klass_map, keep_empty_table, use_class_zero, glyph_filter)); + case 2: return_trace (u.format2.subset (c, klass_map, keep_empty_table, use_class_zero, glyph_filter)); default:return_trace (false); } } @@ -2142,6 +2420,15 @@ struct ClassDef } } + void intersected_class_glyphs (const hb_set_t *glyphs, unsigned klass, hb_set_t *intersect_glyphs) const + { + switch (u.format) { + case 1: return u.format1.intersected_class_glyphs (glyphs, klass, intersect_glyphs); + case 2: return u.format2.intersected_class_glyphs (glyphs, klass, intersect_glyphs); + default:return; + } + } + protected: union { HBUINT16 format; /* Format identifier */ @@ -2229,19 +2516,19 @@ struct VarRegionList bool sanitize (hb_sanitize_context_t *c) const { TRACE_SANITIZE (this); - return_trace (c->check_struct (this) && - axesZ.sanitize (c, (unsigned int) axisCount * (unsigned int) regionCount)); + return_trace (c->check_struct (this) && axesZ.sanitize (c, axisCount * regionCount)); } bool serialize (hb_serialize_context_t *c, const VarRegionList *src, const hb_bimap_t ®ion_map) { TRACE_SERIALIZE (this); - VarRegionList *out = c->allocate_min<VarRegionList> (); - if (unlikely (!out)) return_trace (false); + if (unlikely (!c->extend_min (this))) return_trace (false); axisCount = src->axisCount; regionCount = region_map.get_population (); - if (unlikely (!c->allocate_size<VarRegionList> (get_size () - min_size))) return_trace (false); - unsigned int region_count = src->get_region_count (); + if (unlikely (hb_unsigned_mul_overflows (axisCount * regionCount, + VarRegionAxis::static_size))) return_trace (false); + if (unlikely (!c->extend (this))) return_trace (false); + unsigned int region_count = src->regionCount; for (unsigned int r = 0; r < regionCount; r++) { unsigned int backward = region_map.backward (r); @@ -2253,11 +2540,11 @@ struct VarRegionList } unsigned int get_size () const { return min_size + VarRegionAxis::static_size * axisCount * regionCount; } - unsigned int get_region_count () const { return regionCount; } - protected: + public: HBUINT16 axisCount; HBUINT16 regionCount; + protected: UnsizedArrayOf<VarRegionAxis> axesZ; public: @@ -2273,7 +2560,10 @@ struct VarData { return shortCount + regionIndices.len; } unsigned int get_size () const - { return itemCount * get_row_size (); } + { return min_size + - regionIndices.min_size + regionIndices.get_size () + + itemCount * get_row_size (); + } float get_delta (unsigned int inner, const int *coords, unsigned int coord_count, @@ -2307,10 +2597,10 @@ struct VarData return delta; } - void get_scalars (const int *coords, unsigned int coord_count, - const VarRegionList ®ions, - float *scalars /*OUT */, - unsigned int num_scalars) const + void get_region_scalars (const int *coords, unsigned int coord_count, + const VarRegionList ®ions, + float *scalars /*OUT */, + unsigned int num_scalars) const { unsigned count = hb_min (num_scalars, regionIndices.len); for (unsigned int i = 0; i < count; i++) @@ -2336,7 +2626,7 @@ struct VarData const hb_bimap_t ®ion_map) { TRACE_SERIALIZE (this); - if (unlikely (!c->extend_min (*this))) return_trace (false); + if (unlikely (!c->extend_min (this))) return_trace (false); itemCount = inner_map.get_next_value (); /* Optimize short count */ @@ -2378,9 +2668,7 @@ struct VarData shortCount = new_short_count; regionIndices.len = new_ri_count; - unsigned int size = regionIndices.get_size () - HBUINT16::static_size/*regionIndices.len*/ + (get_row_size () * itemCount); - if (unlikely (!c->allocate_size<HBUINT8> (size))) - return_trace (false); + if (unlikely (!c->extend (this))) return_trace (false); for (r = 0; r < ri_count; r++) if (delta_sz[r]) regionIndices[ri_map[r]] = region_map[src->regionIndices[r]]; @@ -2395,16 +2683,16 @@ struct VarData return_trace (true); } - void collect_region_refs (hb_inc_bimap_t ®ion_map, const hb_inc_bimap_t &inner_map) const + void collect_region_refs (hb_set_t ®ion_indices, const hb_inc_bimap_t &inner_map) const { for (unsigned int r = 0; r < regionIndices.len; r++) { unsigned int region = regionIndices[r]; - if (region_map.has (region)) continue; + if (region_indices.has (region)) continue; for (unsigned int i = 0; i < inner_map.get_next_value (); i++) if (get_item_delta (inner_map.backward (i), r) != 0) { - region_map.add (region); + region_indices.add (region); break; } } @@ -2439,7 +2727,7 @@ struct VarData protected: HBUINT16 itemCount; HBUINT16 shortCount; - ArrayOf<HBUINT16> regionIndices; + Array16Of<HBUINT16> regionIndices; /*UnsizedArrayOf<HBUINT8>bytesX;*/ public: DEFINE_SIZE_ARRAY (6, regionIndices); @@ -2447,6 +2735,7 @@ struct VarData struct VariationStore { + private: float get_delta (unsigned int outer, unsigned int inner, const int *coords, unsigned int coord_count) const { @@ -2462,6 +2751,7 @@ struct VariationStore this+regions); } + public: float get_delta (unsigned int index, const int *coords, unsigned int coord_count) const { @@ -2488,32 +2778,48 @@ struct VariationStore const hb_array_t <hb_inc_bimap_t> &inner_maps) { TRACE_SERIALIZE (this); + if (unlikely (!c->extend_min (this))) return_trace (false); + unsigned int set_count = 0; for (unsigned int i = 0; i < inner_maps.length; i++) - if (inner_maps[i].get_population () > 0) set_count++; + if (inner_maps[i].get_population ()) + set_count++; - unsigned int size = min_size + HBUINT32::static_size * set_count; - if (unlikely (!c->allocate_size<HBUINT32> (size))) return_trace (false); format = 1; - hb_inc_bimap_t region_map; + const auto &src_regions = src+src->regions; + + hb_set_t region_indices; for (unsigned int i = 0; i < inner_maps.length; i++) - (src+src->dataSets[i]).collect_region_refs (region_map, inner_maps[i]); - region_map.sort (); + (src+src->dataSets[i]).collect_region_refs (region_indices, inner_maps[i]); - if (unlikely (!regions.serialize (c, this) - .serialize (c, &(src+src->regions), region_map))) return_trace (false); + if (region_indices.in_error ()) + return_trace (false); + + region_indices.del_range ((src_regions).regionCount, hb_set_t::INVALID); + + /* TODO use constructor when our data-structures support that. */ + hb_inc_bimap_t region_map; + + hb_iter (region_indices) + | hb_apply ([®ion_map] (unsigned _) { region_map.add(_); }) + ; + if (region_map.in_error()) + return_trace (false); + + if (unlikely (!regions.serialize_serialize (c, &src_regions, region_map))) + return_trace (false); - /* TODO: The following code could be simplified when - * OffsetListOf::subset () can take a custom param to be passed to VarData::serialize () - */ dataSets.len = set_count; + if (unlikely (!c->extend (dataSets))) return_trace (false); + + /* TODO: The following code could be simplified when + * List16OfOffset16To::subset () can take a custom param to be passed to VarData::serialize () */ unsigned int set_index = 0; for (unsigned int i = 0; i < inner_maps.length; i++) { - if (inner_maps[i].get_population () == 0) continue; - if (unlikely (!dataSets[set_index++].serialize (c, this) - .serialize (c, &(src+src->dataSets[i]), inner_maps[i], region_map))) + if (!inner_maps[i].get_population ()) continue; + if (unlikely (!dataSets[set_index++] + .serialize_serialize (c, &(src+src->dataSets[i]), inner_maps[i], region_map))) return_trace (false); } @@ -2558,13 +2864,13 @@ struct VariationStore && varstore_prime->dataSets); } - unsigned int get_region_index_count (unsigned int ivs) const - { return (this+dataSets[ivs]).get_region_index_count (); } + unsigned int get_region_index_count (unsigned int major) const + { return (this+dataSets[major]).get_region_index_count (); } - void get_scalars (unsigned int ivs, - const int *coords, unsigned int coord_count, - float *scalars /*OUT*/, - unsigned int num_scalars) const + void get_region_scalars (unsigned int major, + const int *coords, unsigned int coord_count, + float *scalars /*OUT*/, + unsigned int num_scalars) const { #ifdef HB_NO_VAR for (unsigned i = 0; i < num_scalars; i++) @@ -2572,18 +2878,19 @@ struct VariationStore return; #endif - (this+dataSets[ivs]).get_scalars (coords, coord_count, this+regions, - &scalars[0], num_scalars); + (this+dataSets[major]).get_region_scalars (coords, coord_count, + this+regions, + &scalars[0], num_scalars); } unsigned int get_sub_table_count () const { return dataSets.len; } protected: HBUINT16 format; - LOffsetTo<VarRegionList> regions; - LOffsetArrayOf<VarData> dataSets; + Offset32To<VarRegionList> regions; + Array16OfOffset32To<VarData> dataSets; public: - DEFINE_SIZE_ARRAY (8, dataSets); + DEFINE_SIZE_ARRAY_SIZED (8, dataSets); }; /* @@ -2684,7 +2991,8 @@ struct ConditionSet + conditions.iter () | hb_apply (subset_offset_array (c, out->conditions, this)) ; - return_trace (true); + + return_trace (bool (out->conditions)); } bool sanitize (hb_sanitize_context_t *c) const @@ -2694,7 +3002,7 @@ struct ConditionSet } protected: - LOffsetArrayOf<Condition> conditions; + Array16OfOffset32To<Condition> conditions; public: DEFINE_SIZE_ARRAY (2, conditions); }; @@ -2719,6 +3027,12 @@ struct FeatureTableSubstitutionRecord bool subset (hb_subset_layout_context_t *c, const void *base) const { TRACE_SUBSET (this); + if (!c->feature_index_map->has (featureIndex)) { + // Feature that is being substituted is not being retained, so we don't + // need this. + return_trace (false); + } + auto *out = c->subset_context->serializer->embed (this); if (unlikely (!out)) return_trace (false); @@ -2735,7 +3049,7 @@ struct FeatureTableSubstitutionRecord protected: HBUINT16 featureIndex; - LOffsetTo<Feature> feature; + Offset32To<Feature> feature; public: DEFINE_SIZE_STATIC (6); }; @@ -2771,6 +3085,15 @@ struct FeatureTableSubstitution record.closure_features (this, lookup_indexes, feature_indexes); } + bool intersects_features (const hb_map_t *feature_index_map) const + { + for (const FeatureTableSubstitutionRecord& record : substitutions) + { + if (feature_index_map->has (record.featureIndex)) return true; + } + return false; + } + bool subset (hb_subset_context_t *c, hb_subset_layout_context_t *l) const { @@ -2784,7 +3107,8 @@ struct FeatureTableSubstitution + substitutions.iter () | hb_apply (subset_record_array (l, &(out->substitutions), this)) ; - return_trace (true); + + return_trace (bool (out->substitutions)); } bool sanitize (hb_sanitize_context_t *c) const @@ -2797,7 +3121,7 @@ struct FeatureTableSubstitution protected: FixedVersion<> version; /* Version--0x00010000u */ - ArrayOf<FeatureTableSubstitutionRecord> + Array16Of<FeatureTableSubstitutionRecord> substitutions; public: DEFINE_SIZE_ARRAY (6, substitutions); @@ -2821,6 +3145,11 @@ struct FeatureVariationRecord (base+substitutions).closure_features (lookup_indexes, feature_indexes); } + bool intersects_features (const void *base, const hb_map_t *feature_index_map) const + { + return (base+substitutions).intersects_features (feature_index_map); + } + bool subset (hb_subset_layout_context_t *c, const void *base) const { TRACE_SUBSET (this); @@ -2841,9 +3170,9 @@ struct FeatureVariationRecord } protected: - LOffsetTo<ConditionSet> + Offset32To<ConditionSet> conditions; - LOffsetTo<FeatureTableSubstitution> + Offset32To<FeatureTableSubstitution> substitutions; public: DEFINE_SIZE_STATIC (8); @@ -2907,9 +3236,18 @@ struct FeatureVariations out->version.major = version.major; out->version.minor = version.minor; - + varRecords.iter () - | hb_apply (subset_record_array (l, &(out->varRecords), this)) - ; + int keep_up_to = -1; + for (int i = varRecords.len - 1; i >= 0; i--) { + if (varRecords[i].intersects_features (this, l->feature_index_map)) { + keep_up_to = i; + break; + } + } + + unsigned count = (unsigned) (keep_up_to + 1); + for (unsigned i = 0; i < count; i++) { + subset_record_array (l, &(out->varRecords), this) (varRecords[i]); + } return_trace (bool (out->varRecords)); } @@ -2923,7 +3261,7 @@ struct FeatureVariations protected: FixedVersion<> version; /* Version--0x00010000u */ - LArrayOf<FeatureVariationRecord> + Array32Of<FeatureVariationRecord> varRecords; public: DEFINE_SIZE_ARRAY_SIZED (8, varRecords); @@ -3036,22 +3374,20 @@ struct VariationDevice if (unlikely (!out)) return_trace (nullptr); if (!layout_variation_idx_map || layout_variation_idx_map->is_empty ()) return_trace (out); - unsigned org_idx = (outerIndex << 16) + innerIndex; - if (!layout_variation_idx_map->has (org_idx)) + /* TODO Just get() and bail if NO_VARIATION. Needs to setup the map to return that. */ + if (!layout_variation_idx_map->has (varIdx)) { c->revert (snap); return_trace (nullptr); } - unsigned new_idx = layout_variation_idx_map->get (org_idx); - out->outerIndex = new_idx >> 16; - out->innerIndex = new_idx & 0xFFFF; + unsigned new_idx = layout_variation_idx_map->get (varIdx); + out->varIdx = new_idx; return_trace (out); } void record_variation_index (hb_set_t *layout_variation_indices) const { - unsigned var_idx = (outerIndex << 16) + innerIndex; - layout_variation_indices->add (var_idx); + layout_variation_indices->add (varIdx); } bool sanitize (hb_sanitize_context_t *c) const @@ -3064,12 +3400,11 @@ struct VariationDevice float get_delta (hb_font_t *font, const VariationStore &store) const { - return store.get_delta (outerIndex, innerIndex, font->coords, font->num_coords); + return store.get_delta (varIdx, font->coords, font->num_coords); } protected: - HBUINT16 outerIndex; - HBUINT16 innerIndex; + VarIdx varIdx; HBUINT16 deltaFormat; /* Format identifier for this table: 0x0x8000 */ public: DEFINE_SIZE_STATIC (6); diff --git a/thirdparty/harfbuzz/src/hb-ot-layout-gdef-table.hh b/thirdparty/harfbuzz/src/hb-ot-layout-gdef-table.hh index 437e760f64..31a4a3e84c 100644 --- a/thirdparty/harfbuzz/src/hb-ot-layout-gdef-table.hh +++ b/thirdparty/harfbuzz/src/hb-ot-layout-gdef-table.hh @@ -42,7 +42,7 @@ namespace OT { */ /* Array of contour point indices--in increasing numerical order */ -struct AttachPoint : ArrayOf<HBUINT16> +struct AttachPoint : Array16Of<HBUINT16> { bool subset (hb_subset_context_t *c) const { @@ -98,8 +98,7 @@ struct AttachList | hb_map (glyph_map) | hb_sink (new_coverage) ; - out->coverage.serialize (c->serializer, out) - .serialize (c->serializer, new_coverage.iter ()); + out->coverage.serialize_serialize (c->serializer, new_coverage.iter ()); return_trace (bool (new_coverage)); } @@ -110,10 +109,10 @@ struct AttachList } protected: - OffsetTo<Coverage> + Offset16To<Coverage> coverage; /* Offset to Coverage table -- from * beginning of AttachList table */ - OffsetArrayOf<AttachPoint> + Array16OfOffset16To<AttachPoint> attachPoint; /* Array of AttachPoint tables * in Coverage Index order */ public: @@ -220,7 +219,7 @@ struct CaretValueFormat3 protected: HBUINT16 caretValueFormat; /* Format identifier--format = 3 */ FWORD coordinate; /* X or Y value, in design units */ - OffsetTo<Device> + Offset16To<Device> deviceTable; /* Offset to Device table for X or Y * value--from beginning of CaretValue * table */ @@ -329,7 +328,7 @@ struct LigGlyph void collect_variation_indices (hb_collect_variation_indices_context_t *c) const { - for (const OffsetTo<CaretValue>& offset : carets.iter ()) + for (const Offset16To<CaretValue>& offset : carets.iter ()) (this+offset).collect_variation_indices (c->layout_variation_indices); } @@ -340,7 +339,7 @@ struct LigGlyph } protected: - OffsetArrayOf<CaretValue> + Array16OfOffset16To<CaretValue> carets; /* Offset array of CaretValue tables * --from beginning of LigGlyph table * --in increasing coordinate order */ @@ -386,8 +385,7 @@ struct LigCaretList | hb_map (glyph_map) | hb_sink (new_coverage) ; - out->coverage.serialize (c->serializer, out) - .serialize (c->serializer, new_coverage.iter ()); + out->coverage.serialize_serialize (c->serializer, new_coverage.iter ()); return_trace (bool (new_coverage)); } @@ -408,10 +406,10 @@ struct LigCaretList } protected: - OffsetTo<Coverage> + Offset16To<Coverage> coverage; /* Offset to Coverage table--from * beginning of LigCaretList table */ - OffsetArrayOf<LigGlyph> + Array16OfOffset16To<LigGlyph> ligGlyph; /* Array of LigGlyph tables * in Coverage Index order */ public: @@ -432,7 +430,7 @@ struct MarkGlyphSetsFormat1 out->format = format; bool ret = true; - for (const LOffsetTo<Coverage>& offset : coverage.iter ()) + for (const Offset32To<Coverage>& offset : coverage.iter ()) { auto *o = out->coverage.serialize_append (c->serializer); if (unlikely (!o)) @@ -460,7 +458,7 @@ struct MarkGlyphSetsFormat1 protected: HBUINT16 format; /* Format identifier--format = 1 */ - ArrayOf<LOffsetTo<Coverage>> + Array16Of<Offset32To<Coverage>> coverage; /* Array of long offsets to mark set * coverage tables */ public: @@ -643,10 +641,10 @@ struct GDEF auto *out = c->serializer->embed (*this); if (unlikely (!out)) return_trace (false); - bool subset_glyphclassdef = out->glyphClassDef.serialize_subset (c, glyphClassDef, this); + bool subset_glyphclassdef = out->glyphClassDef.serialize_subset (c, glyphClassDef, this, nullptr, false, true); bool subset_attachlist = out->attachList.serialize_subset (c, attachList, this); bool subset_ligcaretlist = out->ligCaretList.serialize_subset (c, ligCaretList, this); - bool subset_markattachclassdef = out->markAttachClassDef.serialize_subset (c, markAttachClassDef, this); + bool subset_markattachclassdef = out->markAttachClassDef.serialize_subset (c, markAttachClassDef, this, nullptr, false, true); bool subset_markglyphsetsdef = true; if (version.to_int () >= 0x00010002u) @@ -687,28 +685,28 @@ struct GDEF protected: FixedVersion<>version; /* Version of the GDEF table--currently * 0x00010003u */ - OffsetTo<ClassDef> + Offset16To<ClassDef> glyphClassDef; /* Offset to class definition table * for glyph type--from beginning of * GDEF header (may be Null) */ - OffsetTo<AttachList> + Offset16To<AttachList> attachList; /* Offset to list of glyphs with * attachment points--from beginning * of GDEF header (may be Null) */ - OffsetTo<LigCaretList> + Offset16To<LigCaretList> ligCaretList; /* Offset to list of positioning points * for ligature carets--from beginning * of GDEF header (may be Null) */ - OffsetTo<ClassDef> + Offset16To<ClassDef> markAttachClassDef; /* Offset to class definition table for * mark attachment type--from beginning * of GDEF header (may be Null) */ - OffsetTo<MarkGlyphSets> + Offset16To<MarkGlyphSets> markGlyphSetsDef; /* Offset to the table of mark set * definitions--from beginning of GDEF * header (may be NULL). Introduced * in version 0x00010002. */ - LOffsetTo<VariationStore> + Offset32To<VariationStore> varStore; /* Offset to the table of Item Variation * Store--from beginning of GDEF * header (may be NULL). Introduced diff --git a/thirdparty/harfbuzz/src/hb-ot-layout-gpos-table.hh b/thirdparty/harfbuzz/src/hb-ot-layout-gpos-table.hh index f523e35c00..1e305518f5 100644 --- a/thirdparty/harfbuzz/src/hb-ot-layout-gpos-table.hh +++ b/thirdparty/harfbuzz/src/hb-ot-layout-gpos-table.hh @@ -89,20 +89,22 @@ struct ValueFormat : HBUINT16 HBINT16 yAdvance; /* Vertical adjustment for advance--in * design units (only used for vertical * writing) */ - OffsetTo<Device> xPlaDevice; /* Offset to Device table for + Offset16To<Device> xPlaDevice; /* Offset to Device table for * horizontal placement--measured from * beginning of PosTable (may be NULL) */ - OffsetTo<Device> yPlaDevice; /* Offset to Device table for vertical + Offset16To<Device> yPlaDevice; /* Offset to Device table for vertical * placement--measured from beginning * of PosTable (may be NULL) */ - OffsetTo<Device> xAdvDevice; /* Offset to Device table for + Offset16To<Device> xAdvDevice; /* Offset to Device table for * horizontal advance--measured from * beginning of PosTable (may be NULL) */ - OffsetTo<Device> yAdvDevice; /* Offset to Device table for vertical + Offset16To<Device> yAdvDevice; /* Offset to Device table for vertical * advance--measured from beginning of * PosTable (may be NULL) */ #endif + IntType& operator = (uint16_t i) { v = i; return *this; } + unsigned int get_len () const { return hb_popcount ((unsigned int) *this); } unsigned int get_size () const { return get_len () * Value::static_size; } @@ -160,16 +162,40 @@ struct ValueFormat : HBUINT16 return ret; } - void serialize_copy (hb_serialize_context_t *c, const void *base, - const Value *values, const hb_map_t *layout_variation_idx_map) const + unsigned int get_effective_format (const Value *values) const + { + unsigned int format = *this; + for (unsigned flag = xPlacement; flag <= yAdvDevice; flag = flag << 1) { + if (format & flag) should_drop (*values++, (Flags) flag, &format); + } + + return format; + } + + template<typename Iterator, + hb_requires (hb_is_iterator (Iterator))> + unsigned int get_effective_format (Iterator it) const { + unsigned int new_format = 0; + + for (const hb_array_t<const Value>& values : it) + new_format = new_format | get_effective_format (&values); + + return new_format; + } + + void copy_values (hb_serialize_context_t *c, + unsigned int new_format, + const void *base, + const Value *values, + const hb_map_t *layout_variation_idx_map) const { unsigned int format = *this; if (!format) return; - if (format & xPlacement) c->copy (*values++); - if (format & yPlacement) c->copy (*values++); - if (format & xAdvance) c->copy (*values++); - if (format & yAdvance) c->copy (*values++); + if (format & xPlacement) copy_value (c, new_format, xPlacement, *values++); + if (format & yPlacement) copy_value (c, new_format, yPlacement, *values++); + if (format & xAdvance) copy_value (c, new_format, xAdvance, *values++); + if (format & yAdvance) copy_value (c, new_format, yAdvance, *values++); if (format & xPlaDevice) copy_device (c, base, values++, layout_variation_idx_map); if (format & yPlaDevice) copy_device (c, base, values++, layout_variation_idx_map); @@ -177,6 +203,16 @@ struct ValueFormat : HBUINT16 if (format & yAdvDevice) copy_device (c, base, values++, layout_variation_idx_map); } + void copy_value (hb_serialize_context_t *c, + unsigned int new_format, + Flags flag, + Value value) const + { + // Filter by new format. + if (!(new_format & flag)) return; + c->copy (value); + } + void collect_variation_indices (hb_collect_variation_indices_context_t *c, const void *base, const hb_array_t<const Value>& values) const @@ -232,14 +268,14 @@ struct ValueFormat : HBUINT16 return true; } - static inline OffsetTo<Device>& get_device (Value* value) + static inline Offset16To<Device>& get_device (Value* value) { - return *static_cast<OffsetTo<Device> *> (value); + return *static_cast<Offset16To<Device> *> (value); } - static inline const OffsetTo<Device>& get_device (const Value* value, bool *worked=nullptr) + static inline const Offset16To<Device>& get_device (const Value* value, bool *worked=nullptr) { if (worked) *worked |= bool (*value); - return *static_cast<const OffsetTo<Device> *> (value); + return *static_cast<const Offset16To<Device> *> (value); } bool copy_device (hb_serialize_context_t *c, const void *base, @@ -317,13 +353,21 @@ struct ValueFormat : HBUINT16 return_trace (true); } + + private: + + void should_drop (Value value, Flags flag, unsigned int* format) const + { + if (value) return; + *format = *format & ~flag; + } + }; -template<typename Iterator> +template<typename Iterator, typename SrcLookup> static void SinglePos_serialize (hb_serialize_context_t *c, - const void *src, + const SrcLookup *src, Iterator it, - ValueFormat valFormat, const hb_map_t *layout_variation_idx_map); @@ -346,7 +390,10 @@ struct AnchorFormat1 AnchorFormat1* copy (hb_serialize_context_t *c) const { TRACE_SERIALIZE (this); - return_trace (c->embed<AnchorFormat1> (this)); + AnchorFormat1* out = c->embed<AnchorFormat1> (this); + if (!out) return_trace (out); + out->format = 1; + return_trace (out); } protected: @@ -447,11 +494,11 @@ struct AnchorFormat3 HBUINT16 format; /* Format identifier--format = 3 */ FWORD xCoordinate; /* Horizontal value--in design units */ FWORD yCoordinate; /* Vertical value--in design units */ - OffsetTo<Device> + Offset16To<Device> xDeviceTable; /* Offset to Device table for X * coordinate-- from beginning of * Anchor table (may be NULL) */ - OffsetTo<Device> + Offset16To<Device> yDeviceTable; /* Offset to Device table for Y * coordinate-- from beginning of * Anchor table (may be NULL) */ @@ -485,14 +532,22 @@ struct Anchor } } - Anchor* copy (hb_serialize_context_t *c, const hb_map_t *layout_variation_idx_map) const + bool subset (hb_subset_context_t *c) const { - TRACE_SERIALIZE (this); + TRACE_SUBSET (this); switch (u.format) { - case 1: return_trace (reinterpret_cast<Anchor *> (u.format1.copy (c))); - case 2: return_trace (reinterpret_cast<Anchor *> (u.format2.copy (c))); - case 3: return_trace (reinterpret_cast<Anchor *> (u.format3.copy (c, layout_variation_idx_map))); - default:return_trace (nullptr); + case 1: return_trace (bool (reinterpret_cast<Anchor *> (u.format1.copy (c->serializer)))); + case 2: + if (c->plan->flags & HB_SUBSET_FLAGS_NO_HINTING) + { + // AnchorFormat 2 just containins extra hinting information, so + // if hints are being dropped convert to format 1. + return_trace (bool (reinterpret_cast<Anchor *> (u.format1.copy (c->serializer)))); + } + return_trace (bool (reinterpret_cast<Anchor *> (u.format2.copy (c->serializer)))); + case 3: return_trace (bool (reinterpret_cast<Anchor *> (u.format3.copy (c->serializer, + c->plan->layout_variation_idx_map)))); + default:return_trace (false); } } @@ -541,51 +596,29 @@ struct AnchorMatrix } template <typename Iterator, - hb_requires (hb_is_iterator (Iterator))> - bool serialize (hb_serialize_context_t *c, - unsigned num_rows, - AnchorMatrix const *offset_matrix, - const hb_map_t *layout_variation_idx_map, - Iterator index_iter) + hb_requires (hb_is_iterator (Iterator))> + bool subset (hb_subset_context_t *c, + unsigned num_rows, + Iterator index_iter) const { - TRACE_SERIALIZE (this); + TRACE_SUBSET (this); + + auto *out = c->serializer->start_embed (this); + if (!index_iter) return_trace (false); - if (unlikely (!c->extend_min ((*this)))) return_trace (false); + if (unlikely (!c->serializer->extend_min (out))) return_trace (false); - this->rows = num_rows; + out->rows = num_rows; for (const unsigned i : index_iter) { - auto *offset = c->embed (offset_matrix->matrixZ[i]); + auto *offset = c->serializer->embed (matrixZ[i]); if (!offset) return_trace (false); - offset->serialize_copy (c, offset_matrix->matrixZ[i], - offset_matrix, c->to_bias (this), - hb_serialize_context_t::Head, - layout_variation_idx_map); + offset->serialize_subset (c, matrixZ[i], this); } return_trace (true); } - bool subset (hb_subset_context_t *c, - unsigned cols, - const hb_map_t *klass_mapping) const - { - TRACE_SUBSET (this); - auto *out = c->serializer->start_embed (*this); - - auto indexes = - + hb_range (rows * cols) - | hb_filter ([=] (unsigned index) { return klass_mapping->has (index % cols); }) - ; - - out->serialize (c->serializer, - (unsigned) rows, - this, - c->plan->layout_variation_idx_map, - indexes); - return_trace (true); - } - bool sanitize (hb_sanitize_context_t *c, unsigned int cols) const { TRACE_SANITIZE (this); @@ -599,7 +632,7 @@ struct AnchorMatrix } HBUINT16 rows; /* Number of rows */ - UnsizedArrayOf<OffsetTo<Anchor>> + UnsizedArrayOf<Offset16To<Anchor>> matrixZ; /* Matrix of offsets to Anchor tables-- * from beginning of AnchorMatrix table */ public: @@ -618,18 +651,16 @@ struct MarkRecord return_trace (c->check_struct (this) && markAnchor.sanitize (c, base)); } - MarkRecord *copy (hb_serialize_context_t *c, - const void *src_base, - unsigned dst_bias, - const hb_map_t *klass_mapping, - const hb_map_t *layout_variation_idx_map) const + MarkRecord *subset (hb_subset_context_t *c, + const void *src_base, + const hb_map_t *klass_mapping) const { - TRACE_SERIALIZE (this); - auto *out = c->embed (this); + TRACE_SUBSET (this); + auto *out = c->serializer->embed (this); if (unlikely (!out)) return_trace (nullptr); out->klass = klass_mapping->get (klass); - out->markAnchor.serialize_copy (c, markAnchor, src_base, dst_bias, hb_serialize_context_t::Head, layout_variation_idx_map); + out->markAnchor.serialize_subset (c, markAnchor, src_base); return_trace (out); } @@ -641,14 +672,14 @@ struct MarkRecord protected: HBUINT16 klass; /* Class defined for this mark */ - OffsetTo<Anchor> + Offset16To<Anchor> markAnchor; /* Offset to Anchor table--from * beginning of MarkArray table */ public: DEFINE_SIZE_STATIC (4); }; -struct MarkArray : ArrayOf<MarkRecord> /* Array of MarkRecords--in Coverage order */ +struct MarkArray : Array16Of<MarkRecord> /* Array of MarkRecords--in Coverage order */ { bool apply (hb_ot_apply_context_t *c, unsigned int mark_index, unsigned int glyph_index, @@ -657,7 +688,7 @@ struct MarkArray : ArrayOf<MarkRecord> /* Array of MarkRecords--in Coverage orde { TRACE_APPLY (this); hb_buffer_t *buffer = c->buffer; - const MarkRecord &record = ArrayOf<MarkRecord>::operator[](mark_index); + const MarkRecord &record = Array16Of<MarkRecord>::operator[](mark_index); unsigned int mark_class = record.klass; const Anchor& mark_anchor = this + record.markAnchor; @@ -684,25 +715,42 @@ struct MarkArray : ArrayOf<MarkRecord> /* Array of MarkRecords--in Coverage orde return_trace (true); } - template<typename Iterator, - hb_requires (hb_is_source_of (Iterator, MarkRecord))> - bool serialize (hb_serialize_context_t *c, - const hb_map_t *klass_mapping, - const hb_map_t *layout_variation_idx_map, - const void *base, - Iterator it) + template <typename Iterator, + hb_requires (hb_is_iterator (Iterator))> + bool subset (hb_subset_context_t *c, + Iterator coverage, + const hb_map_t *klass_mapping) const { - TRACE_SERIALIZE (this); - if (unlikely (!c->extend_min (*this))) return_trace (false); - if (unlikely (!c->check_assign (len, it.len ()))) return_trace (false); - c->copy_all (it, base, c->to_bias (this), klass_mapping, layout_variation_idx_map); + TRACE_SUBSET (this); + const hb_set_t &glyphset = *c->plan->glyphset_gsub (); + + auto* out = c->serializer->start_embed (this); + if (unlikely (!c->serializer->extend_min (out))) return_trace (false); + + auto mark_iter = + + hb_zip (coverage, this->iter ()) + | hb_filter (glyphset, hb_first) + | hb_map (hb_second) + ; + + unsigned new_length = 0; + for (const auto& mark_record : mark_iter) { + if (unlikely (!mark_record.subset (c, this, klass_mapping))) + return_trace (false); + new_length++; + } + + if (unlikely (!c->serializer->check_assign (out->len, new_length, + HB_SERIALIZE_ERROR_ARRAY_OVERFLOW))) + return_trace (false); + return_trace (true); } bool sanitize (hb_sanitize_context_t *c) const { TRACE_SANITIZE (this); - return_trace (ArrayOf<MarkRecord>::sanitize (c, this)); + return_trace (Array16Of<MarkRecord>::sanitize (c, this)); } }; @@ -733,6 +781,8 @@ struct SinglePosFormat1 const Coverage &get_coverage () const { return this+coverage; } + ValueFormat get_value_format () const { return valueFormat; } + bool apply (hb_ot_apply_context_t *c) const { TRACE_APPLY (this); @@ -747,29 +797,33 @@ struct SinglePosFormat1 } template<typename Iterator, - hb_requires (hb_is_iterator (Iterator))> + typename SrcLookup, + hb_requires (hb_is_iterator (Iterator))> void serialize (hb_serialize_context_t *c, - const void *src, + const SrcLookup *src, Iterator it, - ValueFormat valFormat, + ValueFormat newFormat, const hb_map_t *layout_variation_idx_map) { - auto out = c->extend_min (*this); - if (unlikely (!out)) return; - if (unlikely (!c->check_assign (valueFormat, valFormat))) return; + if (unlikely (!c->extend_min (this))) return; + if (unlikely (!c->check_assign (valueFormat, + newFormat, + HB_SERIALIZE_ERROR_INT_OVERFLOW))) return; - + it - | hb_map (hb_second) - | hb_apply ([&] (hb_array_t<const Value> _) - { valFormat.serialize_copy (c, src, &_, layout_variation_idx_map); }) - ; + for (const hb_array_t<const Value>& _ : + it | hb_map (hb_second)) + { + src->get_value_format ().copy_values (c, newFormat, src, &_, layout_variation_idx_map); + // Only serialize the first entry in the iterator, the rest are assumed to + // be the same. + break; + } auto glyphs = + it | hb_map_retains_sorting (hb_first) ; - coverage.serialize (c, this).serialize (c, glyphs); + coverage.serialize_serialize (c, glyphs); } bool subset (hb_subset_context_t *c) const @@ -786,7 +840,7 @@ struct SinglePosFormat1 ; bool ret = bool (it); - SinglePos_serialize (c->serializer, this, it, valueFormat, c->plan->layout_variation_idx_map); + SinglePos_serialize (c->serializer, this, it, c->plan->layout_variation_idx_map); return_trace (ret); } @@ -800,7 +854,7 @@ struct SinglePosFormat1 protected: HBUINT16 format; /* Format identifier--format = 1 */ - OffsetTo<Coverage> + Offset16To<Coverage> coverage; /* Offset to Coverage table--from * beginning of subtable */ ValueFormat valueFormat; /* Defines the types of data in the @@ -843,6 +897,8 @@ struct SinglePosFormat2 const Coverage &get_coverage () const { return this+coverage; } + ValueFormat get_value_format () const { return valueFormat; } + bool apply (hb_ot_apply_context_t *c) const { TRACE_APPLY (this); @@ -861,22 +917,23 @@ struct SinglePosFormat2 } template<typename Iterator, - hb_requires (hb_is_iterator (Iterator))> + typename SrcLookup, + hb_requires (hb_is_iterator (Iterator))> void serialize (hb_serialize_context_t *c, - const void *src, + const SrcLookup *src, Iterator it, - ValueFormat valFormat, + ValueFormat newFormat, const hb_map_t *layout_variation_idx_map) { - auto out = c->extend_min (*this); + auto out = c->extend_min (this); if (unlikely (!out)) return; - if (unlikely (!c->check_assign (valueFormat, valFormat))) return; - if (unlikely (!c->check_assign (valueCount, it.len ()))) return; + if (unlikely (!c->check_assign (valueFormat, newFormat, HB_SERIALIZE_ERROR_INT_OVERFLOW))) return; + if (unlikely (!c->check_assign (valueCount, it.len (), HB_SERIALIZE_ERROR_ARRAY_OVERFLOW))) return; + it | hb_map (hb_second) | hb_apply ([&] (hb_array_t<const Value> _) - { valFormat.serialize_copy (c, src, &_, layout_variation_idx_map); }) + { src->get_value_format ().copy_values (c, newFormat, src, &_, layout_variation_idx_map); }) ; auto glyphs = @@ -884,7 +941,7 @@ struct SinglePosFormat2 | hb_map_retains_sorting (hb_first) ; - coverage.serialize (c, this).serialize (c, glyphs); + coverage.serialize_serialize (c, glyphs); } bool subset (hb_subset_context_t *c) const @@ -908,7 +965,7 @@ struct SinglePosFormat2 ; bool ret = bool (it); - SinglePos_serialize (c->serializer, this, it, valueFormat, c->plan->layout_variation_idx_map); + SinglePos_serialize (c->serializer, this, it, c->plan->layout_variation_idx_map); return_trace (ret); } @@ -922,7 +979,7 @@ struct SinglePosFormat2 protected: HBUINT16 format; /* Format identifier--format = 2 */ - OffsetTo<Coverage> + Offset16To<Coverage> coverage; /* Offset to Coverage table--from * beginning of subtable */ ValueFormat valueFormat; /* Defines the types of data in the @@ -952,24 +1009,37 @@ struct SinglePos template<typename Iterator, - hb_requires (hb_is_iterator (Iterator))> + typename SrcLookup, + hb_requires (hb_is_iterator (Iterator))> void serialize (hb_serialize_context_t *c, - const void *src, + const SrcLookup* src, Iterator glyph_val_iter_pairs, - ValueFormat valFormat, const hb_map_t *layout_variation_idx_map) { if (unlikely (!c->extend_min (u.format))) return; unsigned format = 2; + ValueFormat new_format = src->get_value_format (); - if (glyph_val_iter_pairs) format = get_format (glyph_val_iter_pairs); + if (glyph_val_iter_pairs) + { + format = get_format (glyph_val_iter_pairs); + new_format = src->get_value_format ().get_effective_format (+ glyph_val_iter_pairs | hb_map (hb_second)); + } u.format = format; switch (u.format) { - case 1: u.format1.serialize (c, src, glyph_val_iter_pairs, valFormat, layout_variation_idx_map); - return; - case 2: u.format2.serialize (c, src, glyph_val_iter_pairs, valFormat, layout_variation_idx_map); - return; + case 1: u.format1.serialize (c, + src, + glyph_val_iter_pairs, + new_format, + layout_variation_idx_map); + return; + case 2: u.format2.serialize (c, + src, + glyph_val_iter_pairs, + new_format, + layout_variation_idx_map); + return; default:return; } } @@ -994,14 +1064,13 @@ struct SinglePos } u; }; -template<typename Iterator> +template<typename Iterator, typename SrcLookup> static void SinglePos_serialize (hb_serialize_context_t *c, - const void *src, + const SrcLookup *src, Iterator it, - ValueFormat valFormat, const hb_map_t *layout_variation_idx_map) -{ c->start_embed<SinglePos> ()->serialize (c, src, it, valFormat, layout_variation_idx_map); } +{ c->start_embed<SinglePos> ()->serialize (c, src, it, layout_variation_idx_map); } struct PairValueRecord @@ -1011,26 +1080,35 @@ struct PairValueRecord int cmp (hb_codepoint_t k) const { return secondGlyph.cmp (k); } - struct serialize_closure_t + struct context_t { const void *base; const ValueFormat *valueFormats; + const ValueFormat *newFormats; unsigned len1; /* valueFormats[0].get_len() */ const hb_map_t *glyph_map; const hb_map_t *layout_variation_idx_map; }; - bool serialize (hb_serialize_context_t *c, - serialize_closure_t *closure) const + bool subset (hb_subset_context_t *c, + context_t *closure) const { TRACE_SERIALIZE (this); - auto *out = c->start_embed (*this); - if (unlikely (!c->extend_min (out))) return_trace (false); + auto *s = c->serializer; + auto *out = s->start_embed (*this); + if (unlikely (!s->extend_min (out))) return_trace (false); out->secondGlyph = (*closure->glyph_map)[secondGlyph]; - closure->valueFormats[0].serialize_copy (c, closure->base, &values[0], closure->layout_variation_idx_map); - closure->valueFormats[1].serialize_copy (c, closure->base, &values[closure->len1], closure->layout_variation_idx_map); + closure->valueFormats[0].copy_values (s, + closure->newFormats[0], + closure->base, &values[0], + closure->layout_variation_idx_map); + closure->valueFormats[1].copy_values (s, + closure->newFormats[1], + closure->base, + &values[closure->len1], + closure->layout_variation_idx_map); return_trace (true); } @@ -1050,6 +1128,21 @@ struct PairValueRecord valueFormats[1].collect_variation_indices (c, base, values_array.sub_array (record1_len, record2_len)); } + bool intersects (const hb_set_t& glyphset) const + { + return glyphset.has(secondGlyph); + } + + const Value* get_values_1 () const + { + return &values[0]; + } + + const Value* get_values_2 (ValueFormat format1) const + { + return &values[format1.get_len ()]; + } + protected: HBGlyphID secondGlyph; /* GlyphID of second glyph in the * pair--first glyph is listed in the @@ -1140,7 +1233,8 @@ struct PairSet } bool subset (hb_subset_context_t *c, - const ValueFormat valueFormats[2]) const + const ValueFormat valueFormats[2], + const ValueFormat newFormats[2]) const { TRACE_SUBSET (this); auto snap = c->serializer->snapshot (); @@ -1156,10 +1250,11 @@ struct PairSet unsigned len2 = valueFormats[1].get_len (); unsigned record_size = HBUINT16::static_size + Value::static_size * (len1 + len2); - PairValueRecord::serialize_closure_t closure = + PairValueRecord::context_t context = { this, valueFormats, + newFormats, len1, &glyph_map, c->plan->layout_variation_idx_map @@ -1170,7 +1265,7 @@ struct PairSet for (unsigned i = 0; i < count; i++) { if (glyphset.has (record->secondGlyph) - && record->serialize (c->serializer, &closure)) num++; + && record->subset (c, &context)) num++; record = &StructAtOffset<const PairValueRecord> (record, record_size); } @@ -1218,7 +1313,7 @@ struct PairPosFormat1 + hb_zip (this+coverage, pairSet) | hb_filter (*glyphs, hb_first) | hb_map (hb_second) - | hb_map ([glyphs, this] (const OffsetTo<PairSet> &_) + | hb_map ([glyphs, this] (const Offset16To<PairSet> &_) { return (this+_).intersects (glyphs, valueFormat); }) | hb_any ; @@ -1278,17 +1373,23 @@ struct PairPosFormat1 out->format = format; out->valueFormat[0] = valueFormat[0]; out->valueFormat[1] = valueFormat[1]; + if (c->plan->flags & HB_SUBSET_FLAGS_NO_HINTING) + { + hb_pair_t<unsigned, unsigned> newFormats = compute_effective_value_formats (glyphset); + out->valueFormat[0] = newFormats.first; + out->valueFormat[1] = newFormats.second; + } hb_sorted_vector_t<hb_codepoint_t> new_coverage; + hb_zip (this+coverage, pairSet) | hb_filter (glyphset, hb_first) - | hb_filter ([this, c, out] (const OffsetTo<PairSet>& _) + | hb_filter ([this, c, out] (const Offset16To<PairSet>& _) { auto *o = out->pairSet.serialize_append (c->serializer); if (unlikely (!o)) return false; auto snap = c->serializer->snapshot (); - bool ret = o->serialize_subset (c, _, this, valueFormat); + bool ret = o->serialize_subset (c, _, this, valueFormat, out->valueFormat); if (!ret) { out->pairSet.pop (); @@ -1302,12 +1403,41 @@ struct PairPosFormat1 | hb_sink (new_coverage) ; - out->coverage.serialize (c->serializer, out) - .serialize (c->serializer, new_coverage.iter ()); + out->coverage.serialize_serialize (c->serializer, new_coverage.iter ()); return_trace (bool (new_coverage)); } + + hb_pair_t<unsigned, unsigned> compute_effective_value_formats (const hb_set_t& glyphset) const + { + unsigned len1 = valueFormat[0].get_len (); + unsigned len2 = valueFormat[1].get_len (); + unsigned record_size = HBUINT16::static_size + Value::static_size * (len1 + len2); + + unsigned format1 = 0; + unsigned format2 = 0; + for (const Offset16To<PairSet>& _ : + + hb_zip (this+coverage, pairSet) | hb_filter (glyphset, hb_first) | hb_map (hb_second)) + { + const PairSet& set = (this + _); + const PairValueRecord *record = &set.firstPairValueRecord; + + for (unsigned i = 0; i < set.len; i++) + { + if (record->intersects (glyphset)) + { + format1 = format1 | valueFormat[0].get_effective_format (record->get_values_1 ()); + format2 = format2 | valueFormat[1].get_effective_format (record->get_values_2 (valueFormat[0])); + } + record = &StructAtOffset<const PairValueRecord> (record, record_size); + } + } + + return hb_pair (format1, format2); + } + + bool sanitize (hb_sanitize_context_t *c) const { TRACE_SANITIZE (this); @@ -1328,7 +1458,7 @@ struct PairPosFormat1 protected: HBUINT16 format; /* Format identifier--format = 1 */ - OffsetTo<Coverage> + Offset16To<Coverage> coverage; /* Offset to Coverage table--from * beginning of subtable */ ValueFormat valueFormat[2]; /* [0] Defines the types of data in @@ -1337,7 +1467,7 @@ struct PairPosFormat1 /* [1] Defines the types of data in * ValueRecord2--for the second glyph * in the pair--may be zero (0) */ - OffsetArrayOf<PairSet> + Array16OfOffset16To<PairSet> pairSet; /* Array of PairSet tables * ordered by Coverage Index */ public: @@ -1355,18 +1485,35 @@ struct PairPosFormat2 void closure_lookups (hb_closure_lookups_context_t *c) const {} void collect_variation_indices (hb_collect_variation_indices_context_t *c) const { + if (!intersects (c->glyph_set)) return; if ((!valueFormat1.has_device ()) && (!valueFormat2.has_device ())) return; + hb_set_t klass1_glyphs, klass2_glyphs; + if (!(this+classDef1).collect_coverage (&klass1_glyphs)) return; + if (!(this+classDef2).collect_coverage (&klass2_glyphs)) return; + hb_set_t class1_set, class2_set; - for (const unsigned cp : c->glyph_set->iter ()) + for (const unsigned cp : + c->glyph_set->iter () | hb_filter (this + coverage)) + { + if (!klass1_glyphs.has (cp)) class1_set.add (0); + else + { + unsigned klass1 = (this+classDef1).get (cp); + class1_set.add (klass1); + } + } + + class2_set.add (0); + for (const unsigned cp : + c->glyph_set->iter () | hb_filter (klass2_glyphs)) { - unsigned klass1 = (this+classDef1).get (cp); unsigned klass2 = (this+classDef2).get (cp); - class1_set.add (klass1); class2_set.add (klass2); } - if (class1_set.is_empty () || class2_set.is_empty ()) return; + if (class1_set.is_empty () + || class2_set.is_empty () + || (class2_set.get_population() == 1 && class2_set.has(0))) + return; unsigned len1 = valueFormat1.get_len (); unsigned len2 = valueFormat2.get_len (); @@ -1431,35 +1578,34 @@ struct PairPosFormat2 auto *out = c->serializer->start_embed (*this); if (unlikely (!c->serializer->extend_min (out))) return_trace (false); out->format = format; - out->valueFormat1 = valueFormat1; - out->valueFormat2 = valueFormat2; hb_map_t klass1_map; - out->classDef1.serialize_subset (c, classDef1, this, &klass1_map); + out->classDef1.serialize_subset (c, classDef1, this, &klass1_map, true, true, &(this + coverage)); out->class1Count = klass1_map.get_population (); hb_map_t klass2_map; - out->classDef2.serialize_subset (c, classDef2, this, &klass2_map); + out->classDef2.serialize_subset (c, classDef2, this, &klass2_map, true, false); out->class2Count = klass2_map.get_population (); unsigned len1 = valueFormat1.get_len (); unsigned len2 = valueFormat2.get_len (); - + hb_range ((unsigned) class1Count) - | hb_filter (klass1_map) - | hb_apply ([&] (const unsigned class1_idx) - { - + hb_range ((unsigned) class2Count) - | hb_filter (klass2_map) - | hb_apply ([&] (const unsigned class2_idx) - { - unsigned idx = (class1_idx * (unsigned) class2Count + class2_idx) * (len1 + len2); - valueFormat1.serialize_copy (c->serializer, this, &values[idx], c->plan->layout_variation_idx_map); - valueFormat2.serialize_copy (c->serializer, this, &values[idx + len1], c->plan->layout_variation_idx_map); - }) - ; - }) - ; + hb_pair_t<unsigned, unsigned> newFormats = hb_pair (valueFormat1, valueFormat2); + if (c->plan->flags & HB_SUBSET_FLAGS_NO_HINTING) + newFormats = compute_effective_value_formats (klass1_map, klass2_map); + + out->valueFormat1 = newFormats.first; + out->valueFormat2 = newFormats.second; + + for (unsigned class1_idx : + hb_range ((unsigned) class1Count) | hb_filter (klass1_map)) + { + for (unsigned class2_idx : + hb_range ((unsigned) class2Count) | hb_filter (klass2_map)) + { + unsigned idx = (class1_idx * (unsigned) class2Count + class2_idx) * (len1 + len2); + valueFormat1.copy_values (c->serializer, newFormats.first, this, &values[idx], c->plan->layout_variation_idx_map); + valueFormat2.copy_values (c->serializer, newFormats.second, this, &values[idx + len1], c->plan->layout_variation_idx_map); + } + } const hb_set_t &glyphset = *c->plan->glyphset_gsub (); const hb_map_t &glyph_map = *c->plan->glyph_map; @@ -1470,10 +1616,34 @@ struct PairPosFormat2 | hb_map_retains_sorting (glyph_map) ; - out->coverage.serialize (c->serializer, out).serialize (c->serializer, it); + out->coverage.serialize_serialize (c->serializer, it); return_trace (out->class1Count && out->class2Count && bool (it)); } + + hb_pair_t<unsigned, unsigned> compute_effective_value_formats (const hb_map_t& klass1_map, + const hb_map_t& klass2_map) const + { + unsigned len1 = valueFormat1.get_len (); + unsigned len2 = valueFormat2.get_len (); + + unsigned format1 = 0; + unsigned format2 = 0; + + for (unsigned class1_idx : + hb_range ((unsigned) class1Count) | hb_filter (klass1_map)) + { + for (unsigned class2_idx : + hb_range ((unsigned) class2Count) | hb_filter (klass2_map)) + { + unsigned idx = (class1_idx * (unsigned) class2Count + class2_idx) * (len1 + len2); + format1 = format1 | valueFormat1.get_effective_format (&values[idx]); + format2 = format2 | valueFormat2.get_effective_format (&values[idx + len1]); + } + } + + return hb_pair (format1, format2); + } + + bool sanitize (hb_sanitize_context_t *c) const { TRACE_SANITIZE (this); @@ -1496,7 +1666,7 @@ struct PairPosFormat2 protected: HBUINT16 format; /* Format identifier--format = 2 */ - OffsetTo<Coverage> + Offset16To<Coverage> coverage; /* Offset to Coverage table--from * beginning of subtable */ ValueFormat valueFormat1; /* ValueRecord definition--for the @@ -1505,11 +1675,11 @@ struct PairPosFormat2 ValueFormat valueFormat2; /* ValueRecord definition--for the * second glyph of the pair--may be * zero (0) */ - OffsetTo<ClassDef> + Offset16To<ClassDef> classDef1; /* Offset to ClassDef table--from * beginning of PairPos subtable--for * the first glyph of the pair */ - OffsetTo<ClassDef> + Offset16To<ClassDef> classDef2; /* Offset to ClassDef table--from * beginning of PairPos subtable--for * the second glyph of the pair */ @@ -1564,26 +1734,24 @@ struct EntryExitRecord (src_base+exitAnchor).collect_variation_indices (c); } - EntryExitRecord* copy (hb_serialize_context_t *c, - const void *src_base, - const void *dst_base, - const hb_map_t *layout_variation_idx_map) const + EntryExitRecord* subset (hb_subset_context_t *c, + const void *src_base) const { TRACE_SERIALIZE (this); - auto *out = c->embed (this); + auto *out = c->serializer->embed (this); if (unlikely (!out)) return_trace (nullptr); - out->entryAnchor.serialize_copy (c, entryAnchor, src_base, c->to_bias (dst_base), hb_serialize_context_t::Head, layout_variation_idx_map); - out->exitAnchor.serialize_copy (c, exitAnchor, src_base, c->to_bias (dst_base), hb_serialize_context_t::Head, layout_variation_idx_map); + out->entryAnchor.serialize_subset (c, entryAnchor, src_base); + out->exitAnchor.serialize_subset (c, exitAnchor, src_base); return_trace (out); } protected: - OffsetTo<Anchor> + Offset16To<Anchor> entryAnchor; /* Offset to EntryAnchor table--from * beginning of CursivePos * subtable--may be NULL */ - OffsetTo<Anchor> + Offset16To<Anchor> exitAnchor; /* Offset to ExitAnchor table--from * beginning of CursivePos * subtable--may be NULL */ @@ -1712,7 +1880,7 @@ struct CursivePosFormat1 else pos[child].x_offset = x_offset; - /* If parent was attached to child, break them free. + /* If parent was attached to child, separate them. * https://github.com/harfbuzz/harfbuzz/issues/2469 */ if (unlikely (pos[parent].attach_chain() == -pos[child].attach_chain())) @@ -1724,25 +1892,24 @@ struct CursivePosFormat1 template <typename Iterator, hb_requires (hb_is_iterator (Iterator))> - void serialize (hb_serialize_context_t *c, + void serialize (hb_subset_context_t *c, Iterator it, - const void *src_base, - const hb_map_t *layout_variation_idx_map) + const void *src_base) { - if (unlikely (!c->extend_min ((*this)))) return; + if (unlikely (!c->serializer->extend_min ((*this)))) return; this->format = 1; this->entryExitRecord.len = it.len (); for (const EntryExitRecord& entry_record : + it | hb_map (hb_second)) - c->copy (entry_record, src_base, this, layout_variation_idx_map); + entry_record.subset (c, src_base); auto glyphs = + it | hb_map_retains_sorting (hb_first) ; - coverage.serialize (c, this).serialize (c, glyphs); + coverage.serialize_serialize (c->serializer, glyphs); } bool subset (hb_subset_context_t *c) const @@ -1762,7 +1929,7 @@ struct CursivePosFormat1 ; bool ret = bool (it); - out->serialize (c->serializer, it, this, c->plan->layout_variation_idx_map); + out->serialize (c, it, this); return_trace (ret); } @@ -1774,10 +1941,10 @@ struct CursivePosFormat1 protected: HBUINT16 format; /* Format identifier--format = 1 */ - OffsetTo<Coverage> + Offset16To<Coverage> coverage; /* Offset to Coverage table--from * beginning of subtable */ - ArrayOf<EntryExitRecord> + Array16Of<EntryExitRecord> entryExitRecord; /* Array of EntryExit records--in * Coverage Index order */ public: @@ -1949,13 +2116,12 @@ struct MarkBasePosFormat1 | hb_sink (new_coverage) ; - if (!out->markCoverage.serialize (c->serializer, out) - .serialize (c->serializer, new_coverage.iter ())) + if (!out->markCoverage.serialize_serialize (c->serializer, new_coverage.iter ())) return_trace (false); - out->markArray.serialize (c->serializer, out) - .serialize (c->serializer, &klass_mapping, c->plan->layout_variation_idx_map, &(this+markArray), + mark_iter - | hb_map (hb_second)); + out->markArray.serialize_subset (c, markArray, this, + (this+markCoverage).iter (), + &klass_mapping); unsigned basecount = (this+baseArray).rows; auto base_iter = @@ -1970,8 +2136,7 @@ struct MarkBasePosFormat1 | hb_sink (new_coverage) ; - if (!out->baseCoverage.serialize (c->serializer, out) - .serialize (c->serializer, new_coverage.iter ())) + if (!out->baseCoverage.serialize_serialize (c->serializer, new_coverage.iter ())) return_trace (false); hb_sorted_vector_t<unsigned> base_indexes; @@ -1984,8 +2149,10 @@ struct MarkBasePosFormat1 | hb_sink (base_indexes) ; } - out->baseArray.serialize (c->serializer, out) - .serialize (c->serializer, base_iter.len (), &(this+baseArray), c->plan->layout_variation_idx_map, base_indexes.iter ()); + + out->baseArray.serialize_subset (c, baseArray, this, + base_iter.len (), + base_indexes.iter ()); return_trace (true); } @@ -2002,17 +2169,17 @@ struct MarkBasePosFormat1 protected: HBUINT16 format; /* Format identifier--format = 1 */ - OffsetTo<Coverage> + Offset16To<Coverage> markCoverage; /* Offset to MarkCoverage table--from * beginning of MarkBasePos subtable */ - OffsetTo<Coverage> + Offset16To<Coverage> baseCoverage; /* Offset to BaseCoverage table--from * beginning of MarkBasePos subtable */ HBUINT16 classCount; /* Number of classes defined for marks */ - OffsetTo<MarkArray> + Offset16To<MarkArray> markArray; /* Offset to MarkArray table--from * beginning of MarkBasePos subtable */ - OffsetTo<BaseArray> + Offset16To<BaseArray> baseArray; /* Offset to BaseArray table--from * beginning of MarkBasePos subtable */ public: @@ -2046,12 +2213,12 @@ typedef AnchorMatrix LigatureAttach; /* component-major-- * ordered by class--zero-based. */ /* Array of LigatureAttach tables ordered by LigatureCoverage Index */ -struct LigatureArray : OffsetListOf<LigatureAttach> +struct LigatureArray : List16OfOffset16To<LigatureAttach> { template <typename Iterator, hb_requires (hb_is_iterator (Iterator))> bool subset (hb_subset_context_t *c, - Iterator coverage, + Iterator coverage, unsigned class_count, const hb_map_t *klass_mapping) const { @@ -2067,11 +2234,16 @@ struct LigatureArray : OffsetListOf<LigatureAttach> auto *matrix = out->serialize_append (c->serializer); if (unlikely (!matrix)) return_trace (false); + const LigatureAttach& src = (this + _.second); + auto indexes = + + hb_range (src.rows * class_count) + | hb_filter ([=] (unsigned index) { return klass_mapping->has (index % class_count); }) + ; matrix->serialize_subset (c, _.second, this, - class_count, - klass_mapping); + src.rows, + indexes); } return_trace (this->len); } @@ -2201,17 +2373,12 @@ struct MarkLigPosFormat1 | hb_map_retains_sorting (glyph_map) ; - if (!out->markCoverage.serialize (c->serializer, out) - .serialize (c->serializer, new_mark_coverage)) + if (!out->markCoverage.serialize_serialize (c->serializer, new_mark_coverage)) return_trace (false); - out->markArray.serialize (c->serializer, out) - .serialize (c->serializer, - &klass_mapping, - c->plan->layout_variation_idx_map, - &(this+markArray), - + mark_iter - | hb_map (hb_second)); + out->markArray.serialize_subset (c, markArray, this, + (this+markCoverage).iter (), + &klass_mapping); auto new_ligature_coverage = + hb_iter (this + ligatureCoverage) @@ -2219,8 +2386,7 @@ struct MarkLigPosFormat1 | hb_map_retains_sorting (glyph_map) ; - if (!out->ligatureCoverage.serialize (c->serializer, out) - .serialize (c->serializer, new_ligature_coverage)) + if (!out->ligatureCoverage.serialize_serialize (c->serializer, new_ligature_coverage)) return_trace (false); out->ligatureArray.serialize_subset (c, ligatureArray, this, @@ -2241,18 +2407,18 @@ struct MarkLigPosFormat1 protected: HBUINT16 format; /* Format identifier--format = 1 */ - OffsetTo<Coverage> + Offset16To<Coverage> markCoverage; /* Offset to Mark Coverage table--from * beginning of MarkLigPos subtable */ - OffsetTo<Coverage> + Offset16To<Coverage> ligatureCoverage; /* Offset to Ligature Coverage * table--from beginning of MarkLigPos * subtable */ HBUINT16 classCount; /* Number of defined mark classes */ - OffsetTo<MarkArray> + Offset16To<MarkArray> markArray; /* Offset to MarkArray table--from * beginning of MarkLigPos subtable */ - OffsetTo<LigatureArray> + Offset16To<LigatureArray> ligatureArray; /* Offset to LigatureArray table--from * beginning of MarkLigPos subtable */ public: @@ -2409,13 +2575,12 @@ struct MarkMarkPosFormat1 | hb_sink (new_coverage) ; - if (!out->mark1Coverage.serialize (c->serializer, out) - .serialize (c->serializer, new_coverage.iter ())) + if (!out->mark1Coverage.serialize_serialize (c->serializer, new_coverage.iter ())) return_trace (false); - out->mark1Array.serialize (c->serializer, out) - .serialize (c->serializer, &klass_mapping, c->plan->layout_variation_idx_map, &(this+mark1Array), + mark1_iter - | hb_map (hb_second)); + out->mark1Array.serialize_subset (c, mark1Array, this, + (this+mark1Coverage).iter (), + &klass_mapping); unsigned mark2count = (this+mark2Array).rows; auto mark2_iter = @@ -2430,8 +2595,7 @@ struct MarkMarkPosFormat1 | hb_sink (new_coverage) ; - if (!out->mark2Coverage.serialize (c->serializer, out) - .serialize (c->serializer, new_coverage.iter ())) + if (!out->mark2Coverage.serialize_serialize (c->serializer, new_coverage.iter ())) return_trace (false); hb_sorted_vector_t<unsigned> mark2_indexes; @@ -2444,8 +2608,8 @@ struct MarkMarkPosFormat1 | hb_sink (mark2_indexes) ; } - out->mark2Array.serialize (c->serializer, out) - .serialize (c->serializer, mark2_iter.len (), &(this+mark2Array), c->plan->layout_variation_idx_map, mark2_indexes.iter ()); + + out->mark2Array.serialize_subset (c, mark2Array, this, mark2_iter.len (), mark2_indexes.iter ()); return_trace (true); } @@ -2462,19 +2626,19 @@ struct MarkMarkPosFormat1 protected: HBUINT16 format; /* Format identifier--format = 1 */ - OffsetTo<Coverage> + Offset16To<Coverage> mark1Coverage; /* Offset to Combining Mark1 Coverage * table--from beginning of MarkMarkPos * subtable */ - OffsetTo<Coverage> + Offset16To<Coverage> mark2Coverage; /* Offset to Combining Mark2 Coverage * table--from beginning of MarkMarkPos * subtable */ HBUINT16 classCount; /* Number of defined mark classes */ - OffsetTo<MarkArray> + Offset16To<MarkArray> mark1Array; /* Offset to Mark1Array table--from * beginning of MarkMarkPos subtable */ - OffsetTo<Mark2Array> + Offset16To<Mark2Array> mark2Array; /* Offset to Mark2Array table--from * beginning of MarkMarkPos subtable */ public: @@ -2663,7 +2827,7 @@ struct GPOS : GSUBGPOS bool subset (hb_subset_context_t *c) const { - hb_subset_layout_context_t l (c, tableTag, c->plan->gpos_lookups, c->plan->gpos_features); + hb_subset_layout_context_t l (c, tableTag, c->plan->gpos_lookups, c->plan->gpos_langsys, c->plan->gpos_features); return GSUBGPOS::subset<PosLookup> (&l); } diff --git a/thirdparty/harfbuzz/src/hb-ot-layout-gsub-table.hh b/thirdparty/harfbuzz/src/hb-ot-layout-gsub-table.hh index 5f10ecb7ee..393ada1351 100644 --- a/thirdparty/harfbuzz/src/hb-ot-layout-gsub-table.hh +++ b/thirdparty/harfbuzz/src/hb-ot-layout-gsub-table.hh @@ -46,14 +46,19 @@ struct SingleSubstFormat1 bool intersects (const hb_set_t *glyphs) const { return (this+coverage).intersects (glyphs); } + bool may_have_non_1to1 () const + { return false; } + void closure (hb_closure_context_t *c) const { unsigned d = deltaGlyphID; + + hb_iter (this+coverage) - | hb_filter (*c->glyphs) + | hb_filter (c->parent_active_glyphs ()) | hb_map ([d] (hb_codepoint_t g) { return (g + d) & 0xFFFFu; }) | hb_sink (c->output) ; + } void closure_lookups (hb_closure_lookups_context_t *c) const {} @@ -95,9 +100,9 @@ struct SingleSubstFormat1 unsigned delta) { TRACE_SERIALIZE (this); - if (unlikely (!c->extend_min (*this))) return_trace (false); - if (unlikely (!coverage.serialize (c, this).serialize (c, glyphs))) return_trace (false); - c->check_assign (deltaGlyphID, delta); + if (unlikely (!c->extend_min (this))) return_trace (false); + if (unlikely (!coverage.serialize_serialize (c, glyphs))) return_trace (false); + c->check_assign (deltaGlyphID, delta, HB_SERIALIZE_ERROR_INT_OVERFLOW); return_trace (true); } @@ -133,7 +138,7 @@ struct SingleSubstFormat1 protected: HBUINT16 format; /* Format identifier--format = 1 */ - OffsetTo<Coverage> + Offset16To<Coverage> coverage; /* Offset to Coverage table--from * beginning of Substitution table */ HBUINT16 deltaGlyphID; /* Add to original GlyphID to get @@ -147,13 +152,17 @@ struct SingleSubstFormat2 bool intersects (const hb_set_t *glyphs) const { return (this+coverage).intersects (glyphs); } + bool may_have_non_1to1 () const + { return false; } + void closure (hb_closure_context_t *c) const { + hb_zip (this+coverage, substitute) - | hb_filter (*c->glyphs, hb_first) + | hb_filter (c->parent_active_glyphs (), hb_first) | hb_map (hb_second) | hb_sink (c->output) ; + } void closure_lookups (hb_closure_lookups_context_t *c) const {} @@ -200,9 +209,9 @@ struct SingleSubstFormat2 + it | hb_map_retains_sorting (hb_first) ; - if (unlikely (!c->extend_min (*this))) return_trace (false); + if (unlikely (!c->extend_min (this))) return_trace (false); if (unlikely (!substitute.serialize (c, substitutes))) return_trace (false); - if (unlikely (!coverage.serialize (c, this).serialize (c, glyphs))) return_trace (false); + if (unlikely (!coverage.serialize_serialize (c, glyphs))) return_trace (false); return_trace (true); } @@ -233,10 +242,10 @@ struct SingleSubstFormat2 protected: HBUINT16 format; /* Format identifier--format = 2 */ - OffsetTo<Coverage> + Offset16To<Coverage> coverage; /* Offset to Coverage table--from * beginning of Substitution table */ - ArrayOf<HBGlyphID> + Array16Of<HBGlyphID> substitute; /* Array of substitute * GlyphIDs--ordered by Coverage Index */ public: @@ -334,9 +343,14 @@ struct Sequence unsigned int klass = _hb_glyph_info_is_ligature (&c->buffer->cur()) ? HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH : 0; + unsigned lig_id = _hb_glyph_info_get_lig_id (&c->buffer->cur()); - for (unsigned int i = 0; i < count; i++) { - _hb_glyph_info_set_lig_props_for_component (&c->buffer->cur(), i); + for (unsigned int i = 0; i < count; i++) + { + /* If is attached to a ligature, don't disturb that. + * https://github.com/harfbuzz/harfbuzz/issues/3069 */ + if (!lig_id) + _hb_glyph_info_set_lig_props_for_component (&c->buffer->cur(), i); c->output_glyph_for_component (substitute.arrayZ[i], klass); } c->buffer->skip_glyph (); @@ -377,7 +391,7 @@ struct Sequence } protected: - ArrayOf<HBGlyphID> + Array16Of<HBGlyphID> substitute; /* String of GlyphIDs to substitute */ public: DEFINE_SIZE_ARRAY (2, substitute); @@ -388,10 +402,13 @@ struct MultipleSubstFormat1 bool intersects (const hb_set_t *glyphs) const { return (this+coverage).intersects (glyphs); } + bool may_have_non_1to1 () const + { return true; } + void closure (hb_closure_context_t *c) const { + hb_zip (this+coverage, sequence) - | hb_filter (*c->glyphs, hb_first) + | hb_filter (c->parent_active_glyphs (), hb_first) | hb_map (hb_second) | hb_map (hb_add (this)) | hb_apply ([c] (const Sequence &_) { _.closure (c); }) @@ -431,17 +448,17 @@ struct MultipleSubstFormat1 hb_array_t<const HBGlyphID> substitute_glyphs_list) { TRACE_SERIALIZE (this); - if (unlikely (!c->extend_min (*this))) return_trace (false); + if (unlikely (!c->extend_min (this))) return_trace (false); if (unlikely (!sequence.serialize (c, glyphs.length))) return_trace (false); for (unsigned int i = 0; i < glyphs.length; i++) { unsigned int substitute_len = substitute_len_list[i]; - if (unlikely (!sequence[i].serialize (c, this) - .serialize (c, substitute_glyphs_list.sub_array (0, substitute_len)))) + if (unlikely (!sequence[i] + .serialize_serialize (c, substitute_glyphs_list.sub_array (0, substitute_len)))) return_trace (false); substitute_glyphs_list += substitute_len; } - return_trace (coverage.serialize (c, this).serialize (c, glyphs)); + return_trace (coverage.serialize_serialize (c, glyphs)); } bool subset (hb_subset_context_t *c) const @@ -462,8 +479,7 @@ struct MultipleSubstFormat1 | hb_map (glyph_map) | hb_sink (new_coverage) ; - out->coverage.serialize (c->serializer, out) - .serialize (c->serializer, new_coverage.iter ()); + out->coverage.serialize_serialize (c->serializer, new_coverage.iter ()); return_trace (bool (new_coverage)); } @@ -475,10 +491,10 @@ struct MultipleSubstFormat1 protected: HBUINT16 format; /* Format identifier--format = 1 */ - OffsetTo<Coverage> + Offset16To<Coverage> coverage; /* Offset to Coverage table--from * beginning of Substitution table */ - OffsetArrayOf<Sequence> + Array16OfOffset16To<Sequence> sequence; /* Array of Sequence tables * ordered by Coverage Index */ public: @@ -547,7 +563,12 @@ struct AlternateSet /* If alt_index is MAX_VALUE, randomize feature if it is the rand feature. */ if (alt_index == HB_OT_MAP_MAX_VALUE && c->random) + { + /* Maybe we can do better than unsafe-to-break all; but since we are + * changing random state, it would be hard to track that. Good 'nough. */ + c->buffer->unsafe_to_break_all (); alt_index = c->random_number () % count + 1; + } if (unlikely (alt_index > count || alt_index == 0)) return_trace (false); @@ -603,7 +624,7 @@ struct AlternateSet } protected: - ArrayOf<HBGlyphID> + Array16Of<HBGlyphID> alternates; /* Array of alternate GlyphIDs--in * arbitrary order */ public: @@ -615,14 +636,18 @@ struct AlternateSubstFormat1 bool intersects (const hb_set_t *glyphs) const { return (this+coverage).intersects (glyphs); } + bool may_have_non_1to1 () const + { return false; } + void closure (hb_closure_context_t *c) const { + hb_zip (this+coverage, alternateSet) - | hb_filter (c->glyphs, hb_first) + | hb_filter (c->parent_active_glyphs (), hb_first) | hb_map (hb_second) | hb_map (hb_add (this)) | hb_apply ([c] (const AlternateSet &_) { _.closure (c); }) ; + } void closure_lookups (hb_closure_lookups_context_t *c) const {} @@ -666,17 +691,17 @@ struct AlternateSubstFormat1 hb_array_t<const HBGlyphID> alternate_glyphs_list) { TRACE_SERIALIZE (this); - if (unlikely (!c->extend_min (*this))) return_trace (false); + if (unlikely (!c->extend_min (this))) return_trace (false); if (unlikely (!alternateSet.serialize (c, glyphs.length))) return_trace (false); for (unsigned int i = 0; i < glyphs.length; i++) { unsigned int alternate_len = alternate_len_list[i]; - if (unlikely (!alternateSet[i].serialize (c, this) - .serialize (c, alternate_glyphs_list.sub_array (0, alternate_len)))) + if (unlikely (!alternateSet[i] + .serialize_serialize (c, alternate_glyphs_list.sub_array (0, alternate_len)))) return_trace (false); alternate_glyphs_list += alternate_len; } - return_trace (coverage.serialize (c, this).serialize (c, glyphs)); + return_trace (coverage.serialize_serialize (c, glyphs)); } bool subset (hb_subset_context_t *c) const @@ -697,8 +722,7 @@ struct AlternateSubstFormat1 | hb_map (glyph_map) | hb_sink (new_coverage) ; - out->coverage.serialize (c->serializer, out) - .serialize (c->serializer, new_coverage.iter ()); + out->coverage.serialize_serialize (c->serializer, new_coverage.iter ()); return_trace (bool (new_coverage)); } @@ -710,10 +734,10 @@ struct AlternateSubstFormat1 protected: HBUINT16 format; /* Format identifier--format = 1 */ - OffsetTo<Coverage> + Offset16To<Coverage> coverage; /* Offset to Coverage table--from * beginning of Substitution table */ - OffsetArrayOf<AlternateSet> + Array16OfOffset16To<AlternateSet> alternateSet; /* Array of AlternateSet tables * ordered by Coverage Index */ public: @@ -831,7 +855,7 @@ struct Ligature Iterator components /* Starting from second */) { TRACE_SERIALIZE (this); - if (unlikely (!c->extend_min (*this))) return_trace (false); + if (unlikely (!c->extend_min (this))) return_trace (false); ligGlyph = ligature; if (unlikely (!component.serialize (c, components))) return_trace (false); return_trace (true); @@ -930,15 +954,14 @@ struct LigatureSet hb_array_t<const HBGlyphID> &component_list /* Starting from second for each ligature */) { TRACE_SERIALIZE (this); - if (unlikely (!c->extend_min (*this))) return_trace (false); + if (unlikely (!c->extend_min (this))) return_trace (false); if (unlikely (!ligature.serialize (c, ligatures.length))) return_trace (false); for (unsigned int i = 0; i < ligatures.length; i++) { unsigned int component_count = (unsigned) hb_max ((int) component_count_list[i] - 1, 0); - if (unlikely (!ligature[i].serialize (c, this) - .serialize (c, - ligatures[i], - component_list.sub_array (0, component_count)))) + if (unlikely (!ligature[i].serialize_serialize (c, + ligatures[i], + component_list.sub_array (0, component_count)))) return_trace (false); component_list += component_count; } @@ -965,7 +988,7 @@ struct LigatureSet } protected: - OffsetArrayOf<Ligature> + Array16OfOffset16To<Ligature> ligature; /* Array LigatureSet tables * ordered by preference */ public: @@ -980,20 +1003,24 @@ struct LigatureSubstFormat1 + hb_zip (this+coverage, ligatureSet) | hb_filter (*glyphs, hb_first) | hb_map (hb_second) - | hb_map ([this, glyphs] (const OffsetTo<LigatureSet> &_) + | hb_map ([this, glyphs] (const Offset16To<LigatureSet> &_) { return (this+_).intersects (glyphs); }) | hb_any ; } + bool may_have_non_1to1 () const + { return true; } + void closure (hb_closure_context_t *c) const { + hb_zip (this+coverage, ligatureSet) - | hb_filter (*c->glyphs, hb_first) + | hb_filter (c->parent_active_glyphs (), hb_first) | hb_map (hb_second) | hb_map (hb_add (this)) | hb_apply ([c] (const LigatureSet &_) { _.closure (c); }) ; + } void closure_lookups (hb_closure_lookups_context_t *c) const {} @@ -1039,20 +1066,20 @@ struct LigatureSubstFormat1 hb_array_t<const HBGlyphID> component_list /* Starting from second for each ligature */) { TRACE_SERIALIZE (this); - if (unlikely (!c->extend_min (*this))) return_trace (false); + if (unlikely (!c->extend_min (this))) return_trace (false); if (unlikely (!ligatureSet.serialize (c, first_glyphs.length))) return_trace (false); for (unsigned int i = 0; i < first_glyphs.length; i++) { unsigned int ligature_count = ligature_per_first_glyph_count_list[i]; - if (unlikely (!ligatureSet[i].serialize (c, this) - .serialize (c, - ligatures_list.sub_array (0, ligature_count), - component_count_list.sub_array (0, ligature_count), - component_list))) return_trace (false); + if (unlikely (!ligatureSet[i] + .serialize_serialize (c, + ligatures_list.sub_array (0, ligature_count), + component_count_list.sub_array (0, ligature_count), + component_list))) return_trace (false); ligatures_list += ligature_count; component_count_list += ligature_count; } - return_trace (coverage.serialize (c, this).serialize (c, first_glyphs)); + return_trace (coverage.serialize_serialize (c, first_glyphs)); } bool subset (hb_subset_context_t *c) const @@ -1073,8 +1100,7 @@ struct LigatureSubstFormat1 | hb_map (glyph_map) | hb_sink (new_coverage) ; - out->coverage.serialize (c->serializer, out) - .serialize (c->serializer, new_coverage.iter ()); + out->coverage.serialize_serialize (c->serializer, new_coverage.iter ()); return_trace (bool (new_coverage)); } @@ -1086,10 +1112,10 @@ struct LigatureSubstFormat1 protected: HBUINT16 format; /* Format identifier--format = 1 */ - OffsetTo<Coverage> + Offset16To<Coverage> coverage; /* Offset to Coverage table--from * beginning of Substitution table */ - OffsetArrayOf<LigatureSet> + Array16OfOffset16To<LigatureSet> ligatureSet; /* Array LigatureSet tables * ordered by Coverage Index */ public: @@ -1157,7 +1183,7 @@ struct ReverseChainSingleSubstFormat1 if (!(this+coverage).intersects (glyphs)) return false; - const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage>> (backtrack); + const Array16OfOffset16To<Coverage> &lookahead = StructAfter<Array16OfOffset16To<Coverage>> (backtrack); unsigned int count; @@ -1174,15 +1200,18 @@ struct ReverseChainSingleSubstFormat1 return true; } + bool may_have_non_1to1 () const + { return false; } + void closure (hb_closure_context_t *c) const { if (!intersects (c->glyphs)) return; - const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage>> (backtrack); - const ArrayOf<HBGlyphID> &substitute = StructAfter<ArrayOf<HBGlyphID>> (lookahead); + const Array16OfOffset16To<Coverage> &lookahead = StructAfter<Array16OfOffset16To<Coverage>> (backtrack); + const Array16Of<HBGlyphID> &substitute = StructAfter<Array16Of<HBGlyphID>> (lookahead); + hb_zip (this+coverage, substitute) - | hb_filter (*c->glyphs, hb_first) + | hb_filter (c->parent_active_glyphs (), hb_first) | hb_map (hb_second) | hb_sink (c->output) ; @@ -1200,12 +1229,12 @@ struct ReverseChainSingleSubstFormat1 for (unsigned int i = 0; i < count; i++) if (unlikely (!(this+backtrack[i]).collect_coverage (c->before))) return; - const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage>> (backtrack); + const Array16OfOffset16To<Coverage> &lookahead = StructAfter<Array16OfOffset16To<Coverage>> (backtrack); count = lookahead.len; for (unsigned int i = 0; i < count; i++) if (unlikely (!(this+lookahead[i]).collect_coverage (c->after))) return; - const ArrayOf<HBGlyphID> &substitute = StructAfter<ArrayOf<HBGlyphID>> (lookahead); + const Array16Of<HBGlyphID> &substitute = StructAfter<Array16Of<HBGlyphID>> (lookahead); count = substitute.len; c->output->add_array (substitute.arrayZ, substitute.len); } @@ -1224,8 +1253,8 @@ struct ReverseChainSingleSubstFormat1 unsigned int index = (this+coverage).get_coverage (c->buffer->cur ().codepoint); if (likely (index == NOT_COVERED)) return_trace (false); - const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage>> (backtrack); - const ArrayOf<HBGlyphID> &substitute = StructAfter<ArrayOf<HBGlyphID>> (lookahead); + const Array16OfOffset16To<Coverage> &lookahead = StructAfter<Array16OfOffset16To<Coverage>> (backtrack); + const Array16Of<HBGlyphID> &substitute = StructAfter<Array16Of<HBGlyphID>> (lookahead); if (unlikely (index >= substitute.len)) return_trace (false); @@ -1250,11 +1279,80 @@ struct ReverseChainSingleSubstFormat1 return_trace (false); } + template<typename Iterator, + hb_requires (hb_is_iterator (Iterator))> + bool serialize_coverage_offset_array (hb_subset_context_t *c, Iterator it) const + { + TRACE_SERIALIZE (this); + auto *out = c->serializer->start_embed<Array16OfOffset16To<Coverage>> (); + + if (unlikely (!c->serializer->allocate_size<HBUINT16> (HBUINT16::static_size))) + return_trace (false); + + for (auto& offset : it) { + auto *o = out->serialize_append (c->serializer); + if (unlikely (!o) || !o->serialize_subset (c, offset, this)) + return_trace (false); + } + + return_trace (true); + } + + template<typename Iterator, typename BacktrackIterator, typename LookaheadIterator, + hb_requires (hb_is_sorted_source_of (Iterator, hb_codepoint_pair_t)), + hb_requires (hb_is_iterator (BacktrackIterator)), + hb_requires (hb_is_iterator (LookaheadIterator))> + bool serialize (hb_subset_context_t *c, + Iterator coverage_subst_iter, + BacktrackIterator backtrack_iter, + LookaheadIterator lookahead_iter) const + { + TRACE_SERIALIZE (this); + + auto *out = c->serializer->start_embed (this); + if (unlikely (!c->serializer->check_success (out))) return_trace (false); + if (unlikely (!c->serializer->embed (this->format))) return_trace (false); + if (unlikely (!c->serializer->embed (this->coverage))) return_trace (false); + + if (!serialize_coverage_offset_array (c, backtrack_iter)) return_trace (false); + if (!serialize_coverage_offset_array (c, lookahead_iter)) return_trace (false); + + auto *substitute_out = c->serializer->start_embed<Array16Of<HBGlyphID>> (); + auto substitutes = + + coverage_subst_iter + | hb_map (hb_second) + ; + + auto glyphs = + + coverage_subst_iter + | hb_map_retains_sorting (hb_first) + ; + if (unlikely (! c->serializer->check_success (substitute_out->serialize (c->serializer, substitutes)))) + return_trace (false); + + if (unlikely (!out->coverage.serialize_serialize (c->serializer, glyphs))) + return_trace (false); + return_trace (true); + } + bool subset (hb_subset_context_t *c) const { TRACE_SUBSET (this); - // TODO(subset) - return_trace (false); + const hb_set_t &glyphset = *c->plan->glyphset_gsub (); + const hb_map_t &glyph_map = *c->plan->glyph_map; + + const Array16OfOffset16To<Coverage> &lookahead = StructAfter<Array16OfOffset16To<Coverage>> (backtrack); + const Array16Of<HBGlyphID> &substitute = StructAfter<Array16Of<HBGlyphID>> (lookahead); + + auto it = + + hb_zip (this+coverage, substitute) + | hb_filter (glyphset, hb_first) + | hb_filter (glyphset, hb_second) + | hb_map_retains_sorting ([&] (hb_pair_t<hb_codepoint_t, const HBGlyphID &> p) -> hb_codepoint_pair_t + { return hb_pair (glyph_map[p.first], glyph_map[p.second]); }) + ; + + return_trace (bool (it) && serialize (c, it, backtrack.iter (), lookahead.iter ())); } bool sanitize (hb_sanitize_context_t *c) const @@ -1262,27 +1360,27 @@ struct ReverseChainSingleSubstFormat1 TRACE_SANITIZE (this); if (!(coverage.sanitize (c, this) && backtrack.sanitize (c, this))) return_trace (false); - const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage>> (backtrack); + const Array16OfOffset16To<Coverage> &lookahead = StructAfter<Array16OfOffset16To<Coverage>> (backtrack); if (!lookahead.sanitize (c, this)) return_trace (false); - const ArrayOf<HBGlyphID> &substitute = StructAfter<ArrayOf<HBGlyphID>> (lookahead); + const Array16Of<HBGlyphID> &substitute = StructAfter<Array16Of<HBGlyphID>> (lookahead); return_trace (substitute.sanitize (c)); } protected: HBUINT16 format; /* Format identifier--format = 1 */ - OffsetTo<Coverage> + Offset16To<Coverage> coverage; /* Offset to Coverage table--from * beginning of table */ - OffsetArrayOf<Coverage> + Array16OfOffset16To<Coverage> backtrack; /* Array of coverage tables * in backtracking sequence, in glyph * sequence order */ - OffsetArrayOf<Coverage> + Array16OfOffset16To<Coverage> lookaheadX; /* Array of coverage tables * in lookahead sequence, in glyph * sequence order */ - ArrayOf<HBGlyphID> + Array16Of<HBGlyphID> substituteX; /* Array of substitute * GlyphIDs--ordered by Coverage Index */ public: @@ -1388,6 +1486,12 @@ struct SubstLookup : Lookup return lookup_type_is_reverse (type); } + bool may_have_non_1to1 () const + { + hb_have_non_1to1_context_t c; + return dispatch (&c); + } + bool apply (hb_ot_apply_context_t *c) const { TRACE_APPLY (this); @@ -1455,10 +1559,6 @@ struct SubstLookup : Lookup static inline bool apply_recurse_func (hb_ot_apply_context_t *c, unsigned int lookup_index); - SubTable& serialize_subtable (hb_serialize_context_t *c, - unsigned int i) - { return get_subtables<SubTable> ()[i].serialize (c, this); } - bool serialize_single (hb_serialize_context_t *c, uint32_t lookup_props, hb_sorted_array_t<const HBGlyphID> glyphs, @@ -1466,8 +1566,13 @@ struct SubstLookup : Lookup { TRACE_SERIALIZE (this); if (unlikely (!Lookup::serialize (c, SubTable::Single, lookup_props, 1))) return_trace (false); - return_trace (serialize_subtable (c, 0).u.single. - serialize (c, hb_zip (glyphs, substitutes))); + if (c->push<SubTable> ()->u.single.serialize (c, hb_zip (glyphs, substitutes))) + { + c->add_link (get_subtables<SubTable> ()[0], c->pop_pack ()); + return_trace (true); + } + c->pop_discard (); + return_trace (false); } bool serialize_multiple (hb_serialize_context_t *c, @@ -1478,11 +1583,17 @@ struct SubstLookup : Lookup { TRACE_SERIALIZE (this); if (unlikely (!Lookup::serialize (c, SubTable::Multiple, lookup_props, 1))) return_trace (false); - return_trace (serialize_subtable (c, 0).u.multiple. - serialize (c, - glyphs, - substitute_len_list, - substitute_glyphs_list)); + if (c->push<SubTable> ()->u.multiple. + serialize (c, + glyphs, + substitute_len_list, + substitute_glyphs_list)) + { + c->add_link (get_subtables<SubTable> ()[0], c->pop_pack ()); + return_trace (true); + } + c->pop_discard (); + return_trace (false); } bool serialize_alternate (hb_serialize_context_t *c, @@ -1493,11 +1604,18 @@ struct SubstLookup : Lookup { TRACE_SERIALIZE (this); if (unlikely (!Lookup::serialize (c, SubTable::Alternate, lookup_props, 1))) return_trace (false); - return_trace (serialize_subtable (c, 0).u.alternate. - serialize (c, - glyphs, - alternate_len_list, - alternate_glyphs_list)); + + if (c->push<SubTable> ()->u.alternate. + serialize (c, + glyphs, + alternate_len_list, + alternate_glyphs_list)) + { + c->add_link (get_subtables<SubTable> ()[0], c->pop_pack ()); + return_trace (true); + } + c->pop_discard (); + return_trace (false); } bool serialize_ligature (hb_serialize_context_t *c, @@ -1510,24 +1628,32 @@ struct SubstLookup : Lookup { TRACE_SERIALIZE (this); if (unlikely (!Lookup::serialize (c, SubTable::Ligature, lookup_props, 1))) return_trace (false); - return_trace (serialize_subtable (c, 0).u.ligature. - serialize (c, - first_glyphs, - ligature_per_first_glyph_count_list, - ligatures_list, - component_count_list, - component_list)); + if (c->push<SubTable> ()->u.ligature. + serialize (c, + first_glyphs, + ligature_per_first_glyph_count_list, + ligatures_list, + component_count_list, + component_list)) + { + c->add_link (get_subtables<SubTable> ()[0], c->pop_pack ()); + return_trace (true); + } + c->pop_discard (); + return_trace (false); } template <typename context_t> static inline typename context_t::return_t dispatch_recurse_func (context_t *c, unsigned int lookup_index); - static inline hb_closure_context_t::return_t dispatch_closure_recurse_func (hb_closure_context_t *c, unsigned int lookup_index) + static inline typename hb_closure_context_t::return_t closure_glyphs_recurse_func (hb_closure_context_t *c, unsigned lookup_index, hb_set_t *covered_seq_indices, unsigned seq_index, unsigned end_index); + + static inline hb_closure_context_t::return_t dispatch_closure_recurse_func (hb_closure_context_t *c, unsigned lookup_index, hb_set_t *covered_seq_indices, unsigned seq_index, unsigned end_index) { if (!c->should_visit_lookup (lookup_index)) return hb_empty_t (); - hb_closure_context_t::return_t ret = dispatch_recurse_func (c, lookup_index); + hb_closure_context_t::return_t ret = closure_glyphs_recurse_func (c, lookup_index, covered_seq_indices, seq_index, end_index); /* While in theory we should flush here, it will cause timeouts because a recursive * lookup can keep growing the glyph set. Skip, and outer loop will retry up to @@ -1564,7 +1690,7 @@ struct GSUB : GSUBGPOS bool subset (hb_subset_context_t *c) const { - hb_subset_layout_context_t l (c, tableTag, c->plan->gsub_lookups, c->plan->gsub_features); + hb_subset_layout_context_t l (c, tableTag, c->plan->gsub_lookups, c->plan->gsub_langsys, c->plan->gsub_features); return GSUBGPOS::subset<SubstLookup> (&l); } @@ -1600,6 +1726,14 @@ template <typename context_t> return l.dispatch (c); } +/*static*/ typename hb_closure_context_t::return_t SubstLookup::closure_glyphs_recurse_func (hb_closure_context_t *c, unsigned lookup_index, hb_set_t *covered_seq_indices, unsigned seq_index, unsigned end_index) +{ + const SubstLookup &l = c->face->table.GSUB.get_relaxed ()->table->get_lookup (lookup_index); + if (l.may_have_non_1to1 ()) + hb_set_add_range (covered_seq_indices, seq_index, end_index); + return l.dispatch (c); +} + /*static*/ inline hb_closure_lookups_context_t::return_t SubstLookup::dispatch_closure_lookups_recurse_func (hb_closure_lookups_context_t *c, unsigned this_index) { const SubstLookup &l = c->face->table.GSUB.get_relaxed ()->table->get_lookup (this_index); diff --git a/thirdparty/harfbuzz/src/hb-ot-layout-gsubgpos.hh b/thirdparty/harfbuzz/src/hb-ot-layout-gsubgpos.hh index 36a95ead15..626abc5577 100644 --- a/thirdparty/harfbuzz/src/hb-ot-layout-gsubgpos.hh +++ b/thirdparty/harfbuzz/src/hb-ot-layout-gsubgpos.hh @@ -52,23 +52,32 @@ struct hb_intersects_context_t : const hb_set_t *glyphs; hb_intersects_context_t (const hb_set_t *glyphs_) : - glyphs (glyphs_) {} + glyphs (glyphs_) {} +}; + +struct hb_have_non_1to1_context_t : + hb_dispatch_context_t<hb_have_non_1to1_context_t, bool> +{ + template <typename T> + return_t dispatch (const T &obj) { return obj.may_have_non_1to1 (); } + static return_t default_return_value () { return false; } + bool stop_sublookup_iteration (return_t r) const { return r; } }; struct hb_closure_context_t : hb_dispatch_context_t<hb_closure_context_t> { - typedef return_t (*recurse_func_t) (hb_closure_context_t *c, unsigned int lookup_index); + typedef return_t (*recurse_func_t) (hb_closure_context_t *c, unsigned lookup_index, hb_set_t *covered_seq_indicies, unsigned seq_index, unsigned end_index); template <typename T> return_t dispatch (const T &obj) { obj.closure (this); return hb_empty_t (); } static return_t default_return_value () { return hb_empty_t (); } - void recurse (unsigned int lookup_index) + void recurse (unsigned lookup_index, hb_set_t *covered_seq_indicies, unsigned seq_index, unsigned end_index) { if (unlikely (nesting_level_left == 0 || !recurse_func)) return; nesting_level_left--; - recurse_func (this, lookup_index); + recurse_func (this, lookup_index, covered_seq_indicies, seq_index, end_index); nesting_level_left++; } @@ -83,36 +92,90 @@ struct hb_closure_context_t : if (is_lookup_done (lookup_index)) return false; - done_lookups->set (lookup_index, glyphs->get_population ()); return true; } bool is_lookup_done (unsigned int lookup_index) { - if (unlikely (done_lookups->in_error ())) + if (done_lookups_glyph_count->in_error () || + done_lookups_glyph_set->in_error ()) return true; /* Have we visited this lookup with the current set of glyphs? */ - return done_lookups->get (lookup_index) == glyphs->get_population (); + if (done_lookups_glyph_count->get (lookup_index) != glyphs->get_population ()) + { + done_lookups_glyph_count->set (lookup_index, glyphs->get_population ()); + + if (!done_lookups_glyph_set->get (lookup_index)) + { + hb_set_t* empty_set = hb_set_create (); + if (unlikely (!done_lookups_glyph_set->set (lookup_index, empty_set))) + { + hb_set_destroy (empty_set); + return true; + } + } + + hb_set_clear (done_lookups_glyph_set->get (lookup_index)); + } + + hb_set_t *covered_glyph_set = done_lookups_glyph_set->get (lookup_index); + if (unlikely (covered_glyph_set->in_error ())) + return true; + if (parent_active_glyphs ()->is_subset (*covered_glyph_set)) + return true; + + hb_set_union (covered_glyph_set, parent_active_glyphs ()); + return false; + } + + hb_set_t* parent_active_glyphs () + { + if (active_glyphs_stack.length < 1) + return glyphs; + + return active_glyphs_stack.tail (); + } + + void push_cur_active_glyphs (hb_set_t* cur_active_glyph_set) + { + active_glyphs_stack.push (cur_active_glyph_set); + } + + bool pop_cur_done_glyphs () + { + if (active_glyphs_stack.length < 1) + return false; + + active_glyphs_stack.pop (); + return true; } hb_face_t *face; hb_set_t *glyphs; + hb_set_t *cur_intersected_glyphs; hb_set_t output[1]; + hb_vector_t<hb_set_t *> active_glyphs_stack; recurse_func_t recurse_func; unsigned int nesting_level_left; hb_closure_context_t (hb_face_t *face_, hb_set_t *glyphs_, - hb_map_t *done_lookups_, + hb_set_t *cur_intersected_glyphs_, + hb_map_t *done_lookups_glyph_count_, + hb_hashmap_t<unsigned, hb_set_t *, (unsigned)-1, nullptr> *done_lookups_glyph_set_, unsigned int nesting_level_left_ = HB_MAX_NESTING_LEVEL) : face (face_), glyphs (glyphs_), + cur_intersected_glyphs (cur_intersected_glyphs_), recurse_func (nullptr), nesting_level_left (nesting_level_left_), - done_lookups (done_lookups_), + done_lookups_glyph_count (done_lookups_glyph_count_), + done_lookups_glyph_set (done_lookups_glyph_set_), lookup_count (0) - {} + { + push_cur_active_glyphs (glyphs_); + } ~hb_closure_context_t () { flush (); } @@ -120,16 +183,21 @@ struct hb_closure_context_t : void flush () { - hb_set_del_range (output, face->get_num_glyphs (), hb_set_get_max (output)); /* Remove invalid glyphs. */ + hb_set_del_range (output, face->get_num_glyphs (), HB_SET_VALUE_INVALID); /* Remove invalid glyphs. */ hb_set_union (glyphs, output); hb_set_clear (output); + active_glyphs_stack.pop (); + active_glyphs_stack.fini (); } private: - hb_map_t *done_lookups; + hb_map_t *done_lookups_glyph_count; + hb_hashmap_t<unsigned, hb_set_t *, (unsigned)-1, nullptr> *done_lookups_glyph_set; unsigned int lookup_count; }; + + struct hb_closure_lookups_context_t : hb_dispatch_context_t<hb_closure_lookups_context_t> { @@ -737,12 +805,14 @@ struct hb_get_subtables_context_t : typedef bool (*intersects_func_t) (const hb_set_t *glyphs, const HBUINT16 &value, const void *data); +typedef void (*intersected_glyphs_func_t) (const hb_set_t *glyphs, const void *data, unsigned value, hb_set_t *intersected_glyphs); typedef void (*collect_glyphs_func_t) (hb_set_t *glyphs, const HBUINT16 &value, const void *data); typedef bool (*match_func_t) (hb_codepoint_t glyph_id, const HBUINT16 &value, const void *data); struct ContextClosureFuncs { intersects_func_t intersects; + intersected_glyphs_func_t intersected_glyphs; }; struct ContextCollectGlyphsFuncs { @@ -765,10 +835,29 @@ static inline bool intersects_class (const hb_set_t *glyphs, const HBUINT16 &val } static inline bool intersects_coverage (const hb_set_t *glyphs, const HBUINT16 &value, const void *data) { - const OffsetTo<Coverage> &coverage = (const OffsetTo<Coverage>&)value; + const Offset16To<Coverage> &coverage = (const Offset16To<Coverage>&)value; return (data+coverage).intersects (glyphs); } + +static inline void intersected_glyph (const hb_set_t *glyphs HB_UNUSED, const void *data, unsigned value, hb_set_t *intersected_glyphs) +{ + unsigned g = reinterpret_cast<const HBUINT16 *>(data)[value]; + intersected_glyphs->add (g); +} +static inline void intersected_class_glyphs (const hb_set_t *glyphs, const void *data, unsigned value, hb_set_t *intersected_glyphs) +{ + const ClassDef &class_def = *reinterpret_cast<const ClassDef *>(data); + class_def.intersected_class_glyphs (glyphs, value, intersected_glyphs); +} +static inline void intersected_coverage_glyphs (const hb_set_t *glyphs, const void *data, unsigned value, hb_set_t *intersected_glyphs) +{ + Offset16To<Coverage> coverage; + coverage = value; + (data+coverage).intersected_coverage_glyphs (glyphs, intersected_glyphs); +} + + static inline bool array_is_subset_of (const hb_set_t *glyphs, unsigned int count, const HBUINT16 values[], @@ -792,7 +881,7 @@ static inline void collect_class (hb_set_t *glyphs, const HBUINT16 &value, const } static inline void collect_coverage (hb_set_t *glyphs, const HBUINT16 &value, const void *data) { - const OffsetTo<Coverage> &coverage = (const OffsetTo<Coverage>&)value; + const Offset16To<Coverage> &coverage = (const Offset16To<Coverage>&)value; (data+coverage).collect_coverage (glyphs); } static inline void collect_array (hb_collect_glyphs_context_t *c HB_UNUSED, @@ -820,7 +909,7 @@ static inline bool match_class (hb_codepoint_t glyph_id, const HBUINT16 &value, } static inline bool match_coverage (hb_codepoint_t glyph_id, const HBUINT16 &value, const void *data) { - const OffsetTo<Coverage> &coverage = (const OffsetTo<Coverage>&)value; + const Offset16To<Coverage> &coverage = (const Offset16To<Coverage>&)value; return (data+coverage).get_coverage (glyph_id) != NOT_COVERED; } @@ -1146,10 +1235,79 @@ struct LookupRecord DEFINE_SIZE_STATIC (4); }; +enum ContextFormat { SimpleContext = 1, ClassBasedContext = 2, CoverageBasedContext = 3 }; + +static void context_closure_recurse_lookups (hb_closure_context_t *c, + unsigned inputCount, const HBUINT16 input[], + unsigned lookupCount, + const LookupRecord lookupRecord[] /* Array of LookupRecords--in design order */, + unsigned value, + ContextFormat context_format, + const void *data, + intersected_glyphs_func_t intersected_glyphs_func) +{ + hb_set_t *covered_seq_indicies = hb_set_create (); + for (unsigned int i = 0; i < lookupCount; i++) + { + unsigned seqIndex = lookupRecord[i].sequenceIndex; + if (seqIndex >= inputCount) continue; + + hb_set_t *pos_glyphs = nullptr; + + if (hb_set_is_empty (covered_seq_indicies) || !hb_set_has (covered_seq_indicies, seqIndex)) + { + pos_glyphs = hb_set_create (); + if (seqIndex == 0) + { + switch (context_format) { + case ContextFormat::SimpleContext: + pos_glyphs->add (value); + break; + case ContextFormat::ClassBasedContext: + intersected_glyphs_func (c->cur_intersected_glyphs, data, value, pos_glyphs); + break; + case ContextFormat::CoverageBasedContext: + hb_set_set (pos_glyphs, c->cur_intersected_glyphs); + break; + } + } + else + { + const void *input_data = input; + unsigned input_value = seqIndex - 1; + if (context_format != ContextFormat::SimpleContext) + { + input_data = data; + input_value = input[seqIndex - 1]; + } + + intersected_glyphs_func (c->glyphs, input_data, input_value, pos_glyphs); + } + } + + hb_set_add (covered_seq_indicies, seqIndex); + if (pos_glyphs) + c->push_cur_active_glyphs (pos_glyphs); + + unsigned endIndex = inputCount; + if (context_format == ContextFormat::CoverageBasedContext) + endIndex += 1; + + c->recurse (lookupRecord[i].lookupListIndex, covered_seq_indicies, seqIndex, endIndex); + + if (pos_glyphs) { + c->pop_cur_done_glyphs (); + hb_set_destroy (pos_glyphs); + } + } + + hb_set_destroy (covered_seq_indicies); +} + template <typename context_t> static inline void recurse_lookups (context_t *c, - unsigned int lookupCount, - const LookupRecord lookupRecord[] /* Array of LookupRecords--in design order */) + unsigned int lookupCount, + const LookupRecord lookupRecord[] /* Array of LookupRecords--in design order */) { for (unsigned int i = 0; i < lookupCount; i++) c->recurse (lookupRecord[i].lookupListIndex); @@ -1284,6 +1442,7 @@ static inline bool apply_lookup (hb_ot_apply_context_t *c, struct ContextClosureLookupContext { ContextClosureFuncs funcs; + ContextFormat context_format; const void *intersects_data; }; @@ -1314,13 +1473,19 @@ static inline void context_closure_lookup (hb_closure_context_t *c, const HBUINT16 input[], /* Array of input values--start with second glyph */ unsigned int lookupCount, const LookupRecord lookupRecord[], + unsigned value, /* Index of first glyph in Coverage or Class value in ClassDef table */ ContextClosureLookupContext &lookup_context) { if (context_intersects (c->glyphs, inputCount, input, lookup_context)) - recurse_lookups (c, - lookupCount, lookupRecord); + context_closure_recurse_lookups (c, + inputCount, input, + lookupCount, lookupRecord, + value, + lookup_context.context_format, + lookup_context.intersects_data, + lookup_context.funcs.intersected_glyphs); } static inline void context_collect_glyphs_lookup (hb_collect_glyphs_context_t *c, @@ -1377,7 +1542,7 @@ struct Rule lookup_context); } - void closure (hb_closure_context_t *c, ContextClosureLookupContext &lookup_context) const + void closure (hb_closure_context_t *c, unsigned value, ContextClosureLookupContext &lookup_context) const { if (unlikely (c->lookup_limit_exceeded ())) return; @@ -1386,7 +1551,7 @@ struct Rule context_closure_lookup (c, inputCount, inputZ.arrayZ, lookupCount, lookupRecord.arrayZ, - lookup_context); + value, lookup_context); } void closure_lookups (hb_closure_lookups_context_t *c, @@ -1453,7 +1618,14 @@ struct Rule const UnsizedArrayOf<LookupRecord> &lookupRecord = StructAfter<UnsizedArrayOf<LookupRecord>> (inputZ.as_array ((inputCount ? inputCount - 1 : 0))); for (unsigned i = 0; i < (unsigned) lookupCount; i++) + { + if (!lookup_map->has (lookupRecord[i].lookupListIndex)) + { + out->lookupCount--; + continue; + } c->copy (lookupRecord[i], lookup_map); + } return_trace (true); } @@ -1511,7 +1683,7 @@ struct RuleSet ; } - void closure (hb_closure_context_t *c, + void closure (hb_closure_context_t *c, unsigned value, ContextClosureLookupContext &lookup_context) const { if (unlikely (c->lookup_limit_exceeded ())) return; @@ -1519,7 +1691,7 @@ struct RuleSet return + hb_iter (rule) | hb_map (hb_add (this)) - | hb_apply ([&] (const Rule &_) { _.closure (c, lookup_context); }) + | hb_apply ([&] (const Rule &_) { _.closure (c, value, lookup_context); }) ; } @@ -1577,7 +1749,7 @@ struct RuleSet auto *out = c->serializer->start_embed (*this); if (unlikely (!c->serializer->extend_min (out))) return_trace (false); - for (const OffsetTo<Rule>& _ : rule) + for (const Offset16To<Rule>& _ : rule) { if (!_) continue; auto *o = out->rule.serialize_append (c->serializer); @@ -1604,7 +1776,7 @@ struct RuleSet } protected: - OffsetArrayOf<Rule> + Array16OfOffset16To<Rule> rule; /* Array of Rule tables * ordered by preference */ public: @@ -1617,7 +1789,8 @@ struct ContextFormat1 bool intersects (const hb_set_t *glyphs) const { struct ContextClosureLookupContext lookup_context = { - {intersects_glyph}, + {intersects_glyph, intersected_glyph}, + ContextFormat::SimpleContext, nullptr }; @@ -1631,25 +1804,32 @@ struct ContextFormat1 ; } + bool may_have_non_1to1 () const + { return true; } + void closure (hb_closure_context_t *c) const { + c->cur_intersected_glyphs->clear (); + get_coverage ().intersected_coverage_glyphs (c->parent_active_glyphs (), c->cur_intersected_glyphs); + struct ContextClosureLookupContext lookup_context = { - {intersects_glyph}, + {intersects_glyph, intersected_glyph}, + ContextFormat::SimpleContext, nullptr }; - + hb_zip (this+coverage, ruleSet) - | hb_filter (*c->glyphs, hb_first) - | hb_map (hb_second) - | hb_map (hb_add (this)) - | hb_apply ([&] (const RuleSet &_) { _.closure (c, lookup_context); }) + + hb_zip (this+coverage, hb_range ((unsigned) ruleSet.len)) + | hb_filter (c->parent_active_glyphs (), hb_first) + | hb_map ([&](const hb_pair_t<hb_codepoint_t, unsigned> _) { return hb_pair_t<unsigned, const RuleSet&> (_.first, this+ruleSet[_.second]); }) + | hb_apply ([&] (const hb_pair_t<unsigned, const RuleSet&>& _) { _.second.closure (c, _.first, lookup_context); }) ; } void closure_lookups (hb_closure_lookups_context_t *c) const { struct ContextClosureLookupContext lookup_context = { - {intersects_glyph}, + {intersects_glyph, intersected_glyph}, + ContextFormat::SimpleContext, nullptr }; @@ -1725,8 +1905,7 @@ struct ContextFormat1 | hb_sink (new_coverage) ; - out->coverage.serialize (c->serializer, out) - .serialize (c->serializer, new_coverage.iter ()); + out->coverage.serialize_serialize (c->serializer, new_coverage.iter ()); return_trace (bool (new_coverage)); } @@ -1738,10 +1917,10 @@ struct ContextFormat1 protected: HBUINT16 format; /* Format identifier--format = 1 */ - OffsetTo<Coverage> + Offset16To<Coverage> coverage; /* Offset to Coverage table--from * beginning of table */ - OffsetArrayOf<RuleSet> + Array16OfOffset16To<RuleSet> ruleSet; /* Array of RuleSet tables * ordered by Coverage Index */ public: @@ -1759,7 +1938,8 @@ struct ContextFormat2 const ClassDef &class_def = this+classDef; struct ContextClosureLookupContext lookup_context = { - {intersects_class}, + {intersects_class, intersected_class_glyphs}, + ContextFormat::ClassBasedContext, &class_def }; @@ -1774,26 +1954,35 @@ struct ContextFormat2 ; } + bool may_have_non_1to1 () const + { return true; } + void closure (hb_closure_context_t *c) const { if (!(this+coverage).intersects (c->glyphs)) return; + c->cur_intersected_glyphs->clear (); + get_coverage ().intersected_coverage_glyphs (c->parent_active_glyphs (), c->cur_intersected_glyphs); + const ClassDef &class_def = this+classDef; struct ContextClosureLookupContext lookup_context = { - {intersects_class}, + {intersects_class, intersected_class_glyphs}, + ContextFormat::ClassBasedContext, &class_def }; return + hb_enumerate (ruleSet) | hb_filter ([&] (unsigned _) - { return class_def.intersects_class (c->glyphs, _); }, + { return class_def.intersects_class (c->cur_intersected_glyphs, _); }, hb_first) - | hb_map (hb_second) - | hb_map (hb_add (this)) - | hb_apply ([&] (const RuleSet &_) { _.closure (c, lookup_context); }) + | hb_apply ([&] (const hb_pair_t<unsigned, const Offset16To<RuleSet>&> _) + { + const RuleSet& rule_set = this+_.second; + rule_set.closure (c, _.first, lookup_context); + }) ; } @@ -1805,7 +1994,8 @@ struct ContextFormat2 const ClassDef &class_def = this+classDef; struct ContextClosureLookupContext lookup_context = { - {intersects_class}, + {intersects_class, intersected_class_glyphs}, + ContextFormat::ClassBasedContext, &class_def }; @@ -1919,13 +2109,13 @@ struct ContextFormat2 protected: HBUINT16 format; /* Format identifier--format = 2 */ - OffsetTo<Coverage> + Offset16To<Coverage> coverage; /* Offset to Coverage table--from * beginning of table */ - OffsetTo<ClassDef> + Offset16To<ClassDef> classDef; /* Offset to glyph ClassDef table--from * beginning of table */ - OffsetArrayOf<RuleSet> + Array16OfOffset16To<RuleSet> ruleSet; /* Array of RuleSet tables * ordered by class */ public: @@ -1941,7 +2131,8 @@ struct ContextFormat3 return false; struct ContextClosureLookupContext lookup_context = { - {intersects_coverage}, + {intersects_coverage, intersected_coverage_glyphs}, + ContextFormat::CoverageBasedContext, this }; return context_intersects (glyphs, @@ -1949,20 +2140,27 @@ struct ContextFormat3 lookup_context); } + bool may_have_non_1to1 () const + { return true; } + void closure (hb_closure_context_t *c) const { if (!(this+coverageZ[0]).intersects (c->glyphs)) return; + c->cur_intersected_glyphs->clear (); + get_coverage ().intersected_coverage_glyphs (c->parent_active_glyphs (), c->cur_intersected_glyphs); + const LookupRecord *lookupRecord = &StructAfter<LookupRecord> (coverageZ.as_array (glyphCount)); struct ContextClosureLookupContext lookup_context = { - {intersects_coverage}, + {intersects_coverage, intersected_coverage_glyphs}, + ContextFormat::CoverageBasedContext, this }; context_closure_lookup (c, glyphCount, (const HBUINT16 *) (coverageZ.arrayZ + 1), lookupCount, lookupRecord, - lookup_context); + 0, lookup_context); } void closure_lookups (hb_closure_lookups_context_t *c) const @@ -2032,10 +2230,10 @@ struct ContextFormat3 auto coverages = coverageZ.as_array (glyphCount); - for (const OffsetTo<Coverage>& offset : coverages) + for (const Offset16To<Coverage>& offset : coverages) { /* TODO(subset) This looks like should not be necessary to write this way. */ - auto *o = c->serializer->allocate_size<OffsetTo<Coverage>> (OffsetTo<Coverage>::static_size); + auto *o = c->serializer->allocate_size<Offset16To<Coverage>> (Offset16To<Coverage>::static_size); if (unlikely (!o)) return_trace (false); if (!o->serialize_subset (c, offset, this)) return_trace (false); } @@ -2043,7 +2241,14 @@ struct ContextFormat3 const LookupRecord *lookupRecord = &StructAfter<LookupRecord> (coverageZ.as_array (glyphCount)); const hb_map_t *lookup_map = c->table_tag == HB_OT_TAG_GSUB ? c->plan->gsub_lookups : c->plan->gpos_lookups; for (unsigned i = 0; i < (unsigned) lookupCount; i++) + { + if (!lookup_map->has (lookupRecord[i].lookupListIndex)) + { + out->lookupCount--; + continue; + } c->serializer->copy (lookupRecord[i], lookup_map); + } return_trace (true); } @@ -2066,7 +2271,7 @@ struct ContextFormat3 HBUINT16 glyphCount; /* Number of glyphs in the input glyph * sequence */ HBUINT16 lookupCount; /* Number of LookupRecords */ - UnsizedArrayOf<OffsetTo<Coverage>> + UnsizedArrayOf<Offset16To<Coverage>> coverageZ; /* Array of offsets to Coverage * table in glyph sequence order */ /*UnsizedArrayOf<LookupRecord> @@ -2106,6 +2311,7 @@ struct Context struct ChainContextClosureLookupContext { ContextClosureFuncs funcs; + ContextFormat context_format; const void *intersects_data[3]; }; @@ -2150,6 +2356,7 @@ static inline void chain_context_closure_lookup (hb_closure_context_t *c, const HBUINT16 lookahead[], unsigned int lookupCount, const LookupRecord lookupRecord[], + unsigned value, ChainContextClosureLookupContext &lookup_context) { if (chain_context_intersects (c->glyphs, @@ -2157,8 +2364,13 @@ static inline void chain_context_closure_lookup (hb_closure_context_t *c, inputCount, input, lookaheadCount, lookahead, lookup_context)) - recurse_lookups (c, - lookupCount, lookupRecord); + context_closure_recurse_lookups (c, + inputCount, input, + lookupCount, lookupRecord, + value, + lookup_context.context_format, + lookup_context.intersects_data[1], + lookup_context.funcs.intersected_glyphs); } static inline void chain_context_collect_glyphs_lookup (hb_collect_glyphs_context_t *c, @@ -2239,7 +2451,7 @@ struct ChainRule bool intersects (const hb_set_t *glyphs, ChainContextClosureLookupContext &lookup_context) const { const HeadlessArrayOf<HBUINT16> &input = StructAfter<HeadlessArrayOf<HBUINT16>> (backtrack); - const ArrayOf<HBUINT16> &lookahead = StructAfter<ArrayOf<HBUINT16>> (input); + const Array16Of<HBUINT16> &lookahead = StructAfter<Array16Of<HBUINT16>> (input); return chain_context_intersects (glyphs, backtrack.len, backtrack.arrayZ, input.lenP1, input.arrayZ, @@ -2247,19 +2459,20 @@ struct ChainRule lookup_context); } - void closure (hb_closure_context_t *c, + void closure (hb_closure_context_t *c, unsigned value, ChainContextClosureLookupContext &lookup_context) const { if (unlikely (c->lookup_limit_exceeded ())) return; const HeadlessArrayOf<HBUINT16> &input = StructAfter<HeadlessArrayOf<HBUINT16>> (backtrack); - const ArrayOf<HBUINT16> &lookahead = StructAfter<ArrayOf<HBUINT16>> (input); - const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord>> (lookahead); + const Array16Of<HBUINT16> &lookahead = StructAfter<Array16Of<HBUINT16>> (input); + const Array16Of<LookupRecord> &lookup = StructAfter<Array16Of<LookupRecord>> (lookahead); chain_context_closure_lookup (c, backtrack.len, backtrack.arrayZ, input.lenP1, input.arrayZ, lookahead.len, lookahead.arrayZ, lookup.len, lookup.arrayZ, + value, lookup_context); } @@ -2270,8 +2483,8 @@ struct ChainRule if (!intersects (c->glyphs, lookup_context)) return; const HeadlessArrayOf<HBUINT16> &input = StructAfter<HeadlessArrayOf<HBUINT16>> (backtrack); - const ArrayOf<HBUINT16> &lookahead = StructAfter<ArrayOf<HBUINT16>> (input); - const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord>> (lookahead); + const Array16Of<HBUINT16> &lookahead = StructAfter<Array16Of<HBUINT16>> (input); + const Array16Of<LookupRecord> &lookup = StructAfter<Array16Of<LookupRecord>> (lookahead); recurse_lookups (c, lookup.len, lookup.arrayZ); } @@ -2279,8 +2492,8 @@ struct ChainRule ChainContextCollectGlyphsLookupContext &lookup_context) const { const HeadlessArrayOf<HBUINT16> &input = StructAfter<HeadlessArrayOf<HBUINT16>> (backtrack); - const ArrayOf<HBUINT16> &lookahead = StructAfter<ArrayOf<HBUINT16>> (input); - const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord>> (lookahead); + const Array16Of<HBUINT16> &lookahead = StructAfter<Array16Of<HBUINT16>> (input); + const Array16Of<LookupRecord> &lookup = StructAfter<Array16Of<LookupRecord>> (lookahead); chain_context_collect_glyphs_lookup (c, backtrack.len, backtrack.arrayZ, input.lenP1, input.arrayZ, @@ -2293,8 +2506,8 @@ struct ChainRule ChainContextApplyLookupContext &lookup_context) const { const HeadlessArrayOf<HBUINT16> &input = StructAfter<HeadlessArrayOf<HBUINT16>> (backtrack); - const ArrayOf<HBUINT16> &lookahead = StructAfter<ArrayOf<HBUINT16>> (input); - const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord>> (lookahead); + const Array16Of<HBUINT16> &lookahead = StructAfter<Array16Of<HBUINT16>> (input); + const Array16Of<LookupRecord> &lookup = StructAfter<Array16Of<LookupRecord>> (lookahead); return chain_context_would_apply_lookup (c, backtrack.len, backtrack.arrayZ, input.lenP1, input.arrayZ, @@ -2306,8 +2519,8 @@ struct ChainRule { TRACE_APPLY (this); const HeadlessArrayOf<HBUINT16> &input = StructAfter<HeadlessArrayOf<HBUINT16>> (backtrack); - const ArrayOf<HBUINT16> &lookahead = StructAfter<ArrayOf<HBUINT16>> (input); - const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord>> (lookahead); + const Array16Of<HBUINT16> &lookahead = StructAfter<Array16Of<HBUINT16>> (input); + const Array16Of<LookupRecord> &lookup = StructAfter<Array16Of<LookupRecord>> (lookahead); return_trace (chain_context_apply_lookup (c, backtrack.len, backtrack.arrayZ, input.lenP1, input.arrayZ, @@ -2345,12 +2558,12 @@ struct ChainRule serialize_array (c, input.lenP1, + input.iter () | hb_map (mapping)); - const ArrayOf<HBUINT16> &lookahead = StructAfter<ArrayOf<HBUINT16>> (input); + const Array16Of<HBUINT16> &lookahead = StructAfter<Array16Of<HBUINT16>> (input); if (lookahead_map) mapping = lookahead_map; serialize_array (c, lookahead.len, + lookahead.iter () | hb_map (mapping)); - const ArrayOf<LookupRecord> &lookupRecord = StructAfter<ArrayOf<LookupRecord>> (lookahead); + const Array16Of<LookupRecord> &lookupRecord = StructAfter<Array16Of<LookupRecord>> (lookahead); HBUINT16* lookupCount = c->embed (&(lookupRecord.len)); if (!lookupCount) return_trace (nullptr); @@ -2377,7 +2590,7 @@ struct ChainRule TRACE_SUBSET (this); const HeadlessArrayOf<HBUINT16> &input = StructAfter<HeadlessArrayOf<HBUINT16>> (backtrack); - const ArrayOf<HBUINT16> &lookahead = StructAfter<ArrayOf<HBUINT16>> (input); + const Array16Of<HBUINT16> &lookahead = StructAfter<Array16Of<HBUINT16>> (input); if (!backtrack_map) { @@ -2408,24 +2621,24 @@ struct ChainRule if (!backtrack.sanitize (c)) return_trace (false); const HeadlessArrayOf<HBUINT16> &input = StructAfter<HeadlessArrayOf<HBUINT16>> (backtrack); if (!input.sanitize (c)) return_trace (false); - const ArrayOf<HBUINT16> &lookahead = StructAfter<ArrayOf<HBUINT16>> (input); + const Array16Of<HBUINT16> &lookahead = StructAfter<Array16Of<HBUINT16>> (input); if (!lookahead.sanitize (c)) return_trace (false); - const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord>> (lookahead); + const Array16Of<LookupRecord> &lookup = StructAfter<Array16Of<LookupRecord>> (lookahead); return_trace (lookup.sanitize (c)); } protected: - ArrayOf<HBUINT16> + Array16Of<HBUINT16> backtrack; /* Array of backtracking values * (to be matched before the input * sequence) */ HeadlessArrayOf<HBUINT16> inputX; /* Array of input values (start with * second glyph) */ - ArrayOf<HBUINT16> + Array16Of<HBUINT16> lookaheadX; /* Array of lookahead values's (to be * matched after the input sequence) */ - ArrayOf<LookupRecord> + Array16Of<LookupRecord> lookupX; /* Array of LookupRecords--in * design order) */ public: @@ -2443,14 +2656,14 @@ struct ChainRuleSet | hb_any ; } - void closure (hb_closure_context_t *c, ChainContextClosureLookupContext &lookup_context) const + void closure (hb_closure_context_t *c, unsigned value, ChainContextClosureLookupContext &lookup_context) const { if (unlikely (c->lookup_limit_exceeded ())) return; return + hb_iter (rule) | hb_map (hb_add (this)) - | hb_apply ([&] (const ChainRule &_) { _.closure (c, lookup_context); }) + | hb_apply ([&] (const ChainRule &_) { _.closure (c, value, lookup_context); }) ; } @@ -2508,7 +2721,7 @@ struct ChainRuleSet auto *out = c->serializer->start_embed (*this); if (unlikely (!c->serializer->extend_min (out))) return_trace (false); - for (const OffsetTo<ChainRule>& _ : rule) + for (const Offset16To<ChainRule>& _ : rule) { if (!_) continue; auto *o = out->rule.serialize_append (c->serializer); @@ -2539,7 +2752,7 @@ struct ChainRuleSet } protected: - OffsetArrayOf<ChainRule> + Array16OfOffset16To<ChainRule> rule; /* Array of ChainRule tables * ordered by preference */ public: @@ -2551,7 +2764,8 @@ struct ChainContextFormat1 bool intersects (const hb_set_t *glyphs) const { struct ChainContextClosureLookupContext lookup_context = { - {intersects_glyph}, + {intersects_glyph, intersected_glyph}, + ContextFormat::SimpleContext, {nullptr, nullptr, nullptr} }; @@ -2565,25 +2779,32 @@ struct ChainContextFormat1 ; } + bool may_have_non_1to1 () const + { return true; } + void closure (hb_closure_context_t *c) const { + c->cur_intersected_glyphs->clear (); + get_coverage ().intersected_coverage_glyphs (c->parent_active_glyphs (), c->cur_intersected_glyphs); + struct ChainContextClosureLookupContext lookup_context = { - {intersects_glyph}, + {intersects_glyph, intersected_glyph}, + ContextFormat::SimpleContext, {nullptr, nullptr, nullptr} }; - + hb_zip (this+coverage, ruleSet) - | hb_filter (*c->glyphs, hb_first) - | hb_map (hb_second) - | hb_map (hb_add (this)) - | hb_apply ([&] (const ChainRuleSet &_) { _.closure (c, lookup_context); }) + + hb_zip (this+coverage, hb_range ((unsigned) ruleSet.len)) + | hb_filter (c->parent_active_glyphs (), hb_first) + | hb_map ([&](const hb_pair_t<hb_codepoint_t, unsigned> _) { return hb_pair_t<unsigned, const ChainRuleSet&> (_.first, this+ruleSet[_.second]); }) + | hb_apply ([&] (const hb_pair_t<unsigned, const ChainRuleSet&>& _) { _.second.closure (c, _.first, lookup_context); }) ; } void closure_lookups (hb_closure_lookups_context_t *c) const { struct ChainContextClosureLookupContext lookup_context = { - {intersects_glyph}, + {intersects_glyph, intersected_glyph}, + ContextFormat::SimpleContext, {nullptr, nullptr, nullptr} }; @@ -2658,8 +2879,7 @@ struct ChainContextFormat1 | hb_sink (new_coverage) ; - out->coverage.serialize (c->serializer, out) - .serialize (c->serializer, new_coverage.iter ()); + out->coverage.serialize_serialize (c->serializer, new_coverage.iter ()); return_trace (bool (new_coverage)); } @@ -2671,10 +2891,10 @@ struct ChainContextFormat1 protected: HBUINT16 format; /* Format identifier--format = 1 */ - OffsetTo<Coverage> + Offset16To<Coverage> coverage; /* Offset to Coverage table--from * beginning of table */ - OffsetArrayOf<ChainRuleSet> + Array16OfOffset16To<ChainRuleSet> ruleSet; /* Array of ChainRuleSet tables * ordered by Coverage Index */ public: @@ -2693,7 +2913,8 @@ struct ChainContextFormat2 const ClassDef &lookahead_class_def = this+lookaheadClassDef; struct ChainContextClosureLookupContext lookup_context = { - {intersects_class}, + {intersects_class, intersected_class_glyphs}, + ContextFormat::ClassBasedContext, {&backtrack_class_def, &input_class_def, &lookahead_class_def} @@ -2709,17 +2930,25 @@ struct ChainContextFormat2 | hb_any ; } + + bool may_have_non_1to1 () const + { return true; } + void closure (hb_closure_context_t *c) const { if (!(this+coverage).intersects (c->glyphs)) return; + c->cur_intersected_glyphs->clear (); + get_coverage ().intersected_coverage_glyphs (c->parent_active_glyphs (), c->cur_intersected_glyphs); + const ClassDef &backtrack_class_def = this+backtrackClassDef; const ClassDef &input_class_def = this+inputClassDef; const ClassDef &lookahead_class_def = this+lookaheadClassDef; struct ChainContextClosureLookupContext lookup_context = { - {intersects_class}, + {intersects_class, intersected_class_glyphs}, + ContextFormat::ClassBasedContext, {&backtrack_class_def, &input_class_def, &lookahead_class_def} @@ -2728,11 +2957,13 @@ struct ChainContextFormat2 return + hb_enumerate (ruleSet) | hb_filter ([&] (unsigned _) - { return input_class_def.intersects_class (c->glyphs, _); }, + { return input_class_def.intersects_class (c->cur_intersected_glyphs, _); }, hb_first) - | hb_map (hb_second) - | hb_map (hb_add (this)) - | hb_apply ([&] (const ChainRuleSet &_) { _.closure (c, lookup_context); }) + | hb_apply ([&] (const hb_pair_t<unsigned, const Offset16To<ChainRuleSet>&> _) + { + const ChainRuleSet& chainrule_set = this+_.second; + chainrule_set.closure (c, _.first, lookup_context); + }) ; } @@ -2746,7 +2977,8 @@ struct ChainContextFormat2 const ClassDef &lookahead_class_def = this+lookaheadClassDef; struct ChainContextClosureLookupContext lookup_context = { - {intersects_class}, + {intersects_class, intersected_class_glyphs}, + ContextFormat::ClassBasedContext, {&backtrack_class_def, &input_class_def, &lookahead_class_def} @@ -2852,7 +3084,7 @@ struct ChainContextFormat2 bool ret = true; const hb_map_t *lookup_map = c->table_tag == HB_OT_TAG_GSUB ? c->plan->gsub_lookups : c->plan->gpos_lookups; auto last_non_zero = c->serializer->snapshot (); - for (const OffsetTo<ChainRuleSet>& _ : + hb_enumerate (ruleSet) + for (const Offset16To<ChainRuleSet>& _ : + hb_enumerate (ruleSet) | hb_filter (input_klass_map, hb_first) | hb_map (hb_second)) { @@ -2898,22 +3130,22 @@ struct ChainContextFormat2 protected: HBUINT16 format; /* Format identifier--format = 2 */ - OffsetTo<Coverage> + Offset16To<Coverage> coverage; /* Offset to Coverage table--from * beginning of table */ - OffsetTo<ClassDef> + Offset16To<ClassDef> backtrackClassDef; /* Offset to glyph ClassDef table * containing backtrack sequence * data--from beginning of table */ - OffsetTo<ClassDef> + Offset16To<ClassDef> inputClassDef; /* Offset to glyph ClassDef * table containing input sequence * data--from beginning of table */ - OffsetTo<ClassDef> + Offset16To<ClassDef> lookaheadClassDef; /* Offset to glyph ClassDef table * containing lookahead sequence * data--from beginning of table */ - OffsetArrayOf<ChainRuleSet> + Array16OfOffset16To<ChainRuleSet> ruleSet; /* Array of ChainRuleSet tables * ordered by class */ public: @@ -2924,14 +3156,15 @@ struct ChainContextFormat3 { bool intersects (const hb_set_t *glyphs) const { - const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage>> (backtrack); + const Array16OfOffset16To<Coverage> &input = StructAfter<Array16OfOffset16To<Coverage>> (backtrack); if (!(this+input[0]).intersects (glyphs)) return false; - const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage>> (input); + const Array16OfOffset16To<Coverage> &lookahead = StructAfter<Array16OfOffset16To<Coverage>> (input); struct ChainContextClosureLookupContext lookup_context = { - {intersects_coverage}, + {intersects_coverage, intersected_coverage_glyphs}, + ContextFormat::CoverageBasedContext, {this, this, this} }; return chain_context_intersects (glyphs, @@ -2941,17 +3174,24 @@ struct ChainContextFormat3 lookup_context); } + bool may_have_non_1to1 () const + { return true; } + void closure (hb_closure_context_t *c) const { - const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage>> (backtrack); + const Array16OfOffset16To<Coverage> &input = StructAfter<Array16OfOffset16To<Coverage>> (backtrack); if (!(this+input[0]).intersects (c->glyphs)) return; - const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage>> (input); - const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord>> (lookahead); + c->cur_intersected_glyphs->clear (); + get_coverage ().intersected_coverage_glyphs (c->parent_active_glyphs (), c->cur_intersected_glyphs); + + const Array16OfOffset16To<Coverage> &lookahead = StructAfter<Array16OfOffset16To<Coverage>> (input); + const Array16Of<LookupRecord> &lookup = StructAfter<Array16Of<LookupRecord>> (lookahead); struct ChainContextClosureLookupContext lookup_context = { - {intersects_coverage}, + {intersects_coverage, intersected_coverage_glyphs}, + ContextFormat::CoverageBasedContext, {this, this, this} }; chain_context_closure_lookup (c, @@ -2959,7 +3199,7 @@ struct ChainContextFormat3 input.len, (const HBUINT16 *) input.arrayZ + 1, lookahead.len, (const HBUINT16 *) lookahead.arrayZ, lookup.len, lookup.arrayZ, - lookup_context); + 0, lookup_context); } void closure_lookups (hb_closure_lookups_context_t *c) const @@ -2967,9 +3207,9 @@ struct ChainContextFormat3 if (!intersects (c->glyphs)) return; - const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage>> (backtrack); - const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage>> (input); - const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord>> (lookahead); + const Array16OfOffset16To<Coverage> &input = StructAfter<Array16OfOffset16To<Coverage>> (backtrack); + const Array16OfOffset16To<Coverage> &lookahead = StructAfter<Array16OfOffset16To<Coverage>> (input); + const Array16Of<LookupRecord> &lookup = StructAfter<Array16Of<LookupRecord>> (lookahead); recurse_lookups (c, lookup.len, lookup.arrayZ); } @@ -2977,12 +3217,12 @@ struct ChainContextFormat3 void collect_glyphs (hb_collect_glyphs_context_t *c) const { - const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage>> (backtrack); + const Array16OfOffset16To<Coverage> &input = StructAfter<Array16OfOffset16To<Coverage>> (backtrack); (this+input[0]).collect_coverage (c->input); - const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage>> (input); - const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord>> (lookahead); + const Array16OfOffset16To<Coverage> &lookahead = StructAfter<Array16OfOffset16To<Coverage>> (input); + const Array16Of<LookupRecord> &lookup = StructAfter<Array16Of<LookupRecord>> (lookahead); struct ChainContextCollectGlyphsLookupContext lookup_context = { {collect_coverage}, {this, this, this} @@ -2997,9 +3237,9 @@ struct ChainContextFormat3 bool would_apply (hb_would_apply_context_t *c) const { - const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage>> (backtrack); - const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage>> (input); - const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord>> (lookahead); + const Array16OfOffset16To<Coverage> &input = StructAfter<Array16OfOffset16To<Coverage>> (backtrack); + const Array16OfOffset16To<Coverage> &lookahead = StructAfter<Array16OfOffset16To<Coverage>> (input); + const Array16Of<LookupRecord> &lookup = StructAfter<Array16Of<LookupRecord>> (lookahead); struct ChainContextApplyLookupContext lookup_context = { {match_coverage}, {this, this, this} @@ -3013,20 +3253,20 @@ struct ChainContextFormat3 const Coverage &get_coverage () const { - const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage>> (backtrack); + const Array16OfOffset16To<Coverage> &input = StructAfter<Array16OfOffset16To<Coverage>> (backtrack); return this+input[0]; } bool apply (hb_ot_apply_context_t *c) const { TRACE_APPLY (this); - const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage>> (backtrack); + const Array16OfOffset16To<Coverage> &input = StructAfter<Array16OfOffset16To<Coverage>> (backtrack); unsigned int index = (this+input[0]).get_coverage (c->buffer->cur().codepoint); if (likely (index == NOT_COVERED)) return_trace (false); - const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage>> (input); - const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord>> (lookahead); + const Array16OfOffset16To<Coverage> &lookahead = StructAfter<Array16OfOffset16To<Coverage>> (input); + const Array16Of<LookupRecord> &lookup = StructAfter<Array16Of<LookupRecord>> (lookahead); struct ChainContextApplyLookupContext lookup_context = { {match_coverage}, {this, this, this} @@ -3043,7 +3283,7 @@ struct ChainContextFormat3 bool serialize_coverage_offsets (hb_subset_context_t *c, Iterator it, const void* base) const { TRACE_SERIALIZE (this); - auto *out = c->serializer->start_embed<OffsetArrayOf<Coverage>> (); + auto *out = c->serializer->start_embed<Array16OfOffset16To<Coverage>> (); if (unlikely (!c->serializer->allocate_size<HBUINT16> (HBUINT16::static_size))) return_trace (false); @@ -3068,22 +3308,30 @@ struct ChainContextFormat3 if (!serialize_coverage_offsets (c, backtrack.iter (), this)) return_trace (false); - const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage>> (backtrack); + const Array16OfOffset16To<Coverage> &input = StructAfter<Array16OfOffset16To<Coverage>> (backtrack); if (!serialize_coverage_offsets (c, input.iter (), this)) return_trace (false); - const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage>> (input); + const Array16OfOffset16To<Coverage> &lookahead = StructAfter<Array16OfOffset16To<Coverage>> (input); if (!serialize_coverage_offsets (c, lookahead.iter (), this)) return_trace (false); - const ArrayOf<LookupRecord> &lookupRecord = StructAfter<ArrayOf<LookupRecord>> (lookahead); + const Array16Of<LookupRecord> &lookupRecord = StructAfter<Array16Of<LookupRecord>> (lookahead); + const hb_map_t *lookup_map = c->table_tag == HB_OT_TAG_GSUB ? c->plan->gsub_lookups : c->plan->gpos_lookups; + hb_set_t lookup_indices; + for (unsigned i = 0; i < (unsigned) lookupRecord.len; i++) + if (lookup_map->has (lookupRecord[i].lookupListIndex)) + lookup_indices.add (i); + HBUINT16 lookupCount; - lookupCount = lookupRecord.len; + lookupCount = lookup_indices.get_population (); if (!c->serializer->copy (lookupCount)) return_trace (false); - const hb_map_t *lookup_map = c->table_tag == HB_OT_TAG_GSUB ? c->plan->gsub_lookups : c->plan->gpos_lookups; - for (unsigned i = 0; i < (unsigned) lookupCount; i++) - if (!c->serializer->copy (lookupRecord[i], lookup_map)) return_trace (false); + for (unsigned i : lookup_indices.iter ()) + { + if (!c->serializer->copy (lookupRecord[i], lookup_map)) + return_trace (false); + } return_trace (true); } @@ -3092,30 +3340,30 @@ struct ChainContextFormat3 { TRACE_SANITIZE (this); if (!backtrack.sanitize (c, this)) return_trace (false); - const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage>> (backtrack); + const Array16OfOffset16To<Coverage> &input = StructAfter<Array16OfOffset16To<Coverage>> (backtrack); if (!input.sanitize (c, this)) return_trace (false); if (!input.len) return_trace (false); /* To be consistent with Context. */ - const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage>> (input); + const Array16OfOffset16To<Coverage> &lookahead = StructAfter<Array16OfOffset16To<Coverage>> (input); if (!lookahead.sanitize (c, this)) return_trace (false); - const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord>> (lookahead); + const Array16Of<LookupRecord> &lookup = StructAfter<Array16Of<LookupRecord>> (lookahead); return_trace (lookup.sanitize (c)); } protected: HBUINT16 format; /* Format identifier--format = 3 */ - OffsetArrayOf<Coverage> + Array16OfOffset16To<Coverage> backtrack; /* Array of coverage tables * in backtracking sequence, in glyph * sequence order */ - OffsetArrayOf<Coverage> + Array16OfOffset16To<Coverage> inputX ; /* Array of coverage * tables in input sequence, in glyph * sequence order */ - OffsetArrayOf<Coverage> + Array16OfOffset16To<Coverage> lookaheadX; /* Array of coverage tables * in lookahead sequence, in glyph * sequence order */ - ArrayOf<LookupRecord> + Array16Of<LookupRecord> lookupX; /* Array of LookupRecords--in * design order) */ public: @@ -3154,7 +3402,7 @@ struct ExtensionFormat1 template <typename X> const X& get_subtable () const - { return this + reinterpret_cast<const LOffsetTo<typename T::SubTable> &> (extensionOffset); } + { return this + reinterpret_cast<const Offset32To<typename T::SubTable> &> (extensionOffset); } template <typename context_t, typename ...Ts> typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const @@ -3186,9 +3434,9 @@ struct ExtensionFormat1 out->extensionLookupType = extensionLookupType; const auto& src_offset = - reinterpret_cast<const LOffsetTo<typename T::SubTable> &> (extensionOffset); + reinterpret_cast<const Offset32To<typename T::SubTable> &> (extensionOffset); auto& dest_offset = - reinterpret_cast<LOffsetTo<typename T::SubTable> &> (out->extensionOffset); + reinterpret_cast<Offset32To<typename T::SubTable> &> (out->extensionOffset); return_trace (dest_offset.serialize_subset (c, src_offset, this, get_type ())); } @@ -3372,6 +3620,20 @@ struct GSUBGPOS hb_set_subtract (lookup_indexes, &inactive_lookups); } + void prune_langsys (const hb_map_t *duplicate_feature_map, + hb_hashmap_t<unsigned, hb_set_t *, (unsigned)-1, nullptr> *script_langsys_map, + hb_set_t *new_feature_indexes /* OUT */) const + { + hb_prune_langsys_context_t c (this, script_langsys_map, duplicate_feature_map, new_feature_indexes); + + unsigned count = get_script_count (); + for (unsigned script_index = 0; script_index < count; script_index++) + { + const Script& s = get_script (script_index); + s.prune_langsys (&c, script_index); + } + } + template <typename TLookup> bool subset (hb_subset_layout_context_t *c) const { @@ -3380,15 +3642,15 @@ struct GSUBGPOS if (unlikely (!out)) return_trace (false); typedef LookupOffsetList<TLookup> TLookupList; - reinterpret_cast<OffsetTo<TLookupList> &> (out->lookupList) + reinterpret_cast<Offset16To<TLookupList> &> (out->lookupList) .serialize_subset (c->subset_context, - reinterpret_cast<const OffsetTo<TLookupList> &> (lookupList), + reinterpret_cast<const Offset16To<TLookupList> &> (lookupList), this, c); - reinterpret_cast<OffsetTo<RecordListOfFeature> &> (out->featureList) + reinterpret_cast<Offset16To<RecordListOfFeature> &> (out->featureList) .serialize_subset (c->subset_context, - reinterpret_cast<const OffsetTo<RecordListOfFeature> &> (featureList), + reinterpret_cast<const Offset16To<RecordListOfFeature> &> (featureList), this, c); @@ -3412,8 +3674,65 @@ struct GSUBGPOS return_trace (true); } + void find_duplicate_features (const hb_map_t *lookup_indices, + const hb_set_t *feature_indices, + hb_map_t *duplicate_feature_map /* OUT */) const + { + //find out duplicate features after subset + unsigned prev = 0xFFFFu; + for (unsigned i : feature_indices->iter ()) + { + if (prev == 0xFFFFu) + { + duplicate_feature_map->set (i, i); + prev = i; + continue; + } + + hb_tag_t t = get_feature_tag (i); + hb_tag_t prev_t = get_feature_tag (prev); + if (t != prev_t) + { + duplicate_feature_map->set (i, i); + prev = i; + continue; + } + + const Feature& f = get_feature (i); + const Feature& prev_f = get_feature (prev); + + auto f_iter = + + hb_iter (f.lookupIndex) + | hb_filter (lookup_indices) + ; + + auto prev_iter = + + hb_iter (prev_f.lookupIndex) + | hb_filter (lookup_indices) + ; + + if (f_iter.len () != prev_iter.len ()) + { + duplicate_feature_map->set (i, i); + prev = i; + continue; + } + + bool is_equal = true; + for (auto _ : + hb_zip (f_iter, prev_iter)) + if (_.first != _.second) { is_equal = false; break; } + + if (is_equal == true) duplicate_feature_map->set (i, prev); + else + { + duplicate_feature_map->set (i, i); + prev = i; + } + } + } + void prune_features (const hb_map_t *lookup_indices, /* IN */ - hb_set_t *feature_indices /* IN/OUT */) const + hb_set_t *feature_indices /* IN/OUT */) const { #ifndef HB_NO_VAR // This is the set of feature indices which have alternate versions defined @@ -3422,8 +3741,9 @@ struct GSUBGPOS hb_set_t alternate_feature_indices; if (version.to_int () >= 0x00010001u) (this+featureVars).closure_features (lookup_indices, &alternate_feature_indices); - if (unlikely (alternate_feature_indices.in_error())) { - feature_indices->successful = false; + if (unlikely (alternate_feature_indices.in_error())) + { + feature_indices->err (); return; } #endif @@ -3431,6 +3751,13 @@ struct GSUBGPOS for (unsigned i : feature_indices->iter()) { const Feature& f = get_feature (i); + hb_tag_t tag = get_feature_tag (i); + if (tag == HB_TAG ('p', 'r', 'e', 'f')) + // Note: Never ever drop feature 'pref', even if it's empty. + // HarfBuzz chooses shaper for Khmer based on presence of this + // feature. See thread at: + // http://lists.freedesktop.org/archives/harfbuzz/2012-November/002660.html + continue; if (f.featureParams.is_null () && !f.intersects_lookup_indexes (lookup_indices) @@ -3452,12 +3779,12 @@ struct GSUBGPOS bool sanitize (hb_sanitize_context_t *c) const { TRACE_SANITIZE (this); - typedef OffsetListOf<TLookup> TLookupList; + typedef List16OfOffset16To<TLookup> TLookupList; if (unlikely (!(version.sanitize (c) && likely (version.major == 1) && scriptList.sanitize (c, this) && featureList.sanitize (c, this) && - reinterpret_cast<const OffsetTo<TLookupList> &> (lookupList).sanitize (c, this)))) + reinterpret_cast<const Offset16To<TLookupList> &> (lookupList).sanitize (c, this)))) return_trace (false); #ifndef HB_NO_VAR @@ -3482,7 +3809,7 @@ struct GSUBGPOS this->lookup_count = table->get_lookup_count (); - this->accels = (hb_ot_layout_lookup_accelerator_t *) calloc (this->lookup_count, sizeof (hb_ot_layout_lookup_accelerator_t)); + this->accels = (hb_ot_layout_lookup_accelerator_t *) hb_calloc (this->lookup_count, sizeof (hb_ot_layout_lookup_accelerator_t)); if (unlikely (!this->accels)) { this->lookup_count = 0; @@ -3498,7 +3825,7 @@ struct GSUBGPOS { for (unsigned int i = 0; i < this->lookup_count; i++) this->accels[i].fini (); - free (this->accels); + hb_free (this->accels); this->table.destroy (); } @@ -3510,13 +3837,13 @@ struct GSUBGPOS protected: FixedVersion<>version; /* Version of the GSUB/GPOS table--initially set * to 0x00010000u */ - OffsetTo<ScriptList> + Offset16To<ScriptList> scriptList; /* ScriptList table */ - OffsetTo<FeatureList> + Offset16To<FeatureList> featureList; /* FeatureList table */ - OffsetTo<LookupList> + Offset16To<LookupList> lookupList; /* LookupList table */ - LOffsetTo<FeatureVariations> + Offset32To<FeatureVariations> featureVars; /* Offset to Feature Variations table--from beginning of table * (may be NULL). Introduced diff --git a/thirdparty/harfbuzz/src/hb-ot-layout-jstf-table.hh b/thirdparty/harfbuzz/src/hb-ot-layout-jstf-table.hh index ffd2bf4574..3b2293dff0 100644 --- a/thirdparty/harfbuzz/src/hb-ot-layout-jstf-table.hh +++ b/thirdparty/harfbuzz/src/hb-ot-layout-jstf-table.hh @@ -45,7 +45,7 @@ typedef IndexArray JstfModList; * JstfMax -- Justification Maximum Table */ -typedef OffsetListOf<PosLookup> JstfMax; +typedef List16OfOffset16To<PosLookup> JstfMax; /* @@ -71,43 +71,43 @@ struct JstfPriority } protected: - OffsetTo<JstfModList> + Offset16To<JstfModList> shrinkageEnableGSUB; /* Offset to Shrinkage Enable GSUB * JstfModList table--from beginning of * JstfPriority table--may be NULL */ - OffsetTo<JstfModList> + Offset16To<JstfModList> shrinkageDisableGSUB; /* Offset to Shrinkage Disable GSUB * JstfModList table--from beginning of * JstfPriority table--may be NULL */ - OffsetTo<JstfModList> + Offset16To<JstfModList> shrinkageEnableGPOS; /* Offset to Shrinkage Enable GPOS * JstfModList table--from beginning of * JstfPriority table--may be NULL */ - OffsetTo<JstfModList> + Offset16To<JstfModList> shrinkageDisableGPOS; /* Offset to Shrinkage Disable GPOS * JstfModList table--from beginning of * JstfPriority table--may be NULL */ - OffsetTo<JstfMax> + Offset16To<JstfMax> shrinkageJstfMax; /* Offset to Shrinkage JstfMax table-- * from beginning of JstfPriority table * --may be NULL */ - OffsetTo<JstfModList> + Offset16To<JstfModList> extensionEnableGSUB; /* Offset to Extension Enable GSUB * JstfModList table--from beginning of * JstfPriority table--may be NULL */ - OffsetTo<JstfModList> + Offset16To<JstfModList> extensionDisableGSUB; /* Offset to Extension Disable GSUB * JstfModList table--from beginning of * JstfPriority table--may be NULL */ - OffsetTo<JstfModList> + Offset16To<JstfModList> extensionEnableGPOS; /* Offset to Extension Enable GPOS * JstfModList table--from beginning of * JstfPriority table--may be NULL */ - OffsetTo<JstfModList> + Offset16To<JstfModList> extensionDisableGPOS; /* Offset to Extension Disable GPOS * JstfModList table--from beginning of * JstfPriority table--may be NULL */ - OffsetTo<JstfMax> + Offset16To<JstfMax> extensionJstfMax; /* Offset to Extension JstfMax table-- * from beginning of JstfPriority table * --may be NULL */ @@ -121,13 +121,13 @@ struct JstfPriority * JstfLangSys -- Justification Language System Table */ -struct JstfLangSys : OffsetListOf<JstfPriority> +struct JstfLangSys : List16OfOffset16To<JstfPriority> { bool sanitize (hb_sanitize_context_t *c, const Record_sanitize_closure_t * = nullptr) const { TRACE_SANITIZE (this); - return_trace (OffsetListOf<JstfPriority>::sanitize (c)); + return_trace (List16OfOffset16To<JstfPriority>::sanitize (c)); } }; @@ -136,7 +136,7 @@ struct JstfLangSys : OffsetListOf<JstfPriority> * ExtenderGlyphs -- Extender Glyph Table */ -typedef SortedArrayOf<HBGlyphID> ExtenderGlyphs; +typedef SortedArray16Of<HBGlyphID> ExtenderGlyphs; /* @@ -174,10 +174,10 @@ struct JstfScript } protected: - OffsetTo<ExtenderGlyphs> + Offset16To<ExtenderGlyphs> extenderGlyphs; /* Offset to ExtenderGlyph table--from beginning * of JstfScript table-may be NULL */ - OffsetTo<JstfLangSys> + Offset16To<JstfLangSys> defaultLangSys; /* Offset to DefaultJstfLangSys table--from * beginning of JstfScript table--may be Null */ RecordArrayOf<JstfLangSys> diff --git a/thirdparty/harfbuzz/src/hb-ot-layout.cc b/thirdparty/harfbuzz/src/hb-ot-layout.cc index 89df949b26..0454af2063 100644 --- a/thirdparty/harfbuzz/src/hb-ot-layout.cc +++ b/thirdparty/harfbuzz/src/hb-ot-layout.cc @@ -131,7 +131,9 @@ hb_ot_layout_kern (const hb_ot_shape_plan_t *plan, AAT::hb_aat_apply_context_t c (plan, font, buffer, blob); + if (!buffer->message (font, "start table kern")) return; kern.apply (&c); + (void) buffer->message (font, "end table kern"); } #endif @@ -144,7 +146,7 @@ bool OT::GDEF::is_blocklisted (hb_blob_t *blob, hb_face_t *face) const { -#ifdef HB_NO_OT_LAYOUT_BLACKLIST +#ifdef HB_NO_OT_LAYOUT_BLOCKLIST return false; #endif /* The ugly business of blocklisting individual fonts' tables happen here! @@ -331,6 +333,8 @@ hb_ot_layout_get_glyphs_in_class (hb_face_t *face, * * Useful if the client program wishes to cache the list. * + * Return value: Total number of attachment points for @glyph. + * **/ unsigned int hb_ot_layout_get_attach_points (hb_face_t *face, @@ -357,6 +361,8 @@ hb_ot_layout_get_attach_points (hb_face_t *face, * Fetches a list of the caret positions defined for a ligature glyph in the GDEF * table of the font. The list returned will begin at the offset provided. * + * Return value: Total number of ligature caret positions for @glyph. + * **/ unsigned int hb_ot_layout_get_ligature_carets (hb_font_t *font, @@ -379,7 +385,7 @@ bool OT::GSUB::is_blocklisted (hb_blob_t *blob HB_UNUSED, hb_face_t *face) const { -#ifdef HB_NO_OT_LAYOUT_BLACKLIST +#ifdef HB_NO_OT_LAYOUT_BLOCKLIST return false; #endif return false; @@ -389,7 +395,7 @@ bool OT::GPOS::is_blocklisted (hb_blob_t *blob HB_UNUSED, hb_face_t *face HB_UNUSED) const { -#ifdef HB_NO_OT_LAYOUT_BLACKLIST +#ifdef HB_NO_OT_LAYOUT_BLOCKLIST return false; #endif return false; @@ -419,6 +425,8 @@ get_gsubgpos_table (hb_face_t *face, * Fetches a list of all scripts enumerated in the specified face's GSUB table * or GPOS table. The list returned will begin at the offset provided. * + * Return value: Total number of script tags. + * **/ unsigned int hb_ot_layout_table_get_script_tags (hb_face_t *face, @@ -585,6 +593,8 @@ hb_ot_layout_table_select_script (hb_face_t *face, * * Fetches a list of all feature tags in the given face's GSUB or GPOS table. * + * Return value: Total number of feature tags. + * **/ unsigned int hb_ot_layout_table_get_feature_tags (hb_face_t *face, @@ -647,6 +657,8 @@ hb_ot_layout_table_find_feature (hb_face_t *face, * Fetches a list of language tags in the given face's GSUB or GPOS table, underneath * the specified script index. The list returned will begin at the offset provided. * + * Return value: Total number of language tags. + * **/ unsigned int hb_ot_layout_script_get_language_tags (hb_face_t *face, @@ -818,6 +830,8 @@ hb_ot_layout_language_get_required_feature (hb_face_t *face, * Fetches a list of all features in the specified face's GSUB table * or GPOS table, underneath the specified script and language. The list * returned will begin at the offset provided. + * + * Return value: Total number of features. **/ unsigned int hb_ot_layout_language_get_feature_indexes (hb_face_t *face, @@ -850,6 +864,7 @@ hb_ot_layout_language_get_feature_indexes (hb_face_t *face, * or GPOS table, underneath the specified script and language. The list * returned will begin at the offset provided. * + * Return value: Total number of feature tags. **/ unsigned int hb_ot_layout_language_get_feature_tags (hb_face_t *face, @@ -932,6 +947,8 @@ hb_ot_layout_language_find_feature (hb_face_t *face, * the specified face's GSUB table or GPOS table. The list returned will * begin at the offset provided. * + * Return value: Total number of lookups. + * * Since: 0.9.7 **/ unsigned int @@ -960,6 +977,8 @@ hb_ot_layout_feature_get_lookups (hb_face_t *face, * Fetches the total number of lookups enumerated in the specified * face's GSUB table or GPOS table. * + * Return value: Total number of lookups. + * * Since: 0.9.22 **/ unsigned int @@ -974,10 +993,46 @@ struct hb_collect_features_context_t { hb_collect_features_context_t (hb_face_t *face, hb_tag_t table_tag, - hb_set_t *feature_indexes_) + hb_set_t *feature_indices_, + const hb_tag_t *features) + : g (get_gsubgpos_table (face, table_tag)), - feature_indexes (feature_indexes_), - script_count (0),langsys_count (0), feature_index_count (0) {} + feature_indices (feature_indices_), + has_feature_filter (false), + script_count (0),langsys_count (0), feature_index_count (0) + { + compute_feature_filter (features); + } + + void compute_feature_filter (const hb_tag_t *features) + { + if (features == nullptr) + { + has_feature_filter = false; + return; + } + + has_feature_filter = true; + for (; *features; features++) + { + hb_tag_t tag = *features; + unsigned index; + g.find_feature_index (tag, &index); + if (index == OT::Index::NOT_FOUND_INDEX) continue; + + feature_indices_filter.add(index); + for (int i = (int) index - 1; i >= 0; i--) + { + if (g.get_feature_tag (i) != tag) break; + feature_indices_filter.add(i); + } + for (unsigned i = index + 1; i < g.get_feature_count (); i++) + { + if (g.get_feature_tag (i) != tag) break; + feature_indices_filter.add(i); + } + } + } bool visited (const OT::Script &s) { @@ -1026,7 +1081,9 @@ struct hb_collect_features_context_t public: const OT::GSUBGPOS &g; - hb_set_t *feature_indexes; + hb_set_t *feature_indices; + hb_set_t feature_indices_filter; + bool has_feature_filter; private: hb_set_t visited_script; @@ -1038,37 +1095,31 @@ struct hb_collect_features_context_t static void langsys_collect_features (hb_collect_features_context_t *c, - const OT::LangSys &l, - const hb_tag_t *features) + const OT::LangSys &l) { if (c->visited (l)) return; - if (!features) + if (!c->has_feature_filter) { /* All features. */ if (l.has_required_feature () && !c->visited_feature_indices (1)) - c->feature_indexes->add (l.get_required_feature_index ()); + c->feature_indices->add (l.get_required_feature_index ()); + // TODO(garretrieger): filter out indices >= feature count? if (!c->visited_feature_indices (l.featureIndex.len)) - l.add_feature_indexes_to (c->feature_indexes); + l.add_feature_indexes_to (c->feature_indices); } else { - /* Ugh. Any faster way? */ - for (; *features; features++) + if (c->feature_indices_filter.is_empty()) return; + unsigned int num_features = l.get_feature_count (); + for (unsigned int i = 0; i < num_features; i++) { - hb_tag_t feature_tag = *features; - unsigned int num_features = l.get_feature_count (); - for (unsigned int i = 0; i < num_features; i++) - { - unsigned int feature_index = l.get_feature_index (i); + unsigned int feature_index = l.get_feature_index (i); + if (!c->feature_indices_filter.has (feature_index)) continue; - if (feature_tag == c->g.get_feature_tag (feature_index)) - { - c->feature_indexes->add (feature_index); - break; - } - } + c->feature_indices->add (feature_index); + c->feature_indices_filter.del (feature_index); } } } @@ -1076,8 +1127,7 @@ langsys_collect_features (hb_collect_features_context_t *c, static void script_collect_features (hb_collect_features_context_t *c, const OT::Script &s, - const hb_tag_t *languages, - const hb_tag_t *features) + const hb_tag_t *languages) { if (c->visited (s)) return; @@ -1086,14 +1136,13 @@ script_collect_features (hb_collect_features_context_t *c, /* All languages. */ if (s.has_default_lang_sys ()) langsys_collect_features (c, - s.get_default_lang_sys (), - features); + s.get_default_lang_sys ()); + unsigned int count = s.get_lang_sys_count (); for (unsigned int language_index = 0; language_index < count; language_index++) langsys_collect_features (c, - s.get_lang_sys (language_index), - features); + s.get_lang_sys (language_index)); } else { @@ -1102,8 +1151,8 @@ script_collect_features (hb_collect_features_context_t *c, unsigned int language_index; if (s.find_lang_sys_index (*languages, &language_index)) langsys_collect_features (c, - s.get_lang_sys (language_index), - features); + s.get_lang_sys (language_index)); + } } } @@ -1134,7 +1183,7 @@ hb_ot_layout_collect_features (hb_face_t *face, const hb_tag_t *features, hb_set_t *feature_indexes /* OUT */) { - hb_collect_features_context_t c (face, table_tag, feature_indexes); + hb_collect_features_context_t c (face, table_tag, feature_indexes, features); if (!scripts) { /* All scripts. */ @@ -1142,8 +1191,7 @@ hb_ot_layout_collect_features (hb_face_t *face, for (unsigned int script_index = 0; script_index < count; script_index++) script_collect_features (&c, c.g.get_script (script_index), - languages, - features); + languages); } else { @@ -1153,8 +1201,7 @@ hb_ot_layout_collect_features (hb_face_t *face, if (c.g.find_script_index (*scripts, &script_index)) script_collect_features (&c, c.g.get_script (script_index), - languages, - features); + languages); } } } @@ -1262,6 +1309,8 @@ hb_ot_layout_lookup_collect_glyphs (hb_face_t *face, * Fetches a list of feature variations in the specified face's GSUB table * or GPOS table, at the specified variation coordinates. * + * Return value: %true if feature variations were found, %false otherwise. + * **/ hb_bool_t hb_ot_layout_table_find_feature_variations (hb_face_t *face, @@ -1291,6 +1340,8 @@ hb_ot_layout_table_find_feature_variations (hb_face_t *face, * the specified face's GSUB table or GPOS table, enabled at the specified * variations index. The list returned will begin at the offset provided. * + * Return value: Total number of lookups. + * **/ unsigned int hb_ot_layout_feature_with_variations_get_lookups (hb_face_t *face, @@ -1337,7 +1388,8 @@ hb_ot_layout_has_substitution (hb_face_t *face) * @lookup_index: The index of the lookup to query * @glyphs: The sequence of glyphs to query for substitution * @glyphs_length: The length of the glyph sequence - * @zero_context: #hb_bool_t indicating whether substitutions should be context-free + * @zero_context: #hb_bool_t indicating whether pre-/post-context are disallowed + * in substitutions * * Tests whether a specified lookup in the specified face would * trigger a substitution on the given glyph sequence. @@ -1443,12 +1495,17 @@ hb_ot_layout_lookup_substitute_closure (hb_face_t *face, unsigned int lookup_index, hb_set_t *glyphs /* OUT */) { - hb_map_t done_lookups; - OT::hb_closure_context_t c (face, glyphs, &done_lookups); + hb_set_t cur_intersected_glyphs; + hb_map_t done_lookups_glyph_count; + hb_hashmap_t<unsigned, hb_set_t *, (unsigned)-1, nullptr> done_lookups_glyph_set; + OT::hb_closure_context_t c (face, glyphs, &cur_intersected_glyphs, &done_lookups_glyph_count, &done_lookups_glyph_set); const OT::SubstLookup& l = face->table.GSUB->table->get_lookup (lookup_index); l.closure (&c, lookup_index); + + for (auto _ : done_lookups_glyph_set.iter ()) + hb_set_destroy (_.second); } /** @@ -1467,8 +1524,10 @@ hb_ot_layout_lookups_substitute_closure (hb_face_t *face, const hb_set_t *lookups, hb_set_t *glyphs /* OUT */) { - hb_map_t done_lookups; - OT::hb_closure_context_t c (face, glyphs, &done_lookups); + hb_set_t cur_intersected_glyphs; + hb_map_t done_lookups_glyph_count; + hb_hashmap_t<unsigned, hb_set_t *, (unsigned)-1, nullptr> done_lookups_glyph_set; + OT::hb_closure_context_t c (face, glyphs, &cur_intersected_glyphs, &done_lookups_glyph_count, &done_lookups_glyph_set); const OT::GSUB& gsub = *face->table.GSUB->table; unsigned int iteration_count = 0; @@ -1488,6 +1547,9 @@ hb_ot_layout_lookups_substitute_closure (hb_face_t *face, } } while (iteration_count++ <= HB_CLOSURE_MAX_STAGES && glyphs_length != glyphs->get_population ()); + + for (auto _ : done_lookups_glyph_set.iter ()) + hb_set_destroy (_.second); } /* @@ -1824,27 +1886,20 @@ apply_string (OT::hb_ot_apply_context_t *c, if (likely (!lookup.is_reverse ())) { /* in/out forward substitution/positioning */ - if (Proxy::table_index == 0u) + if (!Proxy::inplace) buffer->clear_output (); + buffer->idx = 0; + apply_forward (c, accel); - bool ret; - ret = apply_forward (c, accel); - if (ret) - { - if (!Proxy::inplace) - buffer->swap_buffers (); - else - assert (!buffer->has_separate_output ()); - } + if (!Proxy::inplace) + buffer->swap_buffers (); } else { /* in-place backward substitution/positioning */ - if (Proxy::table_index == 0u) - buffer->remove_output (); + assert (!buffer->have_output); buffer->idx = buffer->len - 1; - apply_backward (c, accel); } } @@ -1860,7 +1915,8 @@ inline void hb_ot_map_t::apply (const Proxy &proxy, OT::hb_ot_apply_context_t c (table_index, font, buffer); c.set_recurse_func (Proxy::Lookup::apply_recurse_func); - for (unsigned int stage_index = 0; stage_index < stages[table_index].length; stage_index++) { + for (unsigned int stage_index = 0; stage_index < stages[table_index].length; stage_index++) + { const stage_map_t *stage = &stages[table_index][stage_index]; for (; i < stage->last_lookup; i++) { @@ -1870,11 +1926,8 @@ inline void hb_ot_map_t::apply (const Proxy &proxy, c.set_lookup_mask (lookups[table_index][i].mask); c.set_auto_zwj (lookups[table_index][i].auto_zwj); c.set_auto_zwnj (lookups[table_index][i].auto_zwnj); - if (lookups[table_index][i].random) - { - c.set_random (true); - buffer->unsafe_to_break_all (); - } + c.set_random (lookups[table_index][i].random); + apply_string<Proxy> (&c, proxy.table.get_lookup (lookup_index), proxy.accels[lookup_index]); @@ -1882,10 +1935,7 @@ inline void hb_ot_map_t::apply (const Proxy &proxy, } if (stage->pause_func) - { - buffer->clear_output (); stage->pause_func (plan, font, buffer); - } } } @@ -1925,7 +1975,7 @@ hb_ot_layout_substitute_lookup (OT::hb_ot_apply_context_t *c, * * Fetches a baseline value from the face. * - * Return value: if found baseline value in the font. + * Return value: %true if found baseline value in the font. * * Since: 2.6.0 **/ @@ -1984,7 +2034,7 @@ struct hb_get_glyph_alternates_dispatch_t : * * Fetches alternates of a glyph from a given GSUB lookup index. * - * Return value: total number of alternates found in the specific lookup index for the given glyph id. + * Return value: Total number of alternates found in the specific lookup index for the given glyph id. * * Since: 2.6.8 **/ diff --git a/thirdparty/harfbuzz/src/hb-ot-layout.hh b/thirdparty/harfbuzz/src/hb-ot-layout.hh index ac61bc70de..bcc014ee98 100644 --- a/thirdparty/harfbuzz/src/hb-ot-layout.hh +++ b/thirdparty/harfbuzz/src/hb-ot-layout.hh @@ -314,7 +314,6 @@ _hb_glyph_info_get_unicode_space_fallback_type (const hb_glyph_info_t *info) hb_unicode_funcs_t::NOT_SPACE; } -static inline bool _hb_glyph_info_ligated (const hb_glyph_info_t *info); static inline bool _hb_glyph_info_substituted (const hb_glyph_info_t *info); static inline bool @@ -328,7 +327,7 @@ _hb_glyph_info_is_default_ignorable_and_not_hidden (const hb_glyph_info_t *info) { return ((info->unicode_props() & (UPROPS_MASK_IGNORABLE|UPROPS_MASK_HIDDEN)) == UPROPS_MASK_IGNORABLE) && - !_hb_glyph_info_ligated (info); + !_hb_glyph_info_substituted (info); } static inline void _hb_glyph_info_unhide (hb_glyph_info_t *info) diff --git a/thirdparty/harfbuzz/src/hb-ot-map.cc b/thirdparty/harfbuzz/src/hb-ot-map.cc index e4bb4b6366..12ceea5785 100644 --- a/thirdparty/harfbuzz/src/hb-ot-map.cc +++ b/thirdparty/harfbuzz/src/hb-ot-map.cc @@ -54,7 +54,6 @@ hb_ot_map_builder_t::hb_ot_map_builder_t (hb_face_t *face_, face = face_; props = *props_; - /* Fetch script/language indices for GSUB/GPOS. We need these later to skip * features not available in either table and not waste precious bits for them. */ @@ -63,12 +62,28 @@ hb_ot_map_builder_t::hb_ot_map_builder_t (hb_face_t *face_, hb_tag_t script_tags[HB_OT_MAX_TAGS_PER_SCRIPT]; hb_tag_t language_tags[HB_OT_MAX_TAGS_PER_LANGUAGE]; - hb_ot_tags_from_script_and_language (props.script, props.language, &script_count, script_tags, &language_count, language_tags); + hb_ot_tags_from_script_and_language (props.script, + props.language, + &script_count, + script_tags, + &language_count, + language_tags); - for (unsigned int table_index = 0; table_index < 2; table_index++) { + for (unsigned int table_index = 0; table_index < 2; table_index++) + { hb_tag_t table_tag = table_tags[table_index]; - found_script[table_index] = (bool) hb_ot_layout_table_select_script (face, table_tag, script_count, script_tags, &script_index[table_index], &chosen_script[table_index]); - hb_ot_layout_script_select_language (face, table_tag, script_index[table_index], language_count, language_tags, &language_index[table_index]); + found_script[table_index] = (bool) hb_ot_layout_table_select_script (face, + table_tag, + script_count, + script_tags, + &script_index[table_index], + &chosen_script[table_index]); + hb_ot_layout_script_select_language (face, + table_tag, + script_index[table_index], + language_count, + language_tags, + &language_index[table_index]); } } @@ -150,9 +165,8 @@ void hb_ot_map_builder_t::compile (hb_ot_map_t &m, const hb_ot_shape_plan_key_t &key) { - static_assert ((!(HB_GLYPH_FLAG_DEFINED & (HB_GLYPH_FLAG_DEFINED + 1))), ""); - unsigned int global_bit_mask = HB_GLYPH_FLAG_DEFINED + 1; - unsigned int global_bit_shift = hb_popcount (HB_GLYPH_FLAG_DEFINED); + unsigned int global_bit_shift = 8 * sizeof (hb_mask_t) - 1; + unsigned int global_bit_mask = 1u << global_bit_shift; m.global_mask = global_bit_mask; @@ -205,7 +219,8 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m, /* Allocate bits now */ - unsigned int next_bit = global_bit_shift + 1; + static_assert ((!(HB_GLYPH_FLAG_DEFINED & (HB_GLYPH_FLAG_DEFINED + 1))), ""); + unsigned int next_bit = hb_popcount (HB_GLYPH_FLAG_DEFINED) + 1; for (unsigned int i = 0; i < feature_infos.length; i++) { @@ -220,7 +235,7 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m, /* Limit bits per feature. */ bits_needed = hb_min (HB_OT_MAP_MAX_BITS, hb_bit_storage (info->max_value)); - if (!info->max_value || next_bit + bits_needed > 8 * sizeof (hb_mask_t)) + if (!info->max_value || next_bit + bits_needed >= global_bit_shift) continue; /* Feature disabled, or not enough bits. */ @@ -274,7 +289,6 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m, } map->_1_mask = (1u << map->shift) & map->mask; map->needs_fallback = !found; - } feature_infos.shrink (0); /* Done with these */ diff --git a/thirdparty/harfbuzz/src/hb-ot-math-table.hh b/thirdparty/harfbuzz/src/hb-ot-math-table.hh index 26aa080603..5916ad29f2 100644 --- a/thirdparty/harfbuzz/src/hb-ot-math-table.hh +++ b/thirdparty/harfbuzz/src/hb-ot-math-table.hh @@ -49,7 +49,7 @@ struct MathValueRecord protected: HBINT16 value; /* The X or Y value in design units */ - OffsetTo<Device> deviceTable; /* Offset to the device table - from the + Offset16To<Device> deviceTable; /* Offset to the device table - from the * beginning of parent table. May be NULL. * Suggested format for device table is 1. */ @@ -181,11 +181,11 @@ struct MathItalicsCorrectionInfo } protected: - OffsetTo<Coverage> coverage; /* Offset to Coverage table - + Offset16To<Coverage> coverage; /* Offset to Coverage table - * from the beginning of * MathItalicsCorrectionInfo * table. */ - ArrayOf<MathValueRecord> italicsCorrection; /* Array of MathValueRecords + Array16Of<MathValueRecord> italicsCorrection; /* Array of MathValueRecords * defining italics correction * values for each * covered glyph. */ @@ -214,11 +214,11 @@ struct MathTopAccentAttachment } protected: - OffsetTo<Coverage> topAccentCoverage; /* Offset to Coverage table - + Offset16To<Coverage> topAccentCoverage; /* Offset to Coverage table - * from the beginning of * MathTopAccentAttachment * table. */ - ArrayOf<MathValueRecord> topAccentAttachment; /* Array of MathValueRecords + Array16Of<MathValueRecord> topAccentAttachment; /* Array of MathValueRecords * defining top accent * attachment points for each * covered glyph. */ @@ -320,7 +320,7 @@ struct MathKernInfoRecord protected: /* Offset to MathKern table for each corner - * from the beginning of MathKernInfo table. May be NULL. */ - OffsetTo<MathKern> mathKern[4]; + Offset16To<MathKern> mathKern[4]; public: DEFINE_SIZE_STATIC (8); @@ -346,12 +346,12 @@ struct MathKernInfo } protected: - OffsetTo<Coverage> + Offset16To<Coverage> mathKernCoverage; /* Offset to Coverage table - * from the beginning of the * MathKernInfo table. */ - ArrayOf<MathKernInfoRecord> + Array16Of<MathKernInfoRecord> mathKernInfoRecords; /* Array of MathKernInfoRecords, * per-glyph information for @@ -395,22 +395,22 @@ struct MathGlyphInfo protected: /* Offset to MathItalicsCorrectionInfo table - * from the beginning of MathGlyphInfo table. */ - OffsetTo<MathItalicsCorrectionInfo> mathItalicsCorrectionInfo; + Offset16To<MathItalicsCorrectionInfo> mathItalicsCorrectionInfo; /* Offset to MathTopAccentAttachment table - * from the beginning of MathGlyphInfo table. */ - OffsetTo<MathTopAccentAttachment> mathTopAccentAttachment; + Offset16To<MathTopAccentAttachment> mathTopAccentAttachment; /* Offset to coverage table for Extended Shape glyphs - * from the beginning of MathGlyphInfo table. When the left or right glyph of * a box is an extended shape variant, the (ink) box (and not the default * position defined by values in MathConstants table) should be used for * vertical positioning purposes. May be NULL.. */ - OffsetTo<Coverage> extendedShapeCoverage; + Offset16To<Coverage> extendedShapeCoverage; /* Offset to MathKernInfo table - * from the beginning of MathGlyphInfo table. */ - OffsetTo<MathKernInfo> mathKernInfo; + Offset16To<MathKernInfo> mathKernInfo; public: DEFINE_SIZE_STATIC (8); @@ -532,7 +532,7 @@ struct MathGlyphAssembly /* Italics correction of this * MathGlyphAssembly. Should not * depend on the assembly size. */ - ArrayOf<MathGlyphPartRecord> + Array16Of<MathGlyphPartRecord> partRecords; /* Array of part records, from * left to right and bottom to * top. */ @@ -572,10 +572,10 @@ struct MathGlyphConstruction protected: /* Offset to MathGlyphAssembly table for this shape - from the beginning of MathGlyphConstruction table. May be NULL. */ - OffsetTo<MathGlyphAssembly> glyphAssembly; + Offset16To<MathGlyphAssembly> glyphAssembly; /* MathGlyphVariantRecords for alternative variants of the glyphs. */ - ArrayOf<MathGlyphVariantRecord> mathGlyphVariantRecord; + Array16Of<MathGlyphVariantRecord> mathGlyphVariantRecord; public: DEFINE_SIZE_ARRAY (4, mathGlyphVariantRecord); @@ -636,7 +636,7 @@ struct MathVariants { bool vertical = HB_DIRECTION_IS_VERTICAL (direction); unsigned int count = vertical ? vertGlyphCount : horizGlyphCount; - const OffsetTo<Coverage> &coverage = vertical ? vertGlyphCoverage + const Offset16To<Coverage> &coverage = vertical ? vertGlyphCoverage : horizGlyphCoverage; unsigned int index = (this+coverage).get_coverage (glyph); @@ -653,11 +653,11 @@ struct MathVariants /* Minimum overlap of connecting * glyphs during glyph construction, * in design units. */ - OffsetTo<Coverage> vertGlyphCoverage; + Offset16To<Coverage> vertGlyphCoverage; /* Offset to Coverage table - * from the beginning of MathVariants * table. */ - OffsetTo<Coverage> horizGlyphCoverage; + Offset16To<Coverage> horizGlyphCoverage; /* Offset to Coverage table - * from the beginning of MathVariants * table. */ @@ -671,7 +671,7 @@ struct MathVariants /* Array of offsets to MathGlyphConstruction tables - from the beginning of the MathVariants table, for shapes growing in vertical/horizontal direction. */ - UnsizedArrayOf<OffsetTo<MathGlyphConstruction>> + UnsizedArrayOf<Offset16To<MathGlyphConstruction>> glyphConstruction; public: @@ -711,11 +711,11 @@ struct MATH protected: FixedVersion<>version; /* Version of the MATH table * initially set to 0x00010000u */ - OffsetTo<MathConstants> + Offset16To<MathConstants> mathConstants; /* MathConstants table */ - OffsetTo<MathGlyphInfo> + Offset16To<MathGlyphInfo> mathGlyphInfo; /* MathGlyphInfo table */ - OffsetTo<MathVariants> + Offset16To<MathVariants> mathVariants; /* MathVariants table */ public: diff --git a/thirdparty/harfbuzz/src/hb-ot-maxp-table.hh b/thirdparty/harfbuzz/src/hb-ot-maxp-table.hh index 929956d12b..3a019ef782 100644 --- a/thirdparty/harfbuzz/src/hb-ot-maxp-table.hh +++ b/thirdparty/harfbuzz/src/hb-ot-maxp-table.hh @@ -107,7 +107,7 @@ struct maxp maxpV1Tail *dest_v1 = c->serializer->embed<maxpV1Tail> (src_v1); if (unlikely (!dest_v1)) return_trace (false); - if (c->plan->drop_hints) + if (c->plan->flags & HB_SUBSET_FLAGS_NO_HINTING) drop_hint_fields (dest_v1); } diff --git a/thirdparty/harfbuzz/src/hb-ot-meta-table.hh b/thirdparty/harfbuzz/src/hb-ot-meta-table.hh index 1225e26ce1..e31447f8fc 100644 --- a/thirdparty/harfbuzz/src/hb-ot-meta-table.hh +++ b/thirdparty/harfbuzz/src/hb-ot-meta-table.hh @@ -56,7 +56,7 @@ struct DataMap protected: Tag tag; /* A tag indicating the type of metadata. */ - LNNOffsetTo<UnsizedArrayOf<HBUINT8>> + NNOffset32To<UnsizedArrayOf<HBUINT8>> dataZ; /* Offset in bytes from the beginning of the * metadata table to the data for this tag. */ HBUINT32 dataLength; /* Length of the data. The data is not required to @@ -113,7 +113,7 @@ struct meta * Offset from the beginning of the table to the data. * Per OT specification: * Reserved. Not used; should be set to 0. */ - LArrayOf<DataMap> + Array32Of<DataMap> dataMaps;/* Array of data map records. */ public: DEFINE_SIZE_ARRAY (16, dataMaps); diff --git a/thirdparty/harfbuzz/src/hb-ot-name-table.hh b/thirdparty/harfbuzz/src/hb-ot-name-table.hh index ece3c28466..c17bb4abb8 100644 --- a/thirdparty/harfbuzz/src/hb-ot-name-table.hh +++ b/thirdparty/harfbuzz/src/hb-ot-name-table.hh @@ -149,7 +149,7 @@ struct NameRecord HBUINT16 languageID; /* Language ID. */ HBUINT16 nameID; /* Name ID. */ HBUINT16 length; /* String length (in bytes). */ - NNOffsetTo<UnsizedArrayOf<HBUINT8>> + NNOffset16To<UnsizedArrayOf<HBUINT8>> offset; /* String offset from start of storage area (in bytes). */ public: DEFINE_SIZE_STATIC (12); @@ -214,7 +214,7 @@ struct name this->format = 0; this->count = it.len (); - NameRecord *name_records = (NameRecord *) calloc (it.len (), NameRecord::static_size); + NameRecord *name_records = (NameRecord *) hb_calloc (it.len (), NameRecord::static_size); if (unlikely (!name_records)) return_trace (false); hb_array_t<NameRecord> records (name_records, it.len ()); @@ -228,9 +228,10 @@ struct name records.qsort (); c->copy_all (records, src_string_pool); - free (records.arrayZ); + hb_free (records.arrayZ); - if (unlikely (c->ran_out_of_room)) return_trace (false); + + if (unlikely (c->ran_out_of_room ())) return_trace (false); this->stringOffset = c->length (); @@ -248,7 +249,11 @@ struct name + nameRecordZ.as_array (count) | hb_filter (c->plan->name_ids, &NameRecord::nameID) | hb_filter (c->plan->name_languages, &NameRecord::languageID) - | hb_filter ([&] (const NameRecord& namerecord) { return c->plan->name_legacy || namerecord.isUnicode (); }) + | hb_filter ([&] (const NameRecord& namerecord) { + return + (c->plan->flags & HB_SUBSET_FLAGS_NAME_LEGACY) + || namerecord.isUnicode (); + }) ; name_prime->serialize (c->serializer, it, hb_addressof (this + stringOffset)); @@ -357,7 +362,7 @@ struct name /* We only implement format 0 for now. */ HBUINT16 format; /* Format selector (=0/1). */ HBUINT16 count; /* Number of name records. */ - NNOffsetTo<UnsizedArrayOf<HBUINT8>> + NNOffset16To<UnsizedArrayOf<HBUINT8>> stringOffset; /* Offset to start of string storage (from start of table). */ UnsizedArrayOf<NameRecord> nameRecordZ; /* The name records where count is the number of records. */ diff --git a/thirdparty/harfbuzz/src/hb-ot-name.cc b/thirdparty/harfbuzz/src/hb-ot-name.cc index 4588226e6e..eff46ef227 100644 --- a/thirdparty/harfbuzz/src/hb-ot-name.cc +++ b/thirdparty/harfbuzz/src/hb-ot-name.cc @@ -156,7 +156,8 @@ hb_ot_name_get_utf (hb_face_t *face, * * Fetches a font name from the OpenType 'name' table. * If @language is #HB_LANGUAGE_INVALID, English ("en") is assumed. - * Returns string in UTF-8 encoding. + * Returns string in UTF-8 encoding. A NUL terminator is always written + * for convenience, and isn't included in the output @text_size. * * Returns: full length of the requested string, or 0 if not found. * Since: 2.1.0 @@ -183,7 +184,8 @@ hb_ot_name_get_utf8 (hb_face_t *face, * * Fetches a font name from the OpenType 'name' table. * If @language is #HB_LANGUAGE_INVALID, English ("en") is assumed. - * Returns string in UTF-16 encoding. + * Returns string in UTF-16 encoding. A NUL terminator is always written + * for convenience, and isn't included in the output @text_size. * * Returns: full length of the requested string, or 0 if not found. * Since: 2.1.0 @@ -209,7 +211,8 @@ hb_ot_name_get_utf16 (hb_face_t *face, * * Fetches a font name from the OpenType 'name' table. * If @language is #HB_LANGUAGE_INVALID, English ("en") is assumed. - * Returns string in UTF-32 encoding. + * Returns string in UTF-32 encoding. A NUL terminator is always written + * for convenience, and isn't included in the output @text_size. * * Returns: full length of the requested string, or 0 if not found. * Since: 2.1.0 diff --git a/thirdparty/harfbuzz/src/hb-ot-os2-table.hh b/thirdparty/harfbuzz/src/hb-ot-os2-table.hh index 8e98f87f4e..f0035e2f04 100644 --- a/thirdparty/harfbuzz/src/hb-ot-os2-table.hh +++ b/thirdparty/harfbuzz/src/hb-ot-os2-table.hh @@ -30,7 +30,6 @@ #include "hb-open-type.hh" #include "hb-ot-os2-unicode-ranges.hh" -#include "hb-ot-cmap-table.hh" #include "hb-set.hh" @@ -172,33 +171,17 @@ struct OS2 TRACE_SUBSET (this); OS2 *os2_prime = c->serializer->embed (this); if (unlikely (!os2_prime)) return_trace (false); + if (c->plan->flags & HB_SUBSET_FLAGS_NO_PRUNE_UNICODE_RANGES) + return_trace (true); - hb_set_t unicodes; - if (!c->plan->glyphs_requested->is_empty ()) - { - hb_map_t unicode_glyphid_map; - - OT::cmap::accelerator_t cmap; - cmap.init (c->plan->source); - cmap.collect_mapping (&unicodes, &unicode_glyphid_map); - cmap.fini (); - - hb_set_set (&unicodes, c->plan->unicodes); - - + unicode_glyphid_map.iter () - | hb_filter (c->plan->glyphs_requested, hb_second) - | hb_map (hb_first) - | hb_sink (unicodes) - ; - } /* when --gids option is not used, no need to do collect_mapping that is * iterating all codepoints in each subtable, which is not efficient */ uint16_t min_cp, max_cp; - find_min_and_max_codepoint (unicodes.is_empty () ? c->plan->unicodes : &unicodes, &min_cp, &max_cp); + find_min_and_max_codepoint (c->plan->unicodes, &min_cp, &max_cp); os2_prime->usFirstCharIndex = min_cp; os2_prime->usLastCharIndex = max_cp; - _update_unicode_ranges (unicodes.is_empty () ? c->plan->unicodes : &unicodes, os2_prime->ulUnicodeRange); + _update_unicode_ranges (c->plan->unicodes, os2_prime->ulUnicodeRange); return_trace (true); } diff --git a/thirdparty/harfbuzz/src/hb-ot-post-table-v2subset.hh b/thirdparty/harfbuzz/src/hb-ot-post-table-v2subset.hh new file mode 100644 index 0000000000..94450eb53a --- /dev/null +++ b/thirdparty/harfbuzz/src/hb-ot-post-table-v2subset.hh @@ -0,0 +1,130 @@ +/* + * Copyright © 2021 Google, Inc. + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + */ + +#ifndef HB_OT_POST_TABLE_V2SUBSET_HH +#define HB_OT_POST_TABLE_V2SUBSET_HH + +#include "hb-open-type.hh" +#include "hb-ot-post-table.hh" + +/* + * post -- PostScript + * https://docs.microsoft.com/en-us/typography/opentype/spec/post + */ + +namespace OT { +template<typename Iterator> +HB_INTERNAL bool postV2Tail::serialize (hb_serialize_context_t *c, + Iterator it, + const void* _post) const +{ + TRACE_SERIALIZE (this); + auto *out = c->start_embed (this); + if (unlikely (!c->check_success (out))) return_trace (false); + if (!out->glyphNameIndex.serialize (c, + it + | hb_map (hb_second))) + return_trace (false); + + hb_set_t copied_indices; + for (const auto& _ : + it ) + { + unsigned glyph_id = _.first; + unsigned new_index = _.second; + + if (new_index < 258) continue; + if (copied_indices.has (new_index)) continue; + copied_indices.add (new_index); + + hb_bytes_t s = reinterpret_cast<const post::accelerator_t*> (_post)->find_glyph_name (glyph_id); + HBUINT8 *o = c->allocate_size<HBUINT8> (HBUINT8::static_size * (s.length + 1)); + if (unlikely (!o)) return_trace (false); + if (!c->check_assign (o[0], s.length, HB_SERIALIZE_ERROR_INT_OVERFLOW)) return_trace (false); + memcpy (o+1, s.arrayZ, HBUINT8::static_size * s.length); + } + + return_trace (true); +} + +HB_INTERNAL bool postV2Tail::subset (hb_subset_context_t *c) const +{ + TRACE_SUBSET (this); + + const hb_map_t &reverse_glyph_map = *c->plan->reverse_glyph_map; + unsigned num_glyphs = c->plan->num_output_glyphs (); + hb_map_t old_new_index_map, old_gid_new_index_map; + unsigned i = 0; + + post::accelerator_t _post; + _post.init (c->plan->source); + + for (hb_codepoint_t new_gid = 0; new_gid < num_glyphs; new_gid++) + { + hb_codepoint_t old_gid = reverse_glyph_map.get (new_gid); + unsigned old_index = glyphNameIndex[old_gid]; + + unsigned new_index; + if (old_index <= 257) new_index = old_index; + else if (old_new_index_map.has (old_index)) new_index = old_new_index_map.get (old_index); + else + { + hb_bytes_t s = _post.find_glyph_name (old_gid); + int standard_glyph_index = -1; + for (unsigned i = 0; i < format1_names_length; i++) + { + if (s == format1_names (i)) + { + standard_glyph_index = i; + break; + } + } + if (standard_glyph_index == -1) + { + new_index = 258 + i; + i++; + } + else + { new_index = standard_glyph_index; } + old_new_index_map.set (old_index, new_index); + } + old_gid_new_index_map.set (old_gid, new_index); + } + + auto index_iter = + + hb_range (num_glyphs) + | hb_map (reverse_glyph_map) + | hb_map_retains_sorting ([&](hb_codepoint_t old_gid) + { + unsigned new_index = old_gid_new_index_map.get (old_gid); + return hb_pair_t<unsigned, unsigned> (old_gid, new_index); + }) + ; + + bool ret = serialize (c->serializer, index_iter, &_post); + _post.fini (); + return_trace (ret); +} + +} /* namespace OT */ +#endif /* HB_OT_POST_TABLE_V2SUBSET_HH */ diff --git a/thirdparty/harfbuzz/src/hb-ot-post-table.hh b/thirdparty/harfbuzz/src/hb-ot-post-table.hh index f22d6e244d..39de671707 100644 --- a/thirdparty/harfbuzz/src/hb-ot-post-table.hh +++ b/thirdparty/harfbuzz/src/hb-ot-post-table.hh @@ -55,8 +55,15 @@ struct postV2Tail return_trace (glyphNameIndex.sanitize (c)); } + template<typename Iterator> + bool serialize (hb_serialize_context_t *c, + Iterator it, + const void* _post) const; + + bool subset (hb_subset_context_t *c) const; + protected: - ArrayOf<HBUINT16> glyphNameIndex; /* This is not an offset, but is the + Array16Of<HBUINT16> glyphNameIndex; /* This is not an offset, but is the * ordinal number of the glyph in 'post' * string tables. */ /*UnsizedArrayOf<HBUINT8> @@ -71,13 +78,18 @@ struct post { static constexpr hb_tag_t tableTag = HB_OT_TAG_post; - void serialize (hb_serialize_context_t *c) const + bool serialize (hb_serialize_context_t *c, bool glyph_names) const { + TRACE_SERIALIZE (this); post *post_prime = c->allocate_min<post> (); - if (unlikely (!post_prime)) return; + if (unlikely (!post_prime)) return_trace (false); memcpy (post_prime, this, post::min_size); - post_prime->version.major = 3; // Version 3 does not have any glyph names. + if (!glyph_names) + return_trace (c->check_assign (post_prime->version.major, 3, + HB_SERIALIZE_ERROR_INT_OVERFLOW)); // Version 3 does not have any glyph names. + + return_trace (true); } bool subset (hb_subset_context_t *c) const @@ -86,13 +98,19 @@ struct post post *post_prime = c->serializer->start_embed<post> (); if (unlikely (!post_prime)) return_trace (false); - serialize (c->serializer); + bool glyph_names = c->plan->flags & HB_SUBSET_FLAGS_GLYPH_NAMES; + if (!serialize (c->serializer, glyph_names)) + return_trace (false); + + if (glyph_names && version.major == 2) + return_trace (v2X.subset (c)); return_trace (true); } struct accelerator_t { + friend struct postV2Tail; void init (hb_face_t *face) { index_to_offset.init (); @@ -117,7 +135,7 @@ struct post void fini () { index_to_offset.fini (); - free (gids_sorted_by_name.get ()); + hb_free (gids_sorted_by_name.get ()); table.destroy (); } @@ -148,7 +166,7 @@ struct post if (unlikely (!gids)) { - gids = (uint16_t *) malloc (count * sizeof (gids[0])); + gids = (uint16_t *) hb_malloc (count * sizeof (gids[0])); if (unlikely (!gids)) return false; /* Anything better?! */ @@ -158,7 +176,7 @@ struct post if (unlikely (!gids_sorted_by_name.cmpexch (nullptr, gids))) { - free (gids); + hb_free (gids); goto retry; } } @@ -236,7 +254,7 @@ struct post private: uint32_t version; - const ArrayOf<HBUINT16> *glyphNameIndex; + const Array16Of<HBUINT16> *glyphNameIndex; hb_vector_t<uint32_t> index_to_offset; const uint8_t *pool; hb_atomic_ptr_t<uint16_t *> gids_sorted_by_name; diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-fallback.hh b/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-fallback.hh index 244e967b12..2b3b134ae3 100644 --- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-fallback.hh +++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-fallback.hh @@ -208,11 +208,11 @@ struct ManifestLookup { public: OT::Tag tag; - OT::OffsetTo<OT::SubstLookup> lookupOffset; + OT::Offset16To<OT::SubstLookup> lookupOffset; public: DEFINE_SIZE_STATIC (6); }; -typedef OT::ArrayOf<ManifestLookup> Manifest; +typedef OT::Array16Of<ManifestLookup> Manifest; static bool arabic_fallback_plan_init_win1256 (arabic_fallback_plan_t *fallback_plan HB_UNUSED, @@ -290,7 +290,7 @@ static arabic_fallback_plan_t * arabic_fallback_plan_create (const hb_ot_shape_plan_t *plan, hb_font_t *font) { - arabic_fallback_plan_t *fallback_plan = (arabic_fallback_plan_t *) calloc (1, sizeof (arabic_fallback_plan_t)); + arabic_fallback_plan_t *fallback_plan = (arabic_fallback_plan_t *) hb_calloc (1, sizeof (arabic_fallback_plan_t)); if (unlikely (!fallback_plan)) return const_cast<arabic_fallback_plan_t *> (&Null (arabic_fallback_plan_t)); @@ -308,7 +308,7 @@ arabic_fallback_plan_create (const hb_ot_shape_plan_t *plan, return fallback_plan; assert (fallback_plan->num_lookups == 0); - free (fallback_plan); + hb_free (fallback_plan); return const_cast<arabic_fallback_plan_t *> (&Null (arabic_fallback_plan_t)); } @@ -323,10 +323,10 @@ arabic_fallback_plan_destroy (arabic_fallback_plan_t *fallback_plan) { fallback_plan->accel_array[i].fini (); if (fallback_plan->free_lookups) - free (fallback_plan->lookup_array[i]); + hb_free (fallback_plan->lookup_array[i]); } - free (fallback_plan); + hb_free (fallback_plan); } static void diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-joining-list.hh b/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-joining-list.hh index c022d4bb06..e6339ee72b 100644 --- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-joining-list.hh +++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-joining-list.hh @@ -6,10 +6,10 @@ * * on files with these headers: * - * # ArabicShaping-13.0.0.txt - * # Date: 2020-01-31, 23:55:00 GMT [KW, RP] - * # Scripts-13.0.0.txt - * # Date: 2020-01-22, 00:07:43 GMT + * # ArabicShaping-14.0.0.txt + * # Date: 2021-05-21, 01:54:00 GMT [KW, RP] + * # Scripts-14.0.0.txt + * # Date: 2021-07-10, 00:35:31 GMT */ #ifndef HB_OT_SHAPE_COMPLEX_ARABIC_JOINING_LIST_HH @@ -29,6 +29,7 @@ has_arabic_joining (hb_script_t script) case HB_SCRIPT_MANICHAEAN: case HB_SCRIPT_MONGOLIAN: case HB_SCRIPT_NKO: + case HB_SCRIPT_OLD_UYGHUR: case HB_SCRIPT_PHAGS_PA: case HB_SCRIPT_PSALTER_PAHLAVI: case HB_SCRIPT_SOGDIAN: diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-table.hh b/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-table.hh index 70ffe623c0..c158964f2c 100644 --- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-table.hh +++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-table.hh @@ -6,10 +6,10 @@ * * on files with these headers: * - * # ArabicShaping-13.0.0.txt - * # Date: 2020-01-31, 23:55:00 GMT [KW, RP] - * # Blocks-13.0.0.txt - * # Date: 2019-07-10, 19:06:00 GMT [KW] + * # ArabicShaping-14.0.0.txt + * # Date: 2021-05-21, 01:54:00 GMT [KW, RP] + * # Blocks-14.0.0.txt + * # Date: 2021-01-22, 23:29:00 GMT [KW] * UnicodeData.txt does not have a header. */ @@ -75,13 +75,17 @@ static const uint8_t joining_table[] = /* Syriac Supplement */ - /* 0860 */ D,U,D,D,D,D,U,R,D,R,R,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X, - /* 0880 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X, + /* 0860 */ D,U,D,D,D,D,U,R,D,R,R,X,X,X,X,X, + + /* Arabic Extended-B */ + + /* 0860 */ R,R,R,R,R,R,R,R,R,R,R,R,R,R,R,R, + /* 0880 */ R,R,R,C,C,C,D,U,U,D,D,D,D,D,R,X,U,U,X,X,X,X,X,X,X,X,X,X,X,X,X,X, /* Arabic Extended-A */ - /* 08A0 */ D,D,D,D,D,D,D,D,D,D,R,R,R,U,R,D,D,R,R,D,D,X,D,D,D,R,D,D,D,D,D,D, - /* 08C0 */ D,D,D,D,D,D,D,D,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X, + /* 08A0 */ D,D,D,D,D,D,D,D,D,D,R,R,R,U,R,D,D,R,R,D,D,D,D,D,D,R,D,D,D,D,D,D, + /* 08C0 */ D,D,D,D,D,D,D,D,D,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X, /* 08E0 */ X,X,U, #define joining_offset_0x1806u 739 @@ -137,23 +141,28 @@ static const uint8_t joining_table[] = /* Sogdian */ /* 10F20 */ D,D,D,R,D,D,D,D,D,D,D,D,D,D,D,D, - /* 10F40 */ D,D,D,D,D,U,X,X,X,X,X,X,X,X,X,X,X,D,D,D,R, + /* 10F40 */ D,D,D,D,D,U,X,X,X,X,X,X,X,X,X,X,X,D,D,D,R,X,X,X,X,X,X,X,X,X,X,X, + /* 10F60 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X, + + /* Old Uyghur */ -#define joining_offset_0x10fb0u 1219 + /* 10F60 */ D,D,D,D,R,R,D,D,D,D,D,D,D,D,D,D, + /* 10F80 */ D,D,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X, + /* 10FA0 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X, /* Chorasmian */ /* 10FA0 */ D,U,D,D,R,R,R,U,D,R,R,D,D,R,D,D, /* 10FC0 */ U,D,R,R,D,U,U,U,U,R,D,L, -#define joining_offset_0x110bdu 1247 +#define joining_offset_0x110bdu 1338 /* Kaithi */ /* 110A0 */ U,X,X, /* 110C0 */ X,X,X,X,X,X,X,X,X,X,X,X,X,U, -#define joining_offset_0x1e900u 1264 +#define joining_offset_0x1e900u 1355 /* Adlam */ @@ -161,7 +170,7 @@ static const uint8_t joining_table[] = /* 1E920 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D, /* 1E940 */ D,D,D,D,X,X,X,X,X,X,X,T, -}; /* Table items: 1340; occupancy: 57% */ +}; /* Table items: 1431; occupancy: 57% */ static unsigned int @@ -189,8 +198,7 @@ joining_type (hb_codepoint_t u) if (hb_in_range<hb_codepoint_t> (u, 0x10AC0u, 0x10AEFu)) return joining_table[u - 0x10AC0u + joining_offset_0x10ac0u]; if (hb_in_range<hb_codepoint_t> (u, 0x10B80u, 0x10BAFu)) return joining_table[u - 0x10B80u + joining_offset_0x10b80u]; if (hb_in_range<hb_codepoint_t> (u, 0x10D00u, 0x10D23u)) return joining_table[u - 0x10D00u + joining_offset_0x10d00u]; - if (hb_in_range<hb_codepoint_t> (u, 0x10F30u, 0x10F54u)) return joining_table[u - 0x10F30u + joining_offset_0x10f30u]; - if (hb_in_range<hb_codepoint_t> (u, 0x10FB0u, 0x10FCBu)) return joining_table[u - 0x10FB0u + joining_offset_0x10fb0u]; + if (hb_in_range<hb_codepoint_t> (u, 0x10F30u, 0x10FCBu)) return joining_table[u - 0x10F30u + joining_offset_0x10f30u]; break; case 0x11u: diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic.cc b/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic.cc index 1f244f940c..1f8c1410fc 100644 --- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic.cc +++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic.cc @@ -259,7 +259,7 @@ struct arabic_shape_plan_t void * data_create_arabic (const hb_ot_shape_plan_t *plan) { - arabic_shape_plan_t *arabic_plan = (arabic_shape_plan_t *) calloc (1, sizeof (arabic_shape_plan_t)); + arabic_shape_plan_t *arabic_plan = (arabic_shape_plan_t *) hb_calloc (1, sizeof (arabic_shape_plan_t)); if (unlikely (!arabic_plan)) return nullptr; @@ -282,7 +282,7 @@ data_destroy_arabic (void *data) arabic_fallback_plan_destroy (arabic_plan->fallback_plan); - free (data); + hb_free (data); } static void diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-hangul.cc b/thirdparty/harfbuzz/src/hb-ot-shape-complex-hangul.cc index dbedd6af0c..0d84a76b85 100644 --- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-hangul.cc +++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-hangul.cc @@ -80,7 +80,7 @@ struct hangul_shape_plan_t static void * data_create_hangul (const hb_ot_shape_plan_t *plan) { - hangul_shape_plan_t *hangul_plan = (hangul_shape_plan_t *) calloc (1, sizeof (hangul_shape_plan_t)); + hangul_shape_plan_t *hangul_plan = (hangul_shape_plan_t *) hb_calloc (1, sizeof (hangul_shape_plan_t)); if (unlikely (!hangul_plan)) return nullptr; @@ -93,7 +93,7 @@ data_create_hangul (const hb_ot_shape_plan_t *plan) static void data_destroy_hangul (void *data) { - free (data); + hb_free (data); } /* Constants for algorithmic hangul syllable [de]composition. */ diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-indic-table.cc b/thirdparty/harfbuzz/src/hb-ot-shape-complex-indic-table.cc index dd204b23c1..326aa9f96e 100644 --- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-indic-table.cc +++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-indic-table.cc @@ -6,12 +6,12 @@ * * on files with these headers: * - * # IndicSyllabicCategory-13.0.0.txt - * # Date: 2019-07-22, 19:55:00 GMT [KW, RP] - * # IndicPositionalCategory-13.0.0.txt - * # Date: 2019-07-23, 00:01:00 GMT [KW, RP] - * # Blocks-13.0.0.txt - * # Date: 2019-07-10, 19:06:00 GMT [KW] + * # IndicSyllabicCategory-14.0.0.txt + * # Date: 2021-05-22, 01:01:00 GMT [KW, RP] + * # IndicPositionalCategory-14.0.0.txt + * # Date: 2021-05-22, 01:01:00 GMT [KW, RP] + * # Blocks-14.0.0.txt + * # Date: 2021-01-22, 23:29:00 GMT [KW] */ #include "hb.hh" @@ -27,9 +27,9 @@ #define ISC_Bi INDIC_SYLLABIC_CATEGORY_BINDU /* 91 chars; Bindu */ #define ISC_BJN INDIC_SYLLABIC_CATEGORY_BRAHMI_JOINING_NUMBER /* 20 chars; Brahmi_Joining_Number */ #define ISC_Ca INDIC_SYLLABIC_CATEGORY_CANTILLATION_MARK /* 59 chars; Cantillation_Mark */ -#define ISC_C INDIC_SYLLABIC_CATEGORY_CONSONANT /* 2195 chars; Consonant */ -#define ISC_CD INDIC_SYLLABIC_CATEGORY_CONSONANT_DEAD /* 12 chars; Consonant_Dead */ -#define ISC_CF INDIC_SYLLABIC_CATEGORY_CONSONANT_FINAL /* 67 chars; Consonant_Final */ +#define ISC_C INDIC_SYLLABIC_CATEGORY_CONSONANT /* 2206 chars; Consonant */ +#define ISC_CD INDIC_SYLLABIC_CATEGORY_CONSONANT_DEAD /* 14 chars; Consonant_Dead */ +#define ISC_CF INDIC_SYLLABIC_CATEGORY_CONSONANT_FINAL /* 70 chars; Consonant_Final */ #define ISC_CHL INDIC_SYLLABIC_CATEGORY_CONSONANT_HEAD_LETTER /* 5 chars; Consonant_Head_Letter */ #define ISC_CIP INDIC_SYLLABIC_CATEGORY_CONSONANT_INITIAL_POSTFIXED /* 1 chars; Consonant_Initial_Postfixed */ #define ISC_CK INDIC_SYLLABIC_CATEGORY_CONSONANT_KILLER /* 2 chars; Consonant_Killer */ @@ -38,18 +38,18 @@ #define ISC_CPR INDIC_SYLLABIC_CATEGORY_CONSONANT_PRECEDING_REPHA /* 3 chars; Consonant_Preceding_Repha */ #define ISC_CPrf INDIC_SYLLABIC_CATEGORY_CONSONANT_PREFIXED /* 10 chars; Consonant_Prefixed */ #define ISC_CS INDIC_SYLLABIC_CATEGORY_CONSONANT_SUBJOINED /* 94 chars; Consonant_Subjoined */ -#define ISC_CSR INDIC_SYLLABIC_CATEGORY_CONSONANT_SUCCEEDING_REPHA /* 4 chars; Consonant_Succeeding_Repha */ +#define ISC_CSR INDIC_SYLLABIC_CATEGORY_CONSONANT_SUCCEEDING_REPHA /* 1 chars; Consonant_Succeeding_Repha */ #define ISC_CWS INDIC_SYLLABIC_CATEGORY_CONSONANT_WITH_STACKER /* 8 chars; Consonant_With_Stacker */ #define ISC_GM INDIC_SYLLABIC_CATEGORY_GEMINATION_MARK /* 3 chars; Gemination_Mark */ #define ISC_IS INDIC_SYLLABIC_CATEGORY_INVISIBLE_STACKER /* 12 chars; Invisible_Stacker */ #define ISC_ZWJ INDIC_SYLLABIC_CATEGORY_JOINER /* 1 chars; Joiner */ #define ISC_ML INDIC_SYLLABIC_CATEGORY_MODIFYING_LETTER /* 1 chars; Modifying_Letter */ #define ISC_ZWNJ INDIC_SYLLABIC_CATEGORY_NON_JOINER /* 1 chars; Non_Joiner */ -#define ISC_N INDIC_SYLLABIC_CATEGORY_NUKTA /* 31 chars; Nukta */ +#define ISC_N INDIC_SYLLABIC_CATEGORY_NUKTA /* 32 chars; Nukta */ #define ISC_Nd INDIC_SYLLABIC_CATEGORY_NUMBER /* 491 chars; Number */ #define ISC_NJ INDIC_SYLLABIC_CATEGORY_NUMBER_JOINER /* 1 chars; Number_Joiner */ #define ISC_x INDIC_SYLLABIC_CATEGORY_OTHER /* 1 chars; Other */ -#define ISC_PK INDIC_SYLLABIC_CATEGORY_PURE_KILLER /* 23 chars; Pure_Killer */ +#define ISC_PK INDIC_SYLLABIC_CATEGORY_PURE_KILLER /* 25 chars; Pure_Killer */ #define ISC_RS INDIC_SYLLABIC_CATEGORY_REGISTER_SHIFTER /* 2 chars; Register_Shifter */ #define ISC_SM INDIC_SYLLABIC_CATEGORY_SYLLABLE_MODIFIER /* 25 chars; Syllable_Modifier */ #define ISC_TL INDIC_SYLLABIC_CATEGORY_TONE_LETTER /* 7 chars; Tone_Letter */ @@ -57,18 +57,18 @@ #define ISC_V INDIC_SYLLABIC_CATEGORY_VIRAMA /* 27 chars; Virama */ #define ISC_Vs INDIC_SYLLABIC_CATEGORY_VISARGA /* 35 chars; Visarga */ #define ISC_Vo INDIC_SYLLABIC_CATEGORY_VOWEL /* 30 chars; Vowel */ -#define ISC_M INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT /* 683 chars; Vowel_Dependent */ -#define ISC_VI INDIC_SYLLABIC_CATEGORY_VOWEL_INDEPENDENT /* 484 chars; Vowel_Independent */ +#define ISC_M INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT /* 686 chars; Vowel_Dependent */ +#define ISC_VI INDIC_SYLLABIC_CATEGORY_VOWEL_INDEPENDENT /* 486 chars; Vowel_Independent */ -#define IMC_B INDIC_MATRA_CATEGORY_BOTTOM /* 351 chars; Bottom */ +#define IMC_B INDIC_MATRA_CATEGORY_BOTTOM /* 352 chars; Bottom */ #define IMC_BL INDIC_MATRA_CATEGORY_BOTTOM_AND_LEFT /* 1 chars; Bottom_And_Left */ #define IMC_BR INDIC_MATRA_CATEGORY_BOTTOM_AND_RIGHT /* 4 chars; Bottom_And_Right */ #define IMC_L INDIC_MATRA_CATEGORY_LEFT /* 64 chars; Left */ #define IMC_LR INDIC_MATRA_CATEGORY_LEFT_AND_RIGHT /* 22 chars; Left_And_Right */ #define IMC_x INDIC_MATRA_CATEGORY_NOT_APPLICABLE /* 1 chars; Not_Applicable */ #define IMC_O INDIC_MATRA_CATEGORY_OVERSTRUCK /* 10 chars; Overstruck */ -#define IMC_R INDIC_MATRA_CATEGORY_RIGHT /* 288 chars; Right */ -#define IMC_T INDIC_MATRA_CATEGORY_TOP /* 415 chars; Top */ +#define IMC_R INDIC_MATRA_CATEGORY_RIGHT /* 290 chars; Right */ +#define IMC_T INDIC_MATRA_CATEGORY_TOP /* 418 chars; Top */ #define IMC_TB INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM /* 10 chars; Top_And_Bottom */ #define IMC_TBL INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM_AND_LEFT /* 2 chars; Top_And_Bottom_And_Left */ #define IMC_TBR INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM_AND_RIGHT /* 1 chars; Top_And_Bottom_And_Right */ @@ -231,11 +231,11 @@ static const uint16_t indic_table[] = { /* 0C20 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), /* 0C28 */ _(C,x), _(x,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), /* 0C30 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), - /* 0C38 */ _(C,x), _(C,x), _(x,x), _(x,x), _(x,x), _(A,x), _(M,T), _(M,T), + /* 0C38 */ _(C,x), _(C,x), _(x,x), _(x,x), _(N,B), _(A,x), _(M,T), _(M,T), /* 0C40 */ _(M,T), _(M,R), _(M,R), _(M,R), _(M,R), _(x,x), _(M,T), _(M,T), /* 0C48 */ _(M,TB), _(x,x), _(M,T), _(M,T), _(M,T), _(V,T), _(x,x), _(x,x), /* 0C50 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(M,T), _(M,B), _(x,x), - /* 0C58 */ _(C,x), _(C,x), _(C,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), + /* 0C58 */ _(C,x), _(C,x), _(C,x), _(x,x), _(x,x), _(CD,x), _(x,x), _(x,x), /* 0C60 */ _(VI,x), _(VI,x), _(M,B), _(M,B), _(x,x), _(x,x), _(Nd,x), _(Nd,x), /* 0C68 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), /* 0C70 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), @@ -254,7 +254,7 @@ static const uint16_t indic_table[] = { /* 0CC0 */ _(M,TR), _(M,R), _(M,R), _(M,R), _(M,R), _(x,x), _(M,T), _(M,TR), /* 0CC8 */ _(M,TR), _(x,x), _(M,TR), _(M,TR), _(M,T), _(V,T), _(x,x), _(x,x), /* 0CD0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(M,R), _(M,R), _(x,x), - /* 0CD8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(C,x), _(x,x), + /* 0CD8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(CD,x), _(C,x), _(x,x), /* 0CE0 */ _(VI,x), _(VI,x), _(M,B), _(M,B), _(x,x), _(x,x), _(Nd,x), _(Nd,x), /* 0CE8 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), /* 0CF0 */ _(x,x),_(CWS,x),_(CWS,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), @@ -402,7 +402,7 @@ static const uint16_t indic_table[] = { /* AA70 */ _(x,x), _(C,x), _(C,x), _(C,x), _(CP,x), _(CP,x), _(CP,x), _(x,x), /* AA78 */ _(x,x), _(x,x), _(C,x), _(TM,R), _(TM,T), _(TM,R), _(C,x), _(C,x), -}; /* Table items: 1792; occupancy: 70% */ +}; /* Table items: 1792; occupancy: 71% */ uint16_t hb_indic_get_categories (hb_codepoint_t u) diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-indic.cc b/thirdparty/harfbuzz/src/hb-ot-shape-complex-indic.cc index a4f2d9a847..0983a32848 100644 --- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-indic.cc +++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-indic.cc @@ -106,7 +106,8 @@ indic_features[] = { /* * Basic features. - * These features are applied in order, one at a time, after initial_reordering. + * These features are applied in order, one at a time, after initial_reordering, + * constrained to the syllable. */ {HB_TAG('n','u','k','t'), F_GLOBAL_MANUAL_JOINERS}, {HB_TAG('a','k','h','n'), F_GLOBAL_MANUAL_JOINERS}, @@ -121,8 +122,8 @@ indic_features[] = {HB_TAG('c','j','c','t'), F_GLOBAL_MANUAL_JOINERS}, /* * Other features. - * These features are applied all at once, after final_reordering - * but before clearing syllables. + * These features are applied all at once, after final_reordering, constrained + * to the syllable. * Default Bengali font in Windows for example has intermixed * lookups for init,pres,abvs,blws features. */ @@ -257,7 +258,7 @@ struct indic_shape_plan_t static void * data_create_indic (const hb_ot_shape_plan_t *plan) { - indic_shape_plan_t *indic_plan = (indic_shape_plan_t *) calloc (1, sizeof (indic_shape_plan_t)); + indic_shape_plan_t *indic_plan = (indic_shape_plan_t *) hb_calloc (1, sizeof (indic_shape_plan_t)); if (unlikely (!indic_plan)) return nullptr; @@ -300,7 +301,7 @@ data_create_indic (const hb_ot_shape_plan_t *plan) static void data_destroy_indic (void *data) { - free (data); + hb_free (data); } static indic_position_t @@ -960,7 +961,8 @@ initial_reordering_indic (const hb_ot_shape_plan_t *plan, hb_syllabic_insert_dotted_circles (font, buffer, indic_broken_cluster, OT_DOTTEDCIRCLE, - OT_Repha); + OT_Repha, + POS_END); foreach_syllable (buffer, start, end) initial_reordering_syllable_indic (plan, font->face, buffer, start, end); diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-khmer-machine.hh b/thirdparty/harfbuzz/src/hb-ot-shape-complex-khmer-machine.hh index 82ab186a41..c52f72f394 100644 --- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-khmer-machine.hh +++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-khmer-machine.hh @@ -1,29 +1,30 @@ + #line 1 "hb-ot-shape-complex-khmer-machine.rl" /* -* Copyright © 2011,2012 Google, Inc. -* -* This is part of HarfBuzz, a text shaping library. -* -* Permission is hereby granted, without written agreement and without -* license or royalty fees, to use, copy, modify, and distribute this -* software and its documentation for any purpose, provided that the -* above copyright notice and the following two paragraphs appear in -* all copies of this software. -* -* IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -* ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -* IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -* DAMAGE. -* -* THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -* BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -* FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -* ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. -* -* Google Author(s): Behdad Esfahbod -*/ + * Copyright © 2011,2012 Google, Inc. + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + * Google Author(s): Behdad Esfahbod + */ #ifndef HB_OT_SHAPE_COMPLEX_KHMER_MACHINE_HH #define HB_OT_SHAPE_COMPLEX_KHMER_MACHINE_HH @@ -31,13 +32,13 @@ #include "hb.hh" enum khmer_syllable_type_t { - khmer_consonant_syllable, - khmer_broken_cluster, - khmer_non_khmer_cluster, + khmer_consonant_syllable, + khmer_broken_cluster, + khmer_non_khmer_cluster, }; -#line 41 "hb-ot-shape-complex-khmer-machine.hh" +#line 42 "hb-ot-shape-complex-khmer-machine.hh" #define khmer_syllable_machine_ex_C 1u #define khmer_syllable_machine_ex_Coeng 14u #define khmer_syllable_machine_ex_DOTTEDCIRCLE 12u @@ -55,125 +56,180 @@ enum khmer_syllable_type_t { #define khmer_syllable_machine_ex_ZWNJ 5u -#line 59 "hb-ot-shape-complex-khmer-machine.hh" +#line 60 "hb-ot-shape-complex-khmer-machine.hh" static const unsigned char _khmer_syllable_machine_trans_keys[] = { - 2u, 8u, 2u, 6u, 2u, 8u, 2u, 6u, - 0u, 0u, 2u, 6u, 2u, 8u, 2u, 6u, - 2u, 8u, 2u, 6u, 2u, 6u, 2u, 8u, - 2u, 6u, 0u, 0u, 2u, 6u, 2u, 8u, - 2u, 6u, 2u, 8u, 2u, 6u, 2u, 8u, - 0u, 11u, 2u, 11u, 2u, 11u, 2u, 11u, - 7u, 7u, 2u, 7u, 2u, 11u, 2u, 11u, - 2u, 11u, 0u, 0u, 2u, 8u, 2u, 11u, - 2u, 11u, 7u, 7u, 2u, 7u, 2u, 11u, - 2u, 11u, 0u, 0u, 2u, 11u, 2u, 11u, - 0u + 5u, 26u, 5u, 21u, 5u, 26u, 5u, 21u, 1u, 16u, 5u, 21u, 5u, 26u, 5u, 21u, + 5u, 26u, 5u, 21u, 5u, 21u, 5u, 26u, 5u, 21u, 1u, 16u, 5u, 21u, 5u, 26u, + 5u, 21u, 5u, 26u, 5u, 21u, 5u, 26u, 1u, 29u, 5u, 29u, 5u, 29u, 5u, 29u, + 22u, 22u, 5u, 22u, 5u, 29u, 5u, 29u, 5u, 29u, 1u, 16u, 5u, 26u, 5u, 29u, + 5u, 29u, 22u, 22u, 5u, 22u, 5u, 29u, 5u, 29u, 1u, 16u, 5u, 29u, 5u, 29u, + 0 }; -static const signed char _khmer_syllable_machine_char_class[] = { - 0, 0, 1, 1, 2, 2, 1, 1, - 1, 1, 3, 3, 1, 4, 1, 0, - 1, 1, 1, 5, 6, 7, 1, 1, - 1, 8, 9, 10, 11, 0 +static const char _khmer_syllable_machine_key_spans[] = { + 22, 17, 22, 17, 16, 17, 22, 17, + 22, 17, 17, 22, 17, 16, 17, 22, + 17, 22, 17, 22, 29, 25, 25, 25, + 1, 18, 25, 25, 25, 16, 22, 25, + 25, 1, 18, 25, 25, 16, 25, 25 }; static const short _khmer_syllable_machine_index_offsets[] = { - 0, 7, 12, 19, 24, 25, 30, 37, - 42, 49, 54, 59, 66, 71, 72, 77, - 84, 89, 96, 101, 108, 120, 130, 140, - 150, 151, 157, 167, 177, 187, 188, 195, - 205, 215, 216, 222, 232, 242, 243, 253, - 0 -}; - -static const signed char _khmer_syllable_machine_indicies[] = { - 1, 0, 0, 2, 3, 0, 4, 1, - 0, 0, 0, 3, 1, 0, 0, 0, - 3, 0, 4, 5, 0, 0, 0, 4, - 6, 7, 0, 0, 0, 8, 9, 0, - 0, 0, 10, 0, 4, 9, 0, 0, - 0, 10, 11, 0, 0, 0, 12, 0, - 4, 11, 0, 0, 0, 12, 14, 13, - 13, 13, 15, 14, 16, 16, 16, 15, - 16, 17, 18, 16, 16, 16, 17, 19, - 20, 16, 16, 16, 21, 22, 16, 16, - 16, 23, 16, 17, 22, 16, 16, 16, - 23, 24, 16, 16, 16, 25, 16, 17, - 24, 16, 16, 16, 25, 14, 16, 16, - 26, 15, 16, 17, 29, 28, 30, 2, - 31, 28, 15, 19, 17, 23, 25, 21, - 33, 32, 34, 2, 3, 6, 4, 10, - 12, 8, 35, 32, 36, 32, 3, 6, - 4, 10, 12, 8, 5, 32, 36, 32, - 4, 6, 32, 32, 32, 8, 6, 7, - 32, 36, 32, 8, 6, 37, 32, 36, - 32, 10, 6, 4, 32, 32, 8, 38, - 32, 36, 32, 12, 6, 4, 10, 32, - 8, 35, 32, 34, 32, 3, 6, 4, - 10, 12, 8, 29, 14, 39, 39, 39, - 15, 39, 17, 41, 40, 42, 40, 15, - 19, 17, 23, 25, 21, 18, 40, 42, - 40, 17, 19, 40, 40, 40, 21, 19, - 20, 40, 42, 40, 21, 19, 43, 40, - 42, 40, 23, 19, 17, 40, 40, 21, - 44, 40, 42, 40, 25, 19, 17, 23, - 40, 21, 45, 46, 40, 31, 26, 15, - 19, 17, 23, 25, 21, 41, 40, 31, - 40, 15, 19, 17, 23, 25, 21, 0 + 0, 23, 41, 64, 82, 99, 117, 140, + 158, 181, 199, 217, 240, 258, 275, 293, + 316, 334, 357, 375, 398, 428, 454, 480, + 506, 508, 527, 553, 579, 605, 622, 645, + 671, 697, 699, 718, 744, 770, 787, 813 }; -static const signed char _khmer_syllable_machine_index_defaults[] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 13, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 28, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 39, 40, - 40, 40, 40, 40, 40, 40, 40, 40, - 0 +static const char _khmer_syllable_machine_indicies[] = { + 1, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2, + 3, 0, 0, 0, 0, 4, 0, 1, + 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, + 0, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 0, 0, 0, 0, 4, 0, + 5, 5, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 4, 0, 6, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6, 0, 7, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 0, 9, 9, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 10, 0, 0, + 0, 0, 4, 0, 9, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 10, 0, 11, 11, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 12, 0, + 0, 0, 0, 4, 0, 11, 11, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 12, 0, 14, + 14, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 15, + 13, 14, 14, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 15, 16, 16, 16, 16, 17, 16, + 18, 18, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 17, 16, 19, 19, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 19, 16, 20, 20, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 21, 16, 22, 22, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 23, 16, 16, + 16, 16, 17, 16, 22, 22, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 23, 16, 24, 24, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 25, 16, + 16, 16, 16, 17, 16, 24, 24, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 25, 16, 14, + 14, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 26, 15, + 16, 16, 16, 16, 17, 16, 28, 28, + 27, 27, 29, 29, 27, 27, 27, 27, + 2, 2, 27, 30, 27, 28, 27, 27, + 27, 27, 15, 19, 27, 27, 27, 17, + 23, 25, 21, 27, 32, 32, 31, 31, + 31, 31, 31, 31, 31, 33, 31, 31, + 31, 31, 31, 2, 3, 6, 31, 31, + 31, 4, 10, 12, 8, 31, 34, 34, + 31, 31, 31, 31, 31, 31, 31, 35, + 31, 31, 31, 31, 31, 31, 3, 6, + 31, 31, 31, 4, 10, 12, 8, 31, + 5, 5, 31, 31, 31, 31, 31, 31, + 31, 35, 31, 31, 31, 31, 31, 31, + 4, 6, 31, 31, 31, 31, 31, 31, + 8, 31, 6, 31, 7, 7, 31, 31, + 31, 31, 31, 31, 31, 35, 31, 31, + 31, 31, 31, 31, 8, 6, 31, 36, + 36, 31, 31, 31, 31, 31, 31, 31, + 35, 31, 31, 31, 31, 31, 31, 10, + 6, 31, 31, 31, 4, 31, 31, 8, + 31, 37, 37, 31, 31, 31, 31, 31, + 31, 31, 35, 31, 31, 31, 31, 31, + 31, 12, 6, 31, 31, 31, 4, 10, + 31, 8, 31, 34, 34, 31, 31, 31, + 31, 31, 31, 31, 33, 31, 31, 31, + 31, 31, 31, 3, 6, 31, 31, 31, + 4, 10, 12, 8, 31, 28, 28, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 28, 31, 14, 14, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 15, 38, + 38, 38, 38, 17, 38, 40, 40, 39, + 39, 39, 39, 39, 39, 39, 41, 39, + 39, 39, 39, 39, 39, 15, 19, 39, + 39, 39, 17, 23, 25, 21, 39, 18, + 18, 39, 39, 39, 39, 39, 39, 39, + 41, 39, 39, 39, 39, 39, 39, 17, + 19, 39, 39, 39, 39, 39, 39, 21, + 39, 19, 39, 20, 20, 39, 39, 39, + 39, 39, 39, 39, 41, 39, 39, 39, + 39, 39, 39, 21, 19, 39, 42, 42, + 39, 39, 39, 39, 39, 39, 39, 41, + 39, 39, 39, 39, 39, 39, 23, 19, + 39, 39, 39, 17, 39, 39, 21, 39, + 43, 43, 39, 39, 39, 39, 39, 39, + 39, 41, 39, 39, 39, 39, 39, 39, + 25, 19, 39, 39, 39, 17, 23, 39, + 21, 39, 44, 44, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, + 39, 44, 39, 45, 45, 39, 39, 39, + 39, 39, 39, 39, 30, 39, 39, 39, + 39, 39, 26, 15, 19, 39, 39, 39, + 17, 23, 25, 21, 39, 40, 40, 39, + 39, 39, 39, 39, 39, 39, 30, 39, + 39, 39, 39, 39, 39, 15, 19, 39, + 39, 39, 17, 23, 25, 21, 39, 0 }; -static const signed char _khmer_syllable_machine_cond_targs[] = { - 20, 1, 28, 22, 23, 3, 24, 5, - 25, 7, 26, 9, 27, 20, 10, 31, - 20, 32, 12, 33, 14, 34, 16, 35, - 18, 36, 39, 20, 20, 21, 30, 37, - 20, 0, 29, 2, 4, 6, 8, 20, - 20, 11, 13, 15, 17, 38, 19, 0 +static const char _khmer_syllable_machine_trans_targs[] = { + 20, 1, 28, 22, 23, 3, 24, 5, + 25, 7, 26, 9, 27, 20, 10, 31, + 20, 32, 12, 33, 14, 34, 16, 35, + 18, 36, 39, 20, 21, 30, 37, 20, + 0, 29, 2, 4, 6, 8, 20, 20, + 11, 13, 15, 17, 38, 19 }; -static const signed char _khmer_syllable_machine_cond_actions[] = { - 1, 0, 2, 2, 2, 0, 0, 0, - 2, 0, 2, 0, 2, 3, 0, 4, - 5, 2, 0, 0, 0, 2, 0, 2, - 0, 2, 4, 0, 8, 2, 9, 0, - 10, 0, 0, 0, 0, 0, 0, 11, - 12, 0, 0, 0, 0, 4, 0, 0 +static const char _khmer_syllable_machine_trans_actions[] = { + 1, 0, 2, 2, 2, 0, 0, 0, + 2, 0, 2, 0, 2, 3, 0, 4, + 5, 2, 0, 0, 0, 2, 0, 2, + 0, 2, 4, 8, 2, 9, 0, 10, + 0, 0, 0, 0, 0, 0, 11, 12, + 0, 0, 0, 0, 4, 0 }; -static const signed char _khmer_syllable_machine_to_state_actions[] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0 +static const char _khmer_syllable_machine_to_state_actions[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0 }; -static const signed char _khmer_syllable_machine_from_state_actions[] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0 +static const char _khmer_syllable_machine_from_state_actions[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0 }; -static const signed char _khmer_syllable_machine_eof_trans[] = { - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 14, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 28, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 40, 41, - 41, 41, 41, 41, 41, 41, 41, 41, - 0 +static const unsigned char _khmer_syllable_machine_eof_trans[] = { + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 14, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 0, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 39, 40, + 40, 40, 40, 40, 40, 40, 40, 40 }; static const int khmer_syllable_machine_start = 20; @@ -191,263 +247,148 @@ static const int khmer_syllable_machine_en_main = 20; #define found_syllable(syllable_type) \ -HB_STMT_START { \ - if (0) fprintf (stderr, "syllable %d..%d %s\n", ts, te, #syllable_type); \ - for (unsigned int i = ts; i < te; i++) \ - info[i].syllable() = (syllable_serial << 4) | syllable_type; \ - syllable_serial++; \ - if (unlikely (syllable_serial == 16)) syllable_serial = 1; \ - } HB_STMT_END + HB_STMT_START { \ + if (0) fprintf (stderr, "syllable %d..%d %s\n", ts, te, #syllable_type); \ + for (unsigned int i = ts; i < te; i++) \ + info[i].syllable() = (syllable_serial << 4) | syllable_type; \ + syllable_serial++; \ + if (unlikely (syllable_serial == 16)) syllable_serial = 1; \ + } HB_STMT_END static void find_syllables_khmer (hb_buffer_t *buffer) { - unsigned int p, pe, eof, ts, te, act HB_UNUSED; - int cs; - hb_glyph_info_t *info = buffer->info; - -#line 210 "hb-ot-shape-complex-khmer-machine.hh" + unsigned int p, pe, eof, ts, te, act HB_UNUSED; + int cs; + hb_glyph_info_t *info = buffer->info; + +#line 266 "hb-ot-shape-complex-khmer-machine.hh" { - cs = (int)khmer_syllable_machine_start; - ts = 0; - te = 0; - act = 0; + cs = khmer_syllable_machine_start; + ts = 0; + te = 0; + act = 0; } - + #line 106 "hb-ot-shape-complex-khmer-machine.rl" - - - p = 0; - pe = eof = buffer->len; - - unsigned int syllable_serial = 1; - -#line 226 "hb-ot-shape-complex-khmer-machine.hh" + + + p = 0; + pe = eof = buffer->len; + + unsigned int syllable_serial = 1; + +#line 282 "hb-ot-shape-complex-khmer-machine.hh" { - unsigned int _trans = 0; - const unsigned char * _keys; - const signed char * _inds; - int _ic; - _resume: {} - if ( p == pe && p != eof ) - goto _out; - switch ( _khmer_syllable_machine_from_state_actions[cs] ) { - case 7: { - { + int _slen; + int _trans; + const unsigned char *_keys; + const char *_inds; + if ( p == pe ) + goto _test_eof; +_resume: + switch ( _khmer_syllable_machine_from_state_actions[cs] ) { + case 7: #line 1 "NONE" - {ts = p;}} - -#line 241 "hb-ot-shape-complex-khmer-machine.hh" - - - break; - } - } - - if ( p == eof ) { - if ( _khmer_syllable_machine_eof_trans[cs] > 0 ) { - _trans = (unsigned int)_khmer_syllable_machine_eof_trans[cs] - 1; - } - } - else { - _keys = ( _khmer_syllable_machine_trans_keys + ((cs<<1))); - _inds = ( _khmer_syllable_machine_indicies + (_khmer_syllable_machine_index_offsets[cs])); - - if ( (info[p].khmer_category()) <= 29 && (info[p].khmer_category()) >= 1 ) { - _ic = (int)_khmer_syllable_machine_char_class[(int)(info[p].khmer_category()) - 1]; - if ( _ic <= (int)(*( _keys+1)) && _ic >= (int)(*( _keys)) ) - _trans = (unsigned int)(*( _inds + (int)( _ic - (int)(*( _keys)) ) )); - else - _trans = (unsigned int)_khmer_syllable_machine_index_defaults[cs]; - } - else { - _trans = (unsigned int)_khmer_syllable_machine_index_defaults[cs]; - } - - } - cs = (int)_khmer_syllable_machine_cond_targs[_trans]; - - if ( _khmer_syllable_machine_cond_actions[_trans] != 0 ) { - - switch ( _khmer_syllable_machine_cond_actions[_trans] ) { - case 2: { - { + {ts = p;} + break; +#line 296 "hb-ot-shape-complex-khmer-machine.hh" + } + + _keys = _khmer_syllable_machine_trans_keys + (cs<<1); + _inds = _khmer_syllable_machine_indicies + _khmer_syllable_machine_index_offsets[cs]; + + _slen = _khmer_syllable_machine_key_spans[cs]; + _trans = _inds[ _slen > 0 && _keys[0] <=( info[p].khmer_category()) && + ( info[p].khmer_category()) <= _keys[1] ? + ( info[p].khmer_category()) - _keys[0] : _slen ]; + +_eof_trans: + cs = _khmer_syllable_machine_trans_targs[_trans]; + + if ( _khmer_syllable_machine_trans_actions[_trans] == 0 ) + goto _again; + + switch ( _khmer_syllable_machine_trans_actions[_trans] ) { + case 2: #line 1 "NONE" - {te = p+1;}} - -#line 279 "hb-ot-shape-complex-khmer-machine.hh" - - - break; - } - case 8: { - { -#line 82 "hb-ot-shape-complex-khmer-machine.rl" - {te = p+1;{ + {te = p+1;} + break; + case 8: #line 82 "hb-ot-shape-complex-khmer-machine.rl" - found_syllable (khmer_non_khmer_cluster); } - }} - -#line 292 "hb-ot-shape-complex-khmer-machine.hh" - - - break; - } - case 10: { - { + {te = p+1;{ found_syllable (khmer_non_khmer_cluster); }} + break; + case 10: #line 80 "hb-ot-shape-complex-khmer-machine.rl" - {te = p;p = p - 1;{ -#line 80 "hb-ot-shape-complex-khmer-machine.rl" - found_syllable (khmer_consonant_syllable); } - }} - -#line 305 "hb-ot-shape-complex-khmer-machine.hh" - - - break; - } - case 12: { - { -#line 81 "hb-ot-shape-complex-khmer-machine.rl" - {te = p;p = p - 1;{ + {te = p;p--;{ found_syllable (khmer_consonant_syllable); }} + break; + case 12: #line 81 "hb-ot-shape-complex-khmer-machine.rl" - found_syllable (khmer_broken_cluster); } - }} - -#line 318 "hb-ot-shape-complex-khmer-machine.hh" - - - break; - } - case 11: { - { -#line 82 "hb-ot-shape-complex-khmer-machine.rl" - {te = p;p = p - 1;{ + {te = p;p--;{ found_syllable (khmer_broken_cluster); }} + break; + case 11: #line 82 "hb-ot-shape-complex-khmer-machine.rl" - found_syllable (khmer_non_khmer_cluster); } - }} - -#line 331 "hb-ot-shape-complex-khmer-machine.hh" - - - break; - } - case 1: { - { + {te = p;p--;{ found_syllable (khmer_non_khmer_cluster); }} + break; + case 1: #line 80 "hb-ot-shape-complex-khmer-machine.rl" - {p = ((te))-1; - { -#line 80 "hb-ot-shape-complex-khmer-machine.rl" - found_syllable (khmer_consonant_syllable); } - }} - -#line 345 "hb-ot-shape-complex-khmer-machine.hh" - - - break; - } - case 5: { - { -#line 81 "hb-ot-shape-complex-khmer-machine.rl" - {p = ((te))-1; - { + {{p = ((te))-1;}{ found_syllable (khmer_consonant_syllable); }} + break; + case 5: #line 81 "hb-ot-shape-complex-khmer-machine.rl" - found_syllable (khmer_broken_cluster); } - }} - -#line 359 "hb-ot-shape-complex-khmer-machine.hh" - - - break; - } - case 3: { - { + {{p = ((te))-1;}{ found_syllable (khmer_broken_cluster); }} + break; + case 3: #line 1 "NONE" - {switch( act ) { - case 2: { - p = ((te))-1; - { -#line 81 "hb-ot-shape-complex-khmer-machine.rl" - found_syllable (khmer_broken_cluster); } - break; - } - case 3: { - p = ((te))-1; - { -#line 82 "hb-ot-shape-complex-khmer-machine.rl" - found_syllable (khmer_non_khmer_cluster); } - break; - } - }} - } - -#line 385 "hb-ot-shape-complex-khmer-machine.hh" - - - break; - } - case 4: { - { + { switch( act ) { + case 2: + {{p = ((te))-1;} found_syllable (khmer_broken_cluster); } + break; + case 3: + {{p = ((te))-1;} found_syllable (khmer_non_khmer_cluster); } + break; + } + } + break; + case 4: #line 1 "NONE" - {te = p+1;}} - -#line 395 "hb-ot-shape-complex-khmer-machine.hh" - - { + {te = p+1;} #line 81 "hb-ot-shape-complex-khmer-machine.rl" - {act = 2;}} - -#line 401 "hb-ot-shape-complex-khmer-machine.hh" - - - break; - } - case 9: { - { + {act = 2;} + break; + case 9: #line 1 "NONE" - {te = p+1;}} - -#line 411 "hb-ot-shape-complex-khmer-machine.hh" - - { + {te = p+1;} #line 82 "hb-ot-shape-complex-khmer-machine.rl" - {act = 3;}} - -#line 417 "hb-ot-shape-complex-khmer-machine.hh" - - - break; - } - } - - } - - if ( p == eof ) { - if ( cs >= 20 ) - goto _out; - } - else { - switch ( _khmer_syllable_machine_to_state_actions[cs] ) { - case 6: { - { + {act = 3;} + break; +#line 366 "hb-ot-shape-complex-khmer-machine.hh" + } + +_again: + switch ( _khmer_syllable_machine_to_state_actions[cs] ) { + case 6: #line 1 "NONE" - {ts = 0;}} - -#line 437 "hb-ot-shape-complex-khmer-machine.hh" - - - break; - } - } - - p += 1; - goto _resume; - } - _out: {} + {ts = 0;} + break; +#line 375 "hb-ot-shape-complex-khmer-machine.hh" + } + + if ( ++p != pe ) + goto _resume; + _test_eof: {} + if ( p == eof ) + { + if ( _khmer_syllable_machine_eof_trans[cs] > 0 ) { + _trans = _khmer_syllable_machine_eof_trans[cs] - 1; + goto _eof_trans; + } } - + + } + #line 114 "hb-ot-shape-complex-khmer-machine.rl" - + } #undef found_syllable diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-khmer.cc b/thirdparty/harfbuzz/src/hb-ot-shape-complex-khmer.cc index dddba142a3..7787886857 100644 --- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-khmer.cc +++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-khmer.cc @@ -42,7 +42,8 @@ khmer_features[] = { /* * Basic features. - * These features are applied in order, one at a time, after reordering. + * These features are applied all at once, before reordering, constrained + * to the syllable. */ {HB_TAG('p','r','e','f'), F_MANUAL_JOINERS}, {HB_TAG('b','l','w','f'), F_MANUAL_JOINERS}, @@ -147,7 +148,7 @@ struct khmer_shape_plan_t static void * data_create_khmer (const hb_ot_shape_plan_t *plan) { - khmer_shape_plan_t *khmer_plan = (khmer_shape_plan_t *) calloc (1, sizeof (khmer_shape_plan_t)); + khmer_shape_plan_t *khmer_plan = (khmer_shape_plan_t *) hb_calloc (1, sizeof (khmer_shape_plan_t)); if (unlikely (!khmer_plan)) return nullptr; @@ -161,7 +162,7 @@ data_create_khmer (const hb_ot_shape_plan_t *plan) static void data_destroy_khmer (void *data) { - free (data); + hb_free (data); } static void diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-myanmar.cc b/thirdparty/harfbuzz/src/hb-ot-shape-complex-myanmar.cc index bc5dcb904c..6e92a9b0ae 100644 --- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-myanmar.cc +++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-myanmar.cc @@ -41,7 +41,8 @@ myanmar_basic_features[] = { /* * Basic features. - * These features are applied in order, one at a time, after reordering. + * These features are applied in order, one at a time, after reordering, + * constrained to the syllable. */ HB_TAG('r','p','h','f'), HB_TAG('p','r','e','f'), diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-syllabic.cc b/thirdparty/harfbuzz/src/hb-ot-shape-complex-syllabic.cc index 46509abee2..5a08f878dc 100644 --- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-syllabic.cc +++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-syllabic.cc @@ -34,7 +34,8 @@ hb_syllabic_insert_dotted_circles (hb_font_t *font, hb_buffer_t *buffer, unsigned int broken_syllable_type, unsigned int dottedcircle_category, - int repha_category) + int repha_category, + int dottedcircle_position) { if (unlikely (buffer->flags & HB_BUFFER_FLAG_DO_NOT_INSERT_DOTTED_CIRCLE)) return; @@ -61,6 +62,8 @@ hb_syllabic_insert_dotted_circles (hb_font_t *font, hb_glyph_info_t dottedcircle = {0}; dottedcircle.codepoint = 0x25CCu; dottedcircle.complex_var_u8_category() = dottedcircle_category; + if (dottedcircle_position != -1) + dottedcircle.complex_var_u8_auxiliary() = dottedcircle_position; dottedcircle.codepoint = dottedcircle_glyph; buffer->clear_output (); diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-syllabic.hh b/thirdparty/harfbuzz/src/hb-ot-shape-complex-syllabic.hh index c80b8fee1d..b901a660d3 100644 --- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-syllabic.hh +++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-syllabic.hh @@ -35,7 +35,8 @@ hb_syllabic_insert_dotted_circles (hb_font_t *font, hb_buffer_t *buffer, unsigned int broken_syllable_type, unsigned int dottedcircle_category, - int repha_category = -1); + int repha_category = -1, + int dottedcircle_position = -1); #endif /* HB_OT_SHAPE_COMPLEX_SYLLABIC_HH */ diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-use-machine.hh b/thirdparty/harfbuzz/src/hb-ot-shape-complex-use-machine.hh index b4b2b75100..bb046a72ec 100644 --- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-use-machine.hh +++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-use-machine.hh @@ -1,31 +1,32 @@ + #line 1 "hb-ot-shape-complex-use-machine.rl" /* -* Copyright © 2015 Mozilla Foundation. -* Copyright © 2015 Google, Inc. -* -* This is part of HarfBuzz, a text shaping library. -* -* Permission is hereby granted, without written agreement and without -* license or royalty fees, to use, copy, modify, and distribute this -* software and its documentation for any purpose, provided that the -* above copyright notice and the following two paragraphs appear in -* all copies of this software. -* -* IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -* ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -* IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -* DAMAGE. -* -* THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -* BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -* FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -* ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. -* -* Mozilla Author(s): Jonathan Kew -* Google Author(s): Behdad Esfahbod -*/ + * Copyright © 2015 Mozilla Foundation. + * Copyright © 2015 Google, Inc. + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + * Mozilla Author(s): Jonathan Kew + * Google Author(s): Behdad Esfahbod + */ #ifndef HB_OT_SHAPE_COMPLEX_USE_MACHINE_HH #define HB_OT_SHAPE_COMPLEX_USE_MACHINE_HH @@ -40,20 +41,20 @@ #define USE(Cat) use_syllable_machine_ex_##Cat enum use_syllable_type_t { - use_independent_cluster, - use_virama_terminated_cluster, - use_sakot_terminated_cluster, - use_standard_cluster, - use_number_joiner_terminated_cluster, - use_numeral_cluster, - use_symbol_cluster, - use_hieroglyph_cluster, - use_broken_cluster, - use_non_cluster, + use_independent_cluster, + use_virama_terminated_cluster, + use_sakot_terminated_cluster, + use_standard_cluster, + use_number_joiner_terminated_cluster, + use_numeral_cluster, + use_symbol_cluster, + use_hieroglyph_cluster, + use_broken_cluster, + use_non_cluster, }; -#line 57 "hb-ot-shape-complex-use-machine.hh" +#line 58 "hb-ot-shape-complex-use-machine.hh" #define use_syllable_machine_ex_B 1u #define use_syllable_machine_ex_CMAbv 31u #define use_syllable_machine_ex_CMBlw 32u @@ -95,254 +96,266 @@ enum use_syllable_type_t { #define use_syllable_machine_ex_ZWNJ 14u -#line 99 "hb-ot-shape-complex-use-machine.hh" +#line 100 "hb-ot-shape-complex-use-machine.hh" static const unsigned char _use_syllable_machine_trans_keys[] = { - 1u, 1u, 1u, 1u, 0u, 37u, 5u, 34u, - 5u, 34u, 1u, 1u, 10u, 34u, 11u, 34u, - 12u, 33u, 13u, 33u, 14u, 33u, 31u, 32u, - 32u, 32u, 12u, 34u, 12u, 34u, 12u, 34u, - 1u, 1u, 12u, 34u, 11u, 34u, 11u, 34u, - 11u, 34u, 10u, 34u, 10u, 34u, 10u, 34u, - 5u, 34u, 1u, 34u, 7u, 7u, 3u, 3u, - 5u, 34u, 27u, 28u, 28u, 28u, 5u, 34u, - 10u, 34u, 11u, 34u, 12u, 33u, 13u, 33u, - 14u, 33u, 31u, 32u, 32u, 32u, 12u, 34u, - 12u, 34u, 12u, 34u, 12u, 34u, 11u, 34u, - 11u, 34u, 11u, 34u, 10u, 34u, 10u, 34u, - 10u, 34u, 5u, 34u, 1u, 34u, 1u, 1u, - 3u, 3u, 7u, 7u, 1u, 34u, 5u, 34u, - 27u, 28u, 28u, 28u, 1u, 4u, 36u, 38u, - 35u, 38u, 35u, 37u, 0u + 1u, 1u, 1u, 1u, 0u, 51u, 11u, 48u, 11u, 48u, 1u, 1u, 22u, 48u, 23u, 48u, + 24u, 47u, 25u, 47u, 26u, 47u, 45u, 46u, 46u, 46u, 24u, 48u, 24u, 48u, 24u, 48u, + 1u, 1u, 24u, 48u, 23u, 48u, 23u, 48u, 23u, 48u, 22u, 48u, 22u, 48u, 22u, 48u, + 11u, 48u, 1u, 48u, 13u, 13u, 4u, 4u, 11u, 48u, 41u, 42u, 42u, 42u, 11u, 48u, + 22u, 48u, 23u, 48u, 24u, 47u, 25u, 47u, 26u, 47u, 45u, 46u, 46u, 46u, 24u, 48u, + 24u, 48u, 24u, 48u, 24u, 48u, 23u, 48u, 23u, 48u, 23u, 48u, 22u, 48u, 22u, 48u, + 22u, 48u, 11u, 48u, 1u, 48u, 1u, 1u, 4u, 4u, 13u, 13u, 1u, 48u, 11u, 48u, + 41u, 42u, 42u, 42u, 1u, 5u, 50u, 52u, 49u, 52u, 49u, 51u, 0 }; -static const signed char _use_syllable_machine_char_class[] = { - 0, 1, 2, 2, 3, 4, 2, 2, - 2, 2, 2, 5, 6, 7, 2, 2, - 2, 2, 8, 9, 2, 2, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 2, 24, 25, 26, - 2, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 0 +static const char _use_syllable_machine_key_spans[] = { + 1, 1, 52, 38, 38, 1, 27, 26, + 24, 23, 22, 2, 1, 25, 25, 25, + 1, 25, 26, 26, 26, 27, 27, 27, + 38, 48, 1, 1, 38, 2, 1, 38, + 27, 26, 24, 23, 22, 2, 1, 25, + 25, 25, 25, 26, 26, 26, 27, 27, + 27, 38, 48, 1, 1, 1, 48, 38, + 2, 1, 5, 3, 4, 3 }; static const short _use_syllable_machine_index_offsets[] = { - 0, 1, 2, 40, 70, 100, 101, 126, - 150, 172, 193, 213, 215, 216, 239, 262, - 285, 286, 309, 333, 357, 381, 406, 431, - 456, 486, 520, 521, 522, 552, 554, 555, - 585, 610, 634, 656, 677, 697, 699, 700, - 723, 746, 769, 792, 816, 840, 864, 889, - 914, 939, 969, 1003, 1004, 1005, 1006, 1040, - 1070, 1072, 1073, 1077, 1080, 1084, 0 -}; - -static const signed char _use_syllable_machine_indicies[] = { - 1, 2, 4, 5, 6, 7, 8, 1, - 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 13, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 9, 36, 6, 37, - 39, 40, 38, 38, 38, 41, 42, 43, - 44, 45, 46, 47, 41, 48, 5, 49, - 50, 51, 52, 53, 54, 55, 38, 38, - 38, 56, 57, 58, 59, 40, 39, 40, - 38, 38, 38, 41, 42, 43, 44, 45, - 46, 47, 41, 48, 49, 49, 50, 51, - 52, 53, 54, 55, 38, 38, 38, 56, - 57, 58, 59, 40, 39, 41, 42, 43, - 44, 45, 38, 38, 38, 38, 38, 38, - 50, 51, 52, 53, 54, 55, 38, 38, - 38, 42, 57, 58, 59, 61, 42, 43, - 44, 45, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 53, 54, 55, 38, 38, - 38, 38, 57, 58, 59, 61, 43, 44, - 45, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 57, 58, 59, 44, 45, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 57, 58, - 59, 45, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 57, 58, 59, 57, 58, 58, - 43, 44, 45, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 53, 54, 55, 38, - 38, 38, 38, 57, 58, 59, 61, 43, - 44, 45, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 54, 55, 38, 38, - 38, 38, 57, 58, 59, 61, 43, 44, - 45, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 55, 38, 38, 38, - 38, 57, 58, 59, 61, 63, 43, 44, - 45, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 57, 58, 59, 61, 42, 43, 44, - 45, 38, 38, 38, 38, 38, 38, 50, - 51, 52, 53, 54, 55, 38, 38, 38, - 42, 57, 58, 59, 61, 42, 43, 44, - 45, 38, 38, 38, 38, 38, 38, 38, - 51, 52, 53, 54, 55, 38, 38, 38, - 42, 57, 58, 59, 61, 42, 43, 44, - 45, 38, 38, 38, 38, 38, 38, 38, - 38, 52, 53, 54, 55, 38, 38, 38, - 42, 57, 58, 59, 61, 41, 42, 43, - 44, 45, 38, 47, 41, 38, 38, 38, - 50, 51, 52, 53, 54, 55, 38, 38, - 38, 42, 57, 58, 59, 61, 41, 42, - 43, 44, 45, 38, 38, 41, 38, 38, - 38, 50, 51, 52, 53, 54, 55, 38, - 38, 38, 42, 57, 58, 59, 61, 41, - 42, 43, 44, 45, 46, 47, 41, 38, - 38, 38, 50, 51, 52, 53, 54, 55, - 38, 38, 38, 42, 57, 58, 59, 61, - 39, 40, 38, 38, 38, 41, 42, 43, - 44, 45, 46, 47, 41, 48, 38, 49, - 50, 51, 52, 53, 54, 55, 38, 38, - 38, 56, 57, 58, 59, 40, 39, 60, - 60, 60, 60, 60, 60, 60, 60, 60, - 42, 43, 44, 45, 60, 60, 60, 60, - 60, 60, 60, 60, 60, 53, 54, 55, - 60, 60, 60, 60, 57, 58, 59, 61, - 65, 7, 39, 40, 38, 38, 38, 41, - 42, 43, 44, 45, 46, 47, 41, 48, - 5, 49, 50, 51, 52, 53, 54, 55, - 12, 67, 38, 56, 57, 58, 59, 40, - 12, 67, 67, 1, 70, 69, 69, 69, - 13, 14, 15, 16, 17, 18, 19, 13, - 20, 22, 22, 23, 24, 25, 26, 27, - 28, 69, 69, 69, 32, 33, 34, 35, - 70, 13, 14, 15, 16, 17, 69, 69, - 69, 69, 69, 69, 23, 24, 25, 26, - 27, 28, 69, 69, 69, 14, 33, 34, - 35, 71, 14, 15, 16, 17, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 26, - 27, 28, 69, 69, 69, 69, 33, 34, - 35, 71, 15, 16, 17, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 33, 34, 35, - 16, 17, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 33, 34, 35, 17, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 33, 34, - 35, 33, 34, 34, 15, 16, 17, 69, - 69, 69, 69, 69, 69, 69, 69, 69, - 26, 27, 28, 69, 69, 69, 69, 33, - 34, 35, 71, 15, 16, 17, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, - 27, 28, 69, 69, 69, 69, 33, 34, - 35, 71, 15, 16, 17, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, - 28, 69, 69, 69, 69, 33, 34, 35, - 71, 15, 16, 17, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 33, 34, 35, 71, - 14, 15, 16, 17, 69, 69, 69, 69, - 69, 69, 23, 24, 25, 26, 27, 28, - 69, 69, 69, 14, 33, 34, 35, 71, - 14, 15, 16, 17, 69, 69, 69, 69, - 69, 69, 69, 24, 25, 26, 27, 28, - 69, 69, 69, 14, 33, 34, 35, 71, - 14, 15, 16, 17, 69, 69, 69, 69, - 69, 69, 69, 69, 25, 26, 27, 28, - 69, 69, 69, 14, 33, 34, 35, 71, - 13, 14, 15, 16, 17, 69, 19, 13, - 69, 69, 69, 23, 24, 25, 26, 27, - 28, 69, 69, 69, 14, 33, 34, 35, - 71, 13, 14, 15, 16, 17, 69, 69, - 13, 69, 69, 69, 23, 24, 25, 26, - 27, 28, 69, 69, 69, 14, 33, 34, - 35, 71, 13, 14, 15, 16, 17, 18, - 19, 13, 69, 69, 69, 23, 24, 25, - 26, 27, 28, 69, 69, 69, 14, 33, - 34, 35, 71, 1, 70, 69, 69, 69, - 13, 14, 15, 16, 17, 18, 19, 13, - 20, 69, 22, 23, 24, 25, 26, 27, - 28, 69, 69, 69, 32, 33, 34, 35, - 70, 1, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 14, 15, 16, 17, 69, - 69, 69, 69, 69, 69, 69, 69, 69, - 26, 27, 28, 69, 69, 69, 69, 33, - 34, 35, 71, 1, 73, 10, 5, 69, - 69, 5, 1, 70, 10, 69, 69, 13, - 14, 15, 16, 17, 18, 19, 13, 20, - 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 69, 32, 33, 34, 35, 70, - 1, 70, 69, 69, 69, 13, 14, 15, - 16, 17, 18, 19, 13, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 69, 69, - 69, 32, 33, 34, 35, 70, 29, 30, - 30, 5, 72, 72, 5, 75, 74, 36, - 36, 75, 74, 75, 36, 74, 37, 0 + 0, 2, 4, 57, 96, 135, 137, 165, + 192, 217, 241, 264, 267, 269, 295, 321, + 347, 349, 375, 402, 429, 456, 484, 512, + 540, 579, 628, 630, 632, 671, 674, 676, + 715, 743, 770, 795, 819, 842, 845, 847, + 873, 899, 925, 951, 978, 1005, 1032, 1060, + 1088, 1116, 1155, 1204, 1206, 1208, 1210, 1259, + 1298, 1301, 1303, 1309, 1313, 1318 }; -static const signed char _use_syllable_machine_index_defaults[] = { - 0, 0, 6, 38, 38, 60, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 62, 38, 38, 38, 38, 38, 38, 38, - 38, 60, 64, 66, 38, 68, 68, 69, - 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 72, 69, 69, 69, 69, - 69, 69, 72, 74, 74, 74, 0 +static const char _use_syllable_machine_indicies[] = { + 1, 0, 2, 0, 3, 4, 5, 5, + 6, 7, 5, 5, 5, 5, 5, 1, + 8, 9, 5, 5, 5, 5, 10, 11, + 5, 5, 12, 13, 14, 15, 16, 17, + 18, 12, 19, 20, 21, 22, 23, 24, + 5, 25, 26, 27, 5, 28, 29, 30, + 31, 32, 33, 34, 8, 35, 5, 36, + 5, 38, 39, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 40, 41, 42, 43, + 44, 45, 46, 40, 47, 4, 48, 49, + 50, 51, 37, 52, 53, 54, 37, 37, + 37, 37, 55, 56, 57, 58, 39, 37, + 38, 39, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 40, 41, 42, 43, 44, + 45, 46, 40, 47, 48, 48, 49, 50, + 51, 37, 52, 53, 54, 37, 37, 37, + 37, 55, 56, 57, 58, 39, 37, 38, + 59, 40, 41, 42, 43, 44, 37, 37, + 37, 37, 37, 37, 49, 50, 51, 37, + 52, 53, 54, 37, 37, 37, 37, 41, + 56, 57, 58, 60, 37, 41, 42, 43, + 44, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 52, 53, 54, 37, 37, + 37, 37, 37, 56, 57, 58, 60, 37, + 42, 43, 44, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 56, 57, 58, + 37, 43, 44, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 56, 57, 58, + 37, 44, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 56, 57, 58, 37, + 56, 57, 37, 57, 37, 42, 43, 44, + 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 52, 53, 54, 37, 37, 37, + 37, 37, 56, 57, 58, 60, 37, 42, + 43, 44, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 53, 54, 37, + 37, 37, 37, 37, 56, 57, 58, 60, + 37, 42, 43, 44, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, + 54, 37, 37, 37, 37, 37, 56, 57, + 58, 60, 37, 62, 61, 42, 43, 44, + 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 56, 57, 58, 60, 37, 41, + 42, 43, 44, 37, 37, 37, 37, 37, + 37, 49, 50, 51, 37, 52, 53, 54, + 37, 37, 37, 37, 41, 56, 57, 58, + 60, 37, 41, 42, 43, 44, 37, 37, + 37, 37, 37, 37, 37, 50, 51, 37, + 52, 53, 54, 37, 37, 37, 37, 41, + 56, 57, 58, 60, 37, 41, 42, 43, + 44, 37, 37, 37, 37, 37, 37, 37, + 37, 51, 37, 52, 53, 54, 37, 37, + 37, 37, 41, 56, 57, 58, 60, 37, + 40, 41, 42, 43, 44, 37, 46, 40, + 37, 37, 37, 49, 50, 51, 37, 52, + 53, 54, 37, 37, 37, 37, 41, 56, + 57, 58, 60, 37, 40, 41, 42, 43, + 44, 37, 37, 40, 37, 37, 37, 49, + 50, 51, 37, 52, 53, 54, 37, 37, + 37, 37, 41, 56, 57, 58, 60, 37, + 40, 41, 42, 43, 44, 45, 46, 40, + 37, 37, 37, 49, 50, 51, 37, 52, + 53, 54, 37, 37, 37, 37, 41, 56, + 57, 58, 60, 37, 38, 39, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 40, + 41, 42, 43, 44, 45, 46, 40, 47, + 37, 48, 49, 50, 51, 37, 52, 53, + 54, 37, 37, 37, 37, 55, 56, 57, + 58, 39, 37, 38, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, + 59, 41, 42, 43, 44, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 52, + 53, 54, 59, 59, 59, 59, 59, 56, + 57, 58, 60, 59, 64, 63, 6, 65, + 38, 39, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 40, 41, 42, 43, 44, + 45, 46, 40, 47, 4, 48, 49, 50, + 51, 37, 52, 53, 54, 37, 11, 66, + 37, 55, 56, 57, 58, 39, 37, 11, + 66, 67, 66, 67, 1, 69, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 12, + 13, 14, 15, 16, 17, 18, 12, 19, + 21, 21, 22, 23, 24, 68, 25, 26, + 27, 68, 68, 68, 68, 31, 32, 33, + 34, 69, 68, 12, 13, 14, 15, 16, + 68, 68, 68, 68, 68, 68, 22, 23, + 24, 68, 25, 26, 27, 68, 68, 68, + 68, 13, 32, 33, 34, 70, 68, 13, + 14, 15, 16, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 25, 26, 27, + 68, 68, 68, 68, 68, 32, 33, 34, + 70, 68, 14, 15, 16, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 32, + 33, 34, 68, 15, 16, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 32, + 33, 34, 68, 16, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 32, 33, + 34, 68, 32, 33, 68, 33, 68, 14, + 15, 16, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 25, 26, 27, 68, + 68, 68, 68, 68, 32, 33, 34, 70, + 68, 14, 15, 16, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 26, + 27, 68, 68, 68, 68, 68, 32, 33, + 34, 70, 68, 14, 15, 16, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 27, 68, 68, 68, 68, 68, + 32, 33, 34, 70, 68, 14, 15, 16, + 68, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 32, 33, 34, 70, 68, 13, + 14, 15, 16, 68, 68, 68, 68, 68, + 68, 22, 23, 24, 68, 25, 26, 27, + 68, 68, 68, 68, 13, 32, 33, 34, + 70, 68, 13, 14, 15, 16, 68, 68, + 68, 68, 68, 68, 68, 23, 24, 68, + 25, 26, 27, 68, 68, 68, 68, 13, + 32, 33, 34, 70, 68, 13, 14, 15, + 16, 68, 68, 68, 68, 68, 68, 68, + 68, 24, 68, 25, 26, 27, 68, 68, + 68, 68, 13, 32, 33, 34, 70, 68, + 12, 13, 14, 15, 16, 68, 18, 12, + 68, 68, 68, 22, 23, 24, 68, 25, + 26, 27, 68, 68, 68, 68, 13, 32, + 33, 34, 70, 68, 12, 13, 14, 15, + 16, 68, 68, 12, 68, 68, 68, 22, + 23, 24, 68, 25, 26, 27, 68, 68, + 68, 68, 13, 32, 33, 34, 70, 68, + 12, 13, 14, 15, 16, 17, 18, 12, + 68, 68, 68, 22, 23, 24, 68, 25, + 26, 27, 68, 68, 68, 68, 13, 32, + 33, 34, 70, 68, 1, 69, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 12, + 13, 14, 15, 16, 17, 18, 12, 19, + 68, 21, 22, 23, 24, 68, 25, 26, + 27, 68, 68, 68, 68, 31, 32, 33, + 34, 69, 68, 1, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68, + 68, 13, 14, 15, 16, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 25, + 26, 27, 68, 68, 68, 68, 68, 32, + 33, 34, 70, 68, 1, 71, 72, 68, + 9, 68, 4, 68, 68, 68, 4, 68, + 68, 68, 68, 68, 1, 69, 9, 68, + 68, 68, 68, 68, 68, 68, 68, 12, + 13, 14, 15, 16, 17, 18, 12, 19, + 20, 21, 22, 23, 24, 68, 25, 26, + 27, 68, 28, 29, 68, 31, 32, 33, + 34, 69, 68, 1, 69, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 12, 13, + 14, 15, 16, 17, 18, 12, 19, 20, + 21, 22, 23, 24, 68, 25, 26, 27, + 68, 68, 68, 68, 31, 32, 33, 34, + 69, 68, 28, 29, 68, 29, 68, 4, + 71, 71, 71, 4, 71, 74, 73, 35, + 73, 35, 74, 73, 74, 73, 35, 73, + 36, 73, 0 }; -static const signed char _use_syllable_machine_cond_targs[] = { - 2, 31, 42, 2, 2, 3, 2, 26, - 28, 51, 52, 54, 29, 32, 33, 34, - 35, 36, 46, 47, 48, 55, 49, 43, - 44, 45, 39, 40, 41, 56, 57, 58, - 50, 37, 38, 2, 59, 61, 2, 4, - 5, 6, 7, 8, 9, 10, 21, 22, - 23, 24, 18, 19, 20, 13, 14, 15, - 25, 11, 12, 2, 2, 16, 2, 17, - 2, 27, 2, 30, 2, 2, 0, 1, - 2, 53, 2, 60, 0 +static const char _use_syllable_machine_trans_targs[] = { + 2, 31, 42, 2, 3, 2, 26, 28, + 51, 52, 54, 29, 32, 33, 34, 35, + 36, 46, 47, 48, 55, 49, 43, 44, + 45, 39, 40, 41, 56, 57, 58, 50, + 37, 38, 2, 59, 61, 2, 4, 5, + 6, 7, 8, 9, 10, 21, 22, 23, + 24, 18, 19, 20, 13, 14, 15, 25, + 11, 12, 2, 2, 16, 2, 17, 2, + 27, 2, 30, 2, 2, 0, 1, 2, + 53, 2, 60 }; -static const signed char _use_syllable_machine_cond_actions[] = { - 1, 2, 2, 0, 5, 0, 6, 0, - 0, 0, 0, 2, 0, 2, 2, 0, - 0, 0, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 0, 0, 0, - 2, 0, 0, 7, 0, 0, 8, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 10, 0, 11, 0, - 12, 0, 13, 0, 14, 15, 0, 0, - 16, 0, 17, 0, 0 +static const char _use_syllable_machine_trans_actions[] = { + 1, 2, 2, 5, 0, 6, 0, 0, + 0, 0, 2, 0, 2, 2, 0, 0, + 0, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 0, 0, 0, 2, + 0, 0, 7, 0, 0, 8, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 9, 10, 0, 11, 0, 12, + 0, 13, 0, 14, 15, 0, 0, 16, + 0, 17, 0 }; -static const signed char _use_syllable_machine_to_state_actions[] = { - 0, 0, 3, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0 +static const char _use_syllable_machine_to_state_actions[] = { + 0, 0, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0 }; -static const signed char _use_syllable_machine_from_state_actions[] = { - 0, 0, 4, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0 +static const char _use_syllable_machine_from_state_actions[] = { + 0, 0, 4, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0 }; -static const signed char _use_syllable_machine_eof_trans[] = { - 1, 1, 4, 39, 39, 61, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, - 63, 39, 39, 39, 39, 39, 39, 39, - 39, 61, 65, 67, 39, 69, 69, 70, - 70, 70, 70, 70, 70, 70, 70, 70, - 70, 70, 70, 70, 70, 70, 70, 70, - 70, 70, 70, 73, 70, 70, 70, 70, - 70, 70, 73, 75, 75, 75, 0 +static const short _use_syllable_machine_eof_trans[] = { + 1, 1, 0, 38, 38, 60, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 62, 38, 38, 38, 38, 38, 38, 38, + 38, 60, 64, 66, 38, 68, 68, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 72, 69, 69, 69, 69, + 69, 69, 72, 74, 74, 74 }; static const int use_syllable_machine_start = 2; @@ -360,49 +373,49 @@ static const int use_syllable_machine_en_main = 2; #define found_syllable(syllable_type) \ -HB_STMT_START { \ - if (0) fprintf (stderr, "syllable %d..%d %s\n", (*ts).second.first, (*te).second.first, #syllable_type); \ - for (unsigned i = (*ts).second.first; i < (*te).second.first; ++i) \ - info[i].syllable() = (syllable_serial << 4) | syllable_type; \ - syllable_serial++; \ - if (unlikely (syllable_serial == 16)) syllable_serial = 1; \ - } HB_STMT_END + HB_STMT_START { \ + if (0) fprintf (stderr, "syllable %d..%d %s\n", (*ts).second.first, (*te).second.first, #syllable_type); \ + for (unsigned i = (*ts).second.first; i < (*te).second.first; ++i) \ + info[i].syllable() = (syllable_serial << 4) | syllable_type; \ + syllable_serial++; \ + if (unlikely (syllable_serial == 16)) syllable_serial = 1; \ + } HB_STMT_END template <typename Iter> struct machine_index_t : -hb_iter_with_fallback_t<machine_index_t<Iter>, -typename Iter::item_t> + hb_iter_with_fallback_t<machine_index_t<Iter>, + typename Iter::item_t> { - machine_index_t (const Iter& it) : it (it) {} - machine_index_t (const machine_index_t& o) : it (o.it) {} - - static constexpr bool is_random_access_iterator = Iter::is_random_access_iterator; - static constexpr bool is_sorted_iterator = Iter::is_sorted_iterator; - - typename Iter::item_t __item__ () const { return *it; } - typename Iter::item_t __item_at__ (unsigned i) const { return it[i]; } - unsigned __len__ () const { return it.len (); } - void __next__ () { ++it; } - void __forward__ (unsigned n) { it += n; } - void __prev__ () { --it; } - void __rewind__ (unsigned n) { it -= n; } - void operator = (unsigned n) - { unsigned index = (*it).first; if (index < n) it += n - index; else if (index > n) it -= index - n; } - void operator = (const machine_index_t& o) { *this = (*o.it).first; } - bool operator == (const machine_index_t& o) const { return (*it).first == (*o.it).first; } - bool operator != (const machine_index_t& o) const { return !(*this == o); } - - private: - Iter it; + machine_index_t (const Iter& it) : it (it) {} + machine_index_t (const machine_index_t& o) : it (o.it) {} + + static constexpr bool is_random_access_iterator = Iter::is_random_access_iterator; + static constexpr bool is_sorted_iterator = Iter::is_sorted_iterator; + + typename Iter::item_t __item__ () const { return *it; } + typename Iter::item_t __item_at__ (unsigned i) const { return it[i]; } + unsigned __len__ () const { return it.len (); } + void __next__ () { ++it; } + void __forward__ (unsigned n) { it += n; } + void __prev__ () { --it; } + void __rewind__ (unsigned n) { it -= n; } + void operator = (unsigned n) + { unsigned index = (*it).first; if (index < n) it += n - index; else if (index > n) it -= index - n; } + void operator = (const machine_index_t& o) { *this = (*o.it).first; } + bool operator == (const machine_index_t& o) const { return (*it).first == (*o.it).first; } + bool operator != (const machine_index_t& o) const { return !(*this == o); } + + private: + Iter it; }; struct { - template <typename Iter, - hb_requires (hb_is_iterable (Iter))> - machine_index_t<hb_iter_type<Iter>> - operator () (Iter&& it) const - { return machine_index_t<hb_iter_type<Iter>> (hb_iter (it)); } + template <typename Iter, + hb_requires (hb_is_iterable (Iter))> + machine_index_t<hb_iter_type<Iter>> + operator () (Iter&& it) const + { return machine_index_t<hb_iter_type<Iter>> (hb_iter (it)); } } HB_FUNCOBJ (machine_index); @@ -415,313 +428,162 @@ not_standard_default_ignorable (const hb_glyph_info_t &i) static inline void find_syllables_use (hb_buffer_t *buffer) { - hb_glyph_info_t *info = buffer->info; - auto p = - + hb_iter (info, buffer->len) - | hb_enumerate - | hb_filter ([] (const hb_glyph_info_t &i) { return not_standard_default_ignorable (i); }, - hb_second) - | hb_filter ([&] (const hb_pair_t<unsigned, const hb_glyph_info_t &> p) + hb_glyph_info_t *info = buffer->info; + auto p = + + hb_iter (info, buffer->len) + | hb_enumerate + | hb_filter ([] (const hb_glyph_info_t &i) { return not_standard_default_ignorable (i); }, + hb_second) + | hb_filter ([&] (const hb_pair_t<unsigned, const hb_glyph_info_t &> p) + { + if (p.second.use_category() == USE(ZWNJ)) + for (unsigned i = p.first + 1; i < buffer->len; ++i) + if (not_standard_default_ignorable (info[i])) + return !_hb_glyph_info_is_unicode_mark (&info[i]); + return true; + }) + | hb_enumerate + | machine_index + ; + auto pe = p + p.len (); + auto eof = +pe; + auto ts = +p; + auto te = +p; + unsigned int act HB_UNUSED; + int cs; + +#line 456 "hb-ot-shape-complex-use-machine.hh" { - if (p.second.use_category() == USE(ZWNJ)) - for (unsigned i = p.first + 1; i < buffer->len; ++i) - if (not_standard_default_ignorable (info[i])) - return !_hb_glyph_info_is_unicode_mark (&info[i]); - return true; - }) - | hb_enumerate - | machine_index - ; - auto pe = p + p.len (); - auto eof = +pe; - auto ts = +p; - auto te = +p; - unsigned int act HB_UNUSED; - int cs; - -#line 443 "hb-ot-shape-complex-use-machine.hh" - { - cs = (int)use_syllable_machine_start; - ts = 0; - te = 0; + cs = use_syllable_machine_start; + ts = 0; + te = 0; + act = 0; } - + #line 260 "hb-ot-shape-complex-use-machine.rl" - - - unsigned int syllable_serial = 1; - -#line 455 "hb-ot-shape-complex-use-machine.hh" + + + unsigned int syllable_serial = 1; + +#line 469 "hb-ot-shape-complex-use-machine.hh" { - unsigned int _trans = 0; - const unsigned char * _keys; - const signed char * _inds; - int _ic; - _resume: {} - if ( p == pe && p != eof ) - goto _out; - switch ( _use_syllable_machine_from_state_actions[cs] ) { - case 4: { - { + int _slen; + int _trans; + const unsigned char *_keys; + const char *_inds; + if ( p == pe ) + goto _test_eof; +_resume: + switch ( _use_syllable_machine_from_state_actions[cs] ) { + case 4: #line 1 "NONE" - {ts = p;}} - -#line 470 "hb-ot-shape-complex-use-machine.hh" - - - break; - } - } - - if ( p == eof ) { - if ( _use_syllable_machine_eof_trans[cs] > 0 ) { - _trans = (unsigned int)_use_syllable_machine_eof_trans[cs] - 1; - } - } - else { - _keys = ( _use_syllable_machine_trans_keys + ((cs<<1))); - _inds = ( _use_syllable_machine_indicies + (_use_syllable_machine_index_offsets[cs])); - - if ( ((*p).second.second.use_category()) <= 52 ) { - _ic = (int)_use_syllable_machine_char_class[(int)((*p).second.second.use_category()) - 0]; - if ( _ic <= (int)(*( _keys+1)) && _ic >= (int)(*( _keys)) ) - _trans = (unsigned int)(*( _inds + (int)( _ic - (int)(*( _keys)) ) )); - else - _trans = (unsigned int)_use_syllable_machine_index_defaults[cs]; - } - else { - _trans = (unsigned int)_use_syllable_machine_index_defaults[cs]; - } - - } - cs = (int)_use_syllable_machine_cond_targs[_trans]; - - if ( _use_syllable_machine_cond_actions[_trans] != 0 ) { - - switch ( _use_syllable_machine_cond_actions[_trans] ) { - case 2: { - { + {ts = p;} + break; +#line 483 "hb-ot-shape-complex-use-machine.hh" + } + + _keys = _use_syllable_machine_trans_keys + (cs<<1); + _inds = _use_syllable_machine_indicies + _use_syllable_machine_index_offsets[cs]; + + _slen = _use_syllable_machine_key_spans[cs]; + _trans = _inds[ _slen > 0 && _keys[0] <=( (*p).second.second.use_category()) && + ( (*p).second.second.use_category()) <= _keys[1] ? + ( (*p).second.second.use_category()) - _keys[0] : _slen ]; + +_eof_trans: + cs = _use_syllable_machine_trans_targs[_trans]; + + if ( _use_syllable_machine_trans_actions[_trans] == 0 ) + goto _again; + + switch ( _use_syllable_machine_trans_actions[_trans] ) { + case 2: #line 1 "NONE" - {te = p+1;}} - -#line 508 "hb-ot-shape-complex-use-machine.hh" - - - break; - } - case 5: { - { + {te = p+1;} + break; + case 5: #line 163 "hb-ot-shape-complex-use-machine.rl" - {te = p+1;{ -#line 163 "hb-ot-shape-complex-use-machine.rl" - found_syllable (use_independent_cluster); } - }} - -#line 521 "hb-ot-shape-complex-use-machine.hh" - - - break; - } - case 9: { - { -#line 166 "hb-ot-shape-complex-use-machine.rl" - {te = p+1;{ + {te = p+1;{ found_syllable (use_independent_cluster); }} + break; + case 9: #line 166 "hb-ot-shape-complex-use-machine.rl" - found_syllable (use_standard_cluster); } - }} - -#line 534 "hb-ot-shape-complex-use-machine.hh" - - - break; - } - case 7: { - { + {te = p+1;{ found_syllable (use_standard_cluster); }} + break; + case 7: #line 171 "hb-ot-shape-complex-use-machine.rl" - {te = p+1;{ -#line 171 "hb-ot-shape-complex-use-machine.rl" - found_syllable (use_broken_cluster); } - }} - -#line 547 "hb-ot-shape-complex-use-machine.hh" - - - break; - } - case 6: { - { -#line 172 "hb-ot-shape-complex-use-machine.rl" - {te = p+1;{ + {te = p+1;{ found_syllable (use_broken_cluster); }} + break; + case 6: #line 172 "hb-ot-shape-complex-use-machine.rl" - found_syllable (use_non_cluster); } - }} - -#line 560 "hb-ot-shape-complex-use-machine.hh" - - - break; - } - case 10: { - { + {te = p+1;{ found_syllable (use_non_cluster); }} + break; + case 10: #line 164 "hb-ot-shape-complex-use-machine.rl" - {te = p;p = p - 1;{ -#line 164 "hb-ot-shape-complex-use-machine.rl" - found_syllable (use_virama_terminated_cluster); } - }} - -#line 573 "hb-ot-shape-complex-use-machine.hh" - - - break; - } - case 11: { - { -#line 165 "hb-ot-shape-complex-use-machine.rl" - {te = p;p = p - 1;{ + {te = p;p--;{ found_syllable (use_virama_terminated_cluster); }} + break; + case 11: #line 165 "hb-ot-shape-complex-use-machine.rl" - found_syllable (use_sakot_terminated_cluster); } - }} - -#line 586 "hb-ot-shape-complex-use-machine.hh" - - - break; - } - case 8: { - { + {te = p;p--;{ found_syllable (use_sakot_terminated_cluster); }} + break; + case 8: #line 166 "hb-ot-shape-complex-use-machine.rl" - {te = p;p = p - 1;{ -#line 166 "hb-ot-shape-complex-use-machine.rl" - found_syllable (use_standard_cluster); } - }} - -#line 599 "hb-ot-shape-complex-use-machine.hh" - - - break; - } - case 13: { - { -#line 167 "hb-ot-shape-complex-use-machine.rl" - {te = p;p = p - 1;{ + {te = p;p--;{ found_syllable (use_standard_cluster); }} + break; + case 13: #line 167 "hb-ot-shape-complex-use-machine.rl" - found_syllable (use_number_joiner_terminated_cluster); } - }} - -#line 612 "hb-ot-shape-complex-use-machine.hh" - - - break; - } - case 12: { - { -#line 168 "hb-ot-shape-complex-use-machine.rl" - {te = p;p = p - 1;{ + {te = p;p--;{ found_syllable (use_number_joiner_terminated_cluster); }} + break; + case 12: #line 168 "hb-ot-shape-complex-use-machine.rl" - found_syllable (use_numeral_cluster); } - }} - -#line 625 "hb-ot-shape-complex-use-machine.hh" - - - break; - } - case 14: { - { + {te = p;p--;{ found_syllable (use_numeral_cluster); }} + break; + case 14: #line 169 "hb-ot-shape-complex-use-machine.rl" - {te = p;p = p - 1;{ -#line 169 "hb-ot-shape-complex-use-machine.rl" - found_syllable (use_symbol_cluster); } - }} - -#line 638 "hb-ot-shape-complex-use-machine.hh" - - - break; - } - case 17: { - { -#line 170 "hb-ot-shape-complex-use-machine.rl" - {te = p;p = p - 1;{ + {te = p;p--;{ found_syllable (use_symbol_cluster); }} + break; + case 17: #line 170 "hb-ot-shape-complex-use-machine.rl" - found_syllable (use_hieroglyph_cluster); } - }} - -#line 651 "hb-ot-shape-complex-use-machine.hh" - - - break; - } - case 15: { - { + {te = p;p--;{ found_syllable (use_hieroglyph_cluster); }} + break; + case 15: #line 171 "hb-ot-shape-complex-use-machine.rl" - {te = p;p = p - 1;{ -#line 171 "hb-ot-shape-complex-use-machine.rl" - found_syllable (use_broken_cluster); } - }} - -#line 664 "hb-ot-shape-complex-use-machine.hh" - - - break; - } - case 16: { - { -#line 172 "hb-ot-shape-complex-use-machine.rl" - {te = p;p = p - 1;{ + {te = p;p--;{ found_syllable (use_broken_cluster); }} + break; + case 16: #line 172 "hb-ot-shape-complex-use-machine.rl" - found_syllable (use_non_cluster); } - }} - -#line 677 "hb-ot-shape-complex-use-machine.hh" - - - break; - } - case 1: { - { + {te = p;p--;{ found_syllable (use_non_cluster); }} + break; + case 1: #line 171 "hb-ot-shape-complex-use-machine.rl" - {p = ((te))-1; - { -#line 171 "hb-ot-shape-complex-use-machine.rl" - found_syllable (use_broken_cluster); } - }} - -#line 691 "hb-ot-shape-complex-use-machine.hh" - - - break; - } - } - - } - - if ( p == eof ) { - if ( cs >= 2 ) - goto _out; - } - else { - switch ( _use_syllable_machine_to_state_actions[cs] ) { - case 3: { - { + {{p = ((te))-1;}{ found_syllable (use_broken_cluster); }} + break; +#line 561 "hb-ot-shape-complex-use-machine.hh" + } + +_again: + switch ( _use_syllable_machine_to_state_actions[cs] ) { + case 3: #line 1 "NONE" - {ts = 0;}} - -#line 711 "hb-ot-shape-complex-use-machine.hh" - - - break; - } - } - - p += 1; - goto _resume; - } - _out: {} + {ts = 0;} + break; +#line 570 "hb-ot-shape-complex-use-machine.hh" + } + + if ( ++p != pe ) + goto _resume; + _test_eof: {} + if ( p == eof ) + { + if ( _use_syllable_machine_eof_trans[cs] > 0 ) { + _trans = _use_syllable_machine_eof_trans[cs] - 1; + goto _eof_trans; + } } - + + } + #line 265 "hb-ot-shape-complex-use-machine.rl" - + } #undef found_syllable diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-use-table.hh b/thirdparty/harfbuzz/src/hb-ot-shape-complex-use-table.hh index a35894ce81..7903a0ef89 100644 --- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-use-table.hh +++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-use-table.hh @@ -6,14 +6,14 @@ * * on files with these headers: * - * # IndicSyllabicCategory-13.0.0.txt - * # Date: 2019-07-22, 19:55:00 GMT [KW, RP] - * # IndicPositionalCategory-13.0.0.txt - * # Date: 2019-07-23, 00:01:00 GMT [KW, RP] - * # ArabicShaping-13.0.0.txt - * # Date: 2020-01-31, 23:55:00 GMT [KW, RP] - * # Blocks-13.0.0.txt - * # Date: 2019-07-10, 19:06:00 GMT [KW] + * # IndicSyllabicCategory-14.0.0.txt + * # Date: 2021-05-22, 01:01:00 GMT [KW, RP] + * # IndicPositionalCategory-14.0.0.txt + * # Date: 2021-05-22, 01:01:00 GMT [KW, RP] + * # ArabicShaping-14.0.0.txt + * # Date: 2021-05-21, 01:54:00 GMT [KW, RP] + * # Blocks-14.0.0.txt + * # Date: 2021-01-22, 23:29:00 GMT [KW] * # Override values For Indic_Syllabic_Category * # Not derivable * # Initial version based on Unicode 7.0 by Andrew Glass 2014-03-17 @@ -199,7 +199,7 @@ static const uint8_t use_table[] = { /* 0C00 */ VMAbv, VMPst, VMPst, VMPst, VMAbv, B, B, B, B, B, B, B, B, O, B, B, /* 0C10 */ B, O, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 0C20 */ B, B, B, B, B, B, B, B, B, O, B, B, B, B, B, B, - /* 0C30 */ B, B, B, B, B, B, B, B, B, B, O, O, O, B, VAbv, VAbv, + /* 0C30 */ B, B, B, B, B, B, B, B, B, B, O, O, CMBlw, B, VAbv, VAbv, /* 0C40 */ VAbv, VPst, VPst, VPst, VPst, O, VAbv, VAbv, VAbv, O, VAbv, VAbv, VAbv, H, O, O, /* 0C50 */ O, O, O, O, O, VAbv, VBlw, O, B, B, B, O, O, O, O, O, /* 0C60 */ B, B, VBlw, VBlw, O, O, B, B, B, B, B, B, B, B, B, B, @@ -278,13 +278,13 @@ static const uint8_t use_table[] = { /* Tagalog */ - /* 1700 */ B, B, B, B, B, B, B, B, B, B, B, B, B, O, B, B, - /* 1710 */ B, B, VAbv, VBlw, VBlw, O, O, O, O, O, O, O, O, O, O, O, + /* 1700 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 1710 */ B, B, VAbv, VBlw, VBlw, VPst, O, O, O, O, O, O, O, O, O, B, /* Hanunoo */ /* 1720 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 1730 */ B, B, VAbv, VBlw, VBlw, O, O, O, O, O, O, O, O, O, O, O, + /* 1730 */ B, B, VAbv, VBlw, VPst, O, O, O, O, O, O, O, O, O, O, O, /* Buhid */ @@ -374,7 +374,7 @@ static const uint8_t use_table[] = { /* 1B10 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 1B20 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 1B30 */ B, B, B, B, CMAbv, VPst, VAbv, VAbv, VBlw, VBlw, VBlw, VBlw, VAbv, VAbv, VPre, VPre, - /* 1B40 */ VPre, VPre, VAbv, VAbv, H, B, B, B, B, B, B, B, O, O, O, O, + /* 1B40 */ VPre, VPre, VAbv, VAbv, H, B, B, B, B, B, B, B, B, O, O, O, /* 1B50 */ B, B, B, B, B, B, B, B, B, B, O, GB, GB, O, O, GB, /* 1B60 */ O, S, GB, S, S, S, S, S, GB, S, S, SMAbv, SMBlw, SMAbv, SMAbv, SMAbv, /* 1B70 */ SMAbv, SMAbv, SMAbv, SMAbv, O, O, O, O, O, O, O, O, O, O, O, O, @@ -630,7 +630,7 @@ static const uint8_t use_table[] = { /* 11040 */ VBlw, VBlw, VAbv, VAbv, VAbv, VAbv, HVM, O, O, O, O, O, O, O, O, O, /* 11050 */ O, O, N, N, N, N, N, N, N, N, N, N, N, N, N, N, /* 11060 */ N, N, N, N, N, N, B, B, B, B, B, B, B, B, B, B, - /* 11070 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, HN, + /* 11070 */ VAbv, B, B, VAbv, VAbv, B, O, O, O, O, O, O, O, O, O, HN, /* Kaithi */ @@ -638,8 +638,9 @@ static const uint8_t use_table[] = { /* 11090 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 110A0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 110B0 */ VPst, VPre, VPst, VBlw, VBlw, VAbv, VAbv, VPst, VPst, H, CMBlw, O, O, O, O, O, + /* 110C0 */ O, O, VBlw, O, O, O, O, O, -#define use_offset_0x11100u 4608 +#define use_offset_0x11100u 4616 /* Chakma */ @@ -677,7 +678,7 @@ static const uint8_t use_table[] = { /* 11220 */ B, B, B, B, B, B, B, B, B, B, B, B, VPst, VPst, VPst, VBlw, /* 11230 */ VAbv, VAbv, VAbv, VAbv, VMAbv, H, CMAbv, CMAbv, O, O, O, O, O, O, VMAbv, O, -#define use_offset_0x11280u 4928 +#define use_offset_0x11280u 4936 /* Multani */ @@ -705,7 +706,7 @@ static const uint8_t use_table[] = { /* 11360 */ B, B, VPst, VPst, O, O, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, O, O, O, /* 11370 */ VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, O, O, O, -#define use_offset_0x11400u 5176 +#define use_offset_0x11400u 5184 /* Newa */ @@ -728,7 +729,7 @@ static const uint8_t use_table[] = { /* 114C0 */ VMAbv, VMAbv, H, CMBlw, B, O, O, O, O, O, O, O, O, O, O, O, /* 114D0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, -#define use_offset_0x11580u 5400 +#define use_offset_0x11580u 5408 /* Siddham */ @@ -770,8 +771,9 @@ static const uint8_t use_table[] = { /* 11710 */ B, B, B, B, B, B, B, B, B, B, B, O, O, MBlw, MPre, MAbv, /* 11720 */ VPst, VPst, VAbv, VAbv, VBlw, VBlw, VPre, VAbv, VBlw, VAbv, VAbv, VAbv, O, O, O, O, /* 11730 */ B, B, B, B, B, B, B, B, B, B, B, B, O, O, O, O, + /* 11740 */ B, B, B, B, B, B, B, O, -#define use_offset_0x11800u 5848 +#define use_offset_0x11800u 5864 /* Dogra */ @@ -781,7 +783,7 @@ static const uint8_t use_table[] = { /* 11820 */ B, B, B, B, B, B, B, B, B, B, B, B, VPst, VPre, VPst, VBlw, /* 11830 */ VBlw, VBlw, VBlw, VAbv, VAbv, VAbv, VAbv, VMAbv, VMPst, H, CMBlw, O, O, O, O, O, -#define use_offset_0x11900u 5912 +#define use_offset_0x11900u 5928 /* Dives Akuru */ @@ -793,7 +795,7 @@ static const uint8_t use_table[] = { /* 11940 */ MPst, R, MPst, CMBlw, O, O, O, O, O, O, O, O, O, O, O, O, /* 11950 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, -#define use_offset_0x119a0u 6008 +#define use_offset_0x119a0u 6024 /* Nandinagari */ @@ -821,7 +823,7 @@ static const uint8_t use_table[] = { /* 11A80 */ B, B, B, B, R, R, R, R, R, R, FBlw, FBlw, FBlw, FBlw, FBlw, FBlw, /* 11A90 */ FBlw, FBlw, FBlw, FBlw, FBlw, FBlw, VMAbv, VMPst, CMAbv, H, O, O, O, B, O, O, -#define use_offset_0x11c00u 6264 +#define use_offset_0x11c00u 6280 /* Bhaiksuki */ @@ -842,7 +844,7 @@ static const uint8_t use_table[] = { /* 11CA0 */ SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, O, SUB, SUB, SUB, SUB, SUB, SUB, SUB, /* 11CB0 */ VBlw, VPre, VBlw, VAbv, VPst, VMAbv, VMAbv, O, -#define use_offset_0x11d00u 6448 +#define use_offset_0x11d00u 6464 /* Masaram Gondi */ @@ -862,7 +864,7 @@ static const uint8_t use_table[] = { /* 11D90 */ VAbv, VAbv, O, VPst, VPst, VMAbv, VMPst, H, O, O, O, O, O, O, O, O, /* 11DA0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, -#define use_offset_0x11ee0u 6624 +#define use_offset_0x11ee0u 6640 /* Makasar */ @@ -870,7 +872,7 @@ static const uint8_t use_table[] = { /* 11EE0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 11EF0 */ B, B, GB, VAbv, VBlw, VPre, VPst, O, -#define use_offset_0x13000u 6648 +#define use_offset_0x13000u 6664 /* Egyptian Hieroglyphs */ @@ -947,7 +949,7 @@ static const uint8_t use_table[] = { /* 13430 */ J, J, J, J, J, J, J, SB, SE, O, O, O, O, O, O, O, -#define use_offset_0x16b00u 7736 +#define use_offset_0x16b00u 7752 /* Pahawh Hmong */ @@ -957,7 +959,7 @@ static const uint8_t use_table[] = { /* 16B20 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 16B30 */ VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, O, -#define use_offset_0x16f00u 7792 +#define use_offset_0x16f00u 7808 /* Miao */ @@ -973,14 +975,14 @@ static const uint8_t use_table[] = { /* 16F80 */ VBlw, VBlw, VBlw, VBlw, VBlw, VBlw, VBlw, VBlw, O, O, O, O, O, O, O, VMBlw, /* 16F90 */ VMBlw, VMBlw, VMBlw, O, O, O, O, O, -#define use_offset_0x16fe0u 7944 +#define use_offset_0x16fe0u 7960 /* Ideographic Symbols and Punctuation */ /* 16FE0 */ O, O, O, O, B, O, O, O, -#define use_offset_0x18b00u 7952 +#define use_offset_0x18b00u 7968 /* Khitan Small Script */ @@ -1016,7 +1018,7 @@ static const uint8_t use_table[] = { /* 18CC0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 18CD0 */ B, B, B, B, B, B, O, O, -#define use_offset_0x1bc00u 8424 +#define use_offset_0x1bc00u 8440 /* Duployan */ @@ -1032,7 +1034,7 @@ static const uint8_t use_table[] = { /* 1BC80 */ B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, O, /* 1BC90 */ B, B, B, B, B, B, B, B, B, B, O, O, O, CMBlw, CMBlw, O, -#define use_offset_0x1e100u 8584 +#define use_offset_0x1e100u 8600 /* Nyiakeng Puachue Hmong */ @@ -1043,7 +1045,7 @@ static const uint8_t use_table[] = { /* 1E130 */ VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, B, B, B, B, B, B, B, O, O, /* 1E140 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, B, B, -#define use_offset_0x1e2c0u 8664 +#define use_offset_0x1e2c0u 8680 /* Wancho */ @@ -1053,7 +1055,7 @@ static const uint8_t use_table[] = { /* 1E2E0 */ B, B, B, B, B, B, B, B, B, B, B, B, VMAbv, VMAbv, VMAbv, VMAbv, /* 1E2F0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, -#define use_offset_0x1e900u 8728 +#define use_offset_0x1e900u 8744 /* Adlam */ @@ -1065,7 +1067,7 @@ static const uint8_t use_table[] = { /* 1E940 */ B, B, B, B, CMAbv, CMAbv, CMAbv, CMAbv, CMAbv, CMAbv, CMAbv, B, O, O, O, O, /* 1E950 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, -}; /* Table items: 8824; occupancy: 79% */ +}; /* Table items: 8840; occupancy: 79% */ static inline uint8_t hb_use_get_category (hb_codepoint_t u) @@ -1111,15 +1113,15 @@ hb_use_get_category (hb_codepoint_t u) if (hb_in_range<hb_codepoint_t> (u, 0x10D00u, 0x10D3Fu)) return use_table[u - 0x10D00u + use_offset_0x10d00u]; if (hb_in_range<hb_codepoint_t> (u, 0x10E80u, 0x10EB7u)) return use_table[u - 0x10E80u + use_offset_0x10e80u]; if (hb_in_range<hb_codepoint_t> (u, 0x10F30u, 0x10F57u)) return use_table[u - 0x10F30u + use_offset_0x10f30u]; - if (hb_in_range<hb_codepoint_t> (u, 0x10FB0u, 0x110BFu)) return use_table[u - 0x10FB0u + use_offset_0x10fb0u]; + if (hb_in_range<hb_codepoint_t> (u, 0x10FB0u, 0x110C7u)) return use_table[u - 0x10FB0u + use_offset_0x10fb0u]; break; case 0x11u: - if (hb_in_range<hb_codepoint_t> (u, 0x10FB0u, 0x110BFu)) return use_table[u - 0x10FB0u + use_offset_0x10fb0u]; + if (hb_in_range<hb_codepoint_t> (u, 0x10FB0u, 0x110C7u)) return use_table[u - 0x10FB0u + use_offset_0x10fb0u]; if (hb_in_range<hb_codepoint_t> (u, 0x11100u, 0x1123Fu)) return use_table[u - 0x11100u + use_offset_0x11100u]; if (hb_in_range<hb_codepoint_t> (u, 0x11280u, 0x11377u)) return use_table[u - 0x11280u + use_offset_0x11280u]; if (hb_in_range<hb_codepoint_t> (u, 0x11400u, 0x114DFu)) return use_table[u - 0x11400u + use_offset_0x11400u]; - if (hb_in_range<hb_codepoint_t> (u, 0x11580u, 0x1173Fu)) return use_table[u - 0x11580u + use_offset_0x11580u]; + if (hb_in_range<hb_codepoint_t> (u, 0x11580u, 0x11747u)) return use_table[u - 0x11580u + use_offset_0x11580u]; if (hb_in_range<hb_codepoint_t> (u, 0x11800u, 0x1183Fu)) return use_table[u - 0x11800u + use_offset_0x11800u]; if (hb_in_range<hb_codepoint_t> (u, 0x11900u, 0x1195Fu)) return use_table[u - 0x11900u + use_offset_0x11900u]; if (hb_in_range<hb_codepoint_t> (u, 0x119A0u, 0x11A9Fu)) return use_table[u - 0x119A0u + use_offset_0x119a0u]; diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-use.cc b/thirdparty/harfbuzz/src/hb-ot-shape-complex-use.cc index 0d0b7e771e..1e4804c4a2 100644 --- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-use.cc +++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-use.cc @@ -47,7 +47,8 @@ use_basic_features[] = { /* * Basic features. - * These features are applied all at once, before reordering. + * These features are applied all at once, before reordering, constrained + * to the syllable. */ HB_TAG('r','k','r','f'), HB_TAG('a','b','v','f'), @@ -154,7 +155,7 @@ struct use_shape_plan_t static void * data_create_use (const hb_ot_shape_plan_t *plan) { - use_shape_plan_t *use_plan = (use_shape_plan_t *) calloc (1, sizeof (use_shape_plan_t)); + use_shape_plan_t *use_plan = (use_shape_plan_t *) hb_calloc (1, sizeof (use_shape_plan_t)); if (unlikely (!use_plan)) return nullptr; @@ -165,7 +166,7 @@ data_create_use (const hb_ot_shape_plan_t *plan) use_plan->arabic_plan = (arabic_shape_plan_t *) data_create_arabic (plan); if (unlikely (!use_plan->arabic_plan)) { - free (use_plan); + hb_free (use_plan); return nullptr; } } @@ -181,7 +182,7 @@ data_destroy_use (void *data) if (use_plan->arabic_plan) data_destroy_arabic (use_plan->arabic_plan); - free (data); + hb_free (data); } static void diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-vowel-constraints.cc b/thirdparty/harfbuzz/src/hb-ot-shape-complex-vowel-constraints.cc index 1037626998..045731dfb4 100644 --- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-vowel-constraints.cc +++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-vowel-constraints.cc @@ -10,8 +10,8 @@ * # Date: 2015-03-12, 21:17:00 GMT [AG] * # Date: 2019-11-08, 23:22:00 GMT [AG] * - * # Scripts-13.0.0.txt - * # Date: 2020-01-22, 00:07:43 GMT + * # Scripts-14.0.0.txt + * # Date: 2021-07-10, 00:35:31 GMT */ #include "hb.hh" diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex.hh b/thirdparty/harfbuzz/src/hb-ot-shape-complex.hh index 19e24b9f30..8012a9ae94 100644 --- a/thirdparty/harfbuzz/src/hb-ot-shape-complex.hh +++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex.hh @@ -373,6 +373,15 @@ hb_ot_shape_complex_categorize (const hb_ot_shape_planner_t *planner) /* Unicode-13.0 additions */ case HB_SCRIPT_CHORASMIAN: case HB_SCRIPT_DIVES_AKURU: + case HB_SCRIPT_KHITAN_SMALL_SCRIPT: + case HB_SCRIPT_YEZIDI: + + /* Unicode-14.0 additions */ + case HB_SCRIPT_CYPRO_MINOAN: + case HB_SCRIPT_OLD_UYGHUR: + case HB_SCRIPT_TANGSA: + case HB_SCRIPT_TOTO: + case HB_SCRIPT_VITHKUQI: /* If the designer designed the font for the 'DFLT' script, * (or we ended up arbitrarily pick 'latn'), use the default shaper. diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-fallback.cc b/thirdparty/harfbuzz/src/hb-ot-shape-fallback.cc index 7d00a35ab9..eb1bc79768 100644 --- a/thirdparty/harfbuzz/src/hb-ot-shape-fallback.cc +++ b/thirdparty/harfbuzz/src/hb-ot-shape-fallback.cc @@ -92,7 +92,7 @@ recategorize_combining_class (hb_codepoint_t u, case HB_MODIFIED_COMBINING_CLASS_CCC15: /* tsere */ case HB_MODIFIED_COMBINING_CLASS_CCC16: /* segol */ case HB_MODIFIED_COMBINING_CLASS_CCC17: /* patah */ - case HB_MODIFIED_COMBINING_CLASS_CCC18: /* qamats */ + case HB_MODIFIED_COMBINING_CLASS_CCC18: /* qamats & qamats qatan */ case HB_MODIFIED_COMBINING_CLASS_CCC20: /* qubuts */ case HB_MODIFIED_COMBINING_CLASS_CCC22: /* meteg */ return HB_UNICODE_COMBINING_CLASS_BELOW; @@ -104,7 +104,7 @@ recategorize_combining_class (hb_codepoint_t u, return HB_UNICODE_COMBINING_CLASS_ABOVE_RIGHT; case HB_MODIFIED_COMBINING_CLASS_CCC25: /* sin dot */ - case HB_MODIFIED_COMBINING_CLASS_CCC19: /* holam */ + case HB_MODIFIED_COMBINING_CLASS_CCC19: /* holam & holam haser for vav */ return HB_UNICODE_COMBINING_CLASS_ABOVE_LEFT; case HB_MODIFIED_COMBINING_CLASS_CCC26: /* point varika */ diff --git a/thirdparty/harfbuzz/src/hb-ot-shape.cc b/thirdparty/harfbuzz/src/hb-ot-shape.cc index 86ab0b4268..0e215c24f7 100644 --- a/thirdparty/harfbuzz/src/hb-ot-shape.cc +++ b/thirdparty/harfbuzz/src/hb-ot-shape.cc @@ -149,13 +149,17 @@ hb_ot_shape_planner_t::compile (hb_ot_shape_plan_t &plan, * Decide who does positioning. GPOS, kerx, kern, or fallback. */ - if (0) +#ifndef HB_NO_AAT_SHAPE + bool has_gsub = hb_ot_layout_has_substitution (face); +#endif + bool has_gpos = !disable_gpos && hb_ot_layout_has_positioning (face); + if (false) ; #ifndef HB_NO_AAT_SHAPE - else if (hb_aat_layout_has_positioning (face)) + else if (hb_aat_layout_has_positioning (face) && !(has_gsub && has_gpos)) plan.apply_kerx = true; #endif - else if (!apply_morx && !disable_gpos && hb_ot_layout_has_positioning (face)) + else if (!apply_morx && has_gpos) plan.apply_gpos = true; if (!plan.apply_kerx && (!has_gpos_kern || !plan.apply_gpos)) @@ -172,6 +176,8 @@ hb_ot_shape_planner_t::compile (hb_ot_shape_plan_t &plan, #endif } + plan.apply_fallback_kern = !(plan.apply_gpos || plan.apply_kerx || plan.apply_kern); + plan.zero_marks = script_zero_marks && !plan.apply_kerx && (!plan.apply_kern @@ -193,6 +199,12 @@ hb_ot_shape_planner_t::compile (hb_ot_shape_plan_t &plan, script_fallback_mark_positioning; #ifndef HB_NO_AAT_SHAPE + /* If we're using morx shaping, we cancel mark position adjustment because + Apple Color Emoji assumes this will NOT be done when forming emoji sequences; + https://github.com/harfbuzz/harfbuzz/issues/2967. */ + if (plan.apply_morx) + plan.adjust_mark_positioning_when_zeroing = false; + /* Currently we always apply trak. */ plan.apply_trak = plan.requested_tracking && hb_aat_layout_has_tracking (face); #endif @@ -266,11 +278,12 @@ hb_ot_shape_plan_t::position (hb_font_t *font, else if (this->apply_kerx) hb_aat_layout_position (this, font, buffer); #endif + #ifndef HB_NO_OT_KERN - else if (this->apply_kern) + if (this->apply_kern) hb_ot_layout_kern (this, font, buffer); #endif - else + else if (this->apply_fallback_kern) _hb_ot_shape_fallback_kern (this, font, buffer); #ifndef HB_NO_AAT_SHAPE @@ -306,16 +319,17 @@ horizontal_features[] = }; static void -hb_ot_shape_collect_features (hb_ot_shape_planner_t *planner, - const hb_feature_t *user_features, - unsigned int num_user_features) +hb_ot_shape_collect_features (hb_ot_shape_planner_t *planner, + const hb_feature_t *user_features, + unsigned int num_user_features) { hb_ot_map_builder_t *map = &planner->map; map->enable_feature (HB_TAG('r','v','r','n')); map->add_gsub_pause (nullptr); - switch (planner->props.direction) { + switch (planner->props.direction) + { case HB_DIRECTION_LTR: map->enable_feature (HB_TAG ('l','t','r','a')); map->enable_feature (HB_TAG ('l','t','r','m')); @@ -348,12 +362,14 @@ hb_ot_shape_collect_features (hb_ot_shape_planner_t *planner, map->enable_feature (HB_TAG ('t','r','a','k'), F_HAS_FALLBACK); #endif - map->enable_feature (HB_TAG ('H','A','R','F')); + map->enable_feature (HB_TAG ('H','a','r','f')); /* Considered required. */ + map->enable_feature (HB_TAG ('H','A','R','F')); /* Considered discretionary. */ if (planner->shaper->collect_features) planner->shaper->collect_features (planner); - map->enable_feature (HB_TAG ('B','U','Z','Z')); + map->enable_feature (HB_TAG ('B','u','z','z')); /* Considered required. */ + map->enable_feature (HB_TAG ('B','U','Z','Z')); /* Considered discretionary. */ for (unsigned int i = 0; i < ARRAY_LENGTH (common_features); i++) map->add_feature (common_features[i]); @@ -363,6 +379,10 @@ hb_ot_shape_collect_features (hb_ot_shape_planner_t *planner, map->add_feature (horizontal_features[i]); else { + /* We only apply `vert` feature. See: + * https://github.com/harfbuzz/harfbuzz/commit/d71c0df2d17f4590d5611239577a6cb532c26528 + * https://lists.freedesktop.org/archives/harfbuzz/2013-August/003490.html */ + /* We really want to find a 'vert' feature if there's any in the font, no * matter which script/langsys it is listed (or not) under. * See various bugs referenced from: @@ -478,6 +498,14 @@ hb_set_unicode_props (hb_buffer_t *buffer) if (unlikely (_hb_glyph_info_get_general_category (&info[i]) == HB_UNICODE_GENERAL_CATEGORY_MODIFIER_SYMBOL && hb_in_range<hb_codepoint_t> (info[i].codepoint, 0x1F3FBu, 0x1F3FFu))) { + _hb_glyph_info_set_continuation (&info[i]); + } + /* Regional_Indicators are hairy as hell... + * https://github.com/harfbuzz/harfbuzz/issues/2265 */ + else if (unlikely (i && hb_in_range<hb_codepoint_t> (info[i].codepoint, 0x1F1E6u, 0x1F1FFu))) + { + if (hb_in_range<hb_codepoint_t> (info[i - 1].codepoint, 0x1F1E6u, 0x1F1FFu) && + !_hb_glyph_info_is_continuation (&info[i - 1])) _hb_glyph_info_set_continuation (&info[i]); } #ifndef HB_NO_EMOJI_SEQUENCES @@ -535,6 +563,7 @@ hb_insert_dotted_circle (hb_buffer_t *buffer, hb_font_t *font) info.cluster = buffer->cur().cluster; info.mask = buffer->cur().mask; (void) buffer->output_info (info); + buffer->swap_buffers (); } @@ -558,6 +587,36 @@ hb_ensure_native_direction (hb_buffer_t *buffer) hb_direction_t direction = buffer->props.direction; hb_direction_t horiz_dir = hb_script_get_horizontal_direction (buffer->props.script); + /* Numeric runs in natively-RTL scripts are actually native-LTR, so we reset + * the horiz_dir if the run contains at least one decimal-number char, and no + * letter chars (ideally we should be checking for chars with strong + * directionality but hb-unicode currently lacks bidi categories). + * + * This allows digit sequences in Arabic etc to be shaped in "native" + * direction, so that features like ligatures will work as intended. + * + * https://github.com/harfbuzz/harfbuzz/issues/501 + */ + if (unlikely (horiz_dir == HB_DIRECTION_RTL && direction == HB_DIRECTION_LTR)) + { + bool found_number = false, found_letter = false; + const auto* info = buffer->info; + const auto count = buffer->len; + for (unsigned i = 0; i < count; i++) + { + auto gc = _hb_glyph_info_get_general_category (&info[i]); + if (gc == HB_UNICODE_GENERAL_CATEGORY_DECIMAL_NUMBER) + found_number = true; + else if (HB_UNICODE_GENERAL_CATEGORY_IS_LETTER (gc)) + { + found_letter = true; + break; + } + } + if (found_number && !found_letter) + horiz_dir = HB_DIRECTION_LTR; + } + /* TODO vertical: * The only BTT vertical script is Ogham, but it's not clear to me whether OpenType * Ogham fonts are supposed to be implemented BTT or not. Need to research that @@ -1111,8 +1170,6 @@ hb_ot_shape_internal (hb_ot_shape_context_t *c) _hb_buffer_allocate_unicode_vars (c->buffer); - c->buffer->clear_output (); - hb_ot_shape_initialize_masks (c); hb_set_unicode_props (c->buffer); hb_insert_dotted_circle (c->buffer, c->font); @@ -1122,7 +1179,8 @@ hb_ot_shape_internal (hb_ot_shape_context_t *c) hb_ensure_native_direction (c->buffer); if (c->plan->shaper->preprocess_text && - c->buffer->message(c->font, "start preprocess-text")) { + c->buffer->message(c->font, "start preprocess-text")) + { c->plan->shaper->preprocess_text (c->plan, c->buffer, c->font); (void) c->buffer->message(c->font, "end preprocess-text"); } @@ -1164,7 +1222,7 @@ _hb_ot_shape (hb_shape_plan_t *shape_plan, * @lookup_indexes: (out): The #hb_set_t set of lookups returned * * Computes the complete set of GSUB or GPOS lookups that are applicable - * under a given @shape_plan. + * under a given @shape_plan. * * Since: 0.9.7 **/ diff --git a/thirdparty/harfbuzz/src/hb-ot-shape.hh b/thirdparty/harfbuzz/src/hb-ot-shape.hh index acc98772a9..e8c81015c7 100644 --- a/thirdparty/harfbuzz/src/hb-ot-shape.hh +++ b/thirdparty/harfbuzz/src/hb-ot-shape.hh @@ -112,6 +112,7 @@ struct hb_ot_shape_plan_t #else static constexpr bool apply_kern = false; #endif + bool apply_fallback_kern : 1; #ifndef HB_NO_AAT_SHAPE bool apply_kerx : 1; bool apply_morx : 1; diff --git a/thirdparty/harfbuzz/src/hb-ot-stat-table.hh b/thirdparty/harfbuzz/src/hb-ot-stat-table.hh index 6aa4fa4492..41d1734b39 100644 --- a/thirdparty/harfbuzz/src/hb-ot-stat-table.hh +++ b/thirdparty/harfbuzz/src/hb-ot-stat-table.hh @@ -297,7 +297,7 @@ struct STAT unsigned int axis_index; if (!get_design_axes ().lfind (tag, &axis_index)) return false; - hb_array_t<const OffsetTo<AxisValue>> axis_values = get_axis_value_offsets (); + hb_array_t<const Offset16To<AxisValue>> axis_values = get_axis_value_offsets (); for (unsigned int i = 0; i < axis_values.length; i++) { const AxisValue& axis_value = this+axis_values[i]; @@ -359,7 +359,7 @@ struct STAT hb_array_t<const StatAxisRecord> const get_design_axes () const { return (this+designAxesOffset).as_array (designAxisCount); } - hb_array_t<const OffsetTo<AxisValue>> const get_axis_value_offsets () const + hb_array_t<const Offset16To<AxisValue>> const get_axis_value_offsets () const { return (this+offsetToAxisValueOffsets).as_array (axisValueCount); } @@ -373,7 +373,7 @@ struct STAT * in the 'fvar' table. In all fonts, must * be greater than zero if axisValueCount * is greater than zero. */ - LNNOffsetTo<UnsizedArrayOf<StatAxisRecord>> + NNOffset32To<UnsizedArrayOf<StatAxisRecord>> designAxesOffset; /* Offset in bytes from the beginning of * the STAT table to the start of the design @@ -381,7 +381,7 @@ struct STAT * set to zero; if designAxisCount is greater * than zero, must be greater than zero. */ HBUINT16 axisValueCount; /* The number of axis value tables. */ - LNNOffsetTo<UnsizedArrayOf<OffsetTo<AxisValue>>> + NNOffset32To<UnsizedArrayOf<Offset16To<AxisValue>>> offsetToAxisValueOffsets; /* Offset in bytes from the beginning of * the STAT table to the start of the design diff --git a/thirdparty/harfbuzz/src/hb-ot-tag-table.hh b/thirdparty/harfbuzz/src/hb-ot-tag-table.hh index 87830b5462..fc9bffc23f 100644 --- a/thirdparty/harfbuzz/src/hb-ot-tag-table.hh +++ b/thirdparty/harfbuzz/src/hb-ot-tag-table.hh @@ -6,8 +6,8 @@ * * on files with these headers: * - * <meta name="updated_at" content="2021-02-12 04:08 PM" /> - * File-Date: 2021-03-05 + * <meta name="updated_at" content="2021-09-02 09:40 PM" /> + * File-Date: 2021-08-06 */ #ifndef HB_OT_TAG_TABLE_HH @@ -93,6 +93,7 @@ static const LangTag ot_languages[] = { {"auz", HB_TAG('A','R','A',' ')}, /* Uzbeki Arabic -> Arabic */ {"av", HB_TAG('A','V','R',' ')}, /* Avaric -> Avar */ {"avl", HB_TAG('A','R','A',' ')}, /* Eastern Egyptian Bedawi Arabic -> Arabic */ +/*{"avn", HB_TAG('A','V','N',' ')},*/ /* Avatime */ /*{"awa", HB_TAG('A','W','A',' ')},*/ /* Awadhi */ {"ay", HB_TAG('A','Y','M',' ')}, /* Aymara [macrolanguage] */ {"ayc", HB_TAG('A','Y','M',' ')}, /* Southern Aymara -> Aymara */ @@ -345,6 +346,7 @@ static const LangTag ot_languages[] = { {"cth", HB_TAG('Q','I','N',' ')}, /* Thaiphum Chin -> Chin */ {"ctl", HB_TAG('C','C','H','N')}, /* Tlacoatzintepec Chinantec -> Chinantec */ {"cts", HB_TAG('B','I','K',' ')}, /* Northern Catanduanes Bikol -> Bikol */ +/*{"ctt", HB_TAG('C','T','T',' ')},*/ /* Wayanad Chetti */ {"ctu", HB_TAG('M','Y','N',' ')}, /* Chol -> Mayan */ {"cu", HB_TAG('C','S','L',' ')}, /* Church Slavonic */ {"cuc", HB_TAG('C','C','H','N')}, /* Usila Chinantec -> Chinantec */ @@ -537,23 +539,27 @@ static const LangTag ot_languages[] = { {"ha", HB_TAG('H','A','U',' ')}, /* Hausa */ {"haa", HB_TAG('A','T','H',' ')}, /* Han -> Athapaskan */ {"hae", HB_TAG('O','R','O',' ')}, /* Eastern Oromo -> Oromo */ - {"hai", HB_TAG_NONE }, /* Haida [macrolanguage] != Haitian (Haitian Creole) */ + {"hai", HB_TAG('H','A','I','0')}, /* Haida [macrolanguage] */ {"hak", HB_TAG('Z','H','S',' ')}, /* Hakka Chinese -> Chinese, Simplified */ {"hal", HB_TAG_NONE }, /* Halang != Halam (Falam Chin) */ {"har", HB_TAG('H','R','I',' ')}, /* Harari */ /*{"haw", HB_TAG('H','A','W',' ')},*/ /* Hawaiian */ + {"hax", HB_TAG('H','A','I','0')}, /* Southern Haida -> Haida */ /*{"hay", HB_TAG('H','A','Y',' ')},*/ /* Haya */ /*{"haz", HB_TAG('H','A','Z',' ')},*/ /* Hazaragi */ {"hbn", HB_TAG_NONE }, /* Heiban != Hammer-Banna */ {"hca", HB_TAG('C','P','P',' ')}, /* Andaman Creole Hindi -> Creoles */ + {"hdn", HB_TAG('H','A','I','0')}, /* Northern Haida -> Haida */ {"he", HB_TAG('I','W','R',' ')}, /* Hebrew */ {"hea", HB_TAG('H','M','N',' ')}, /* Northern Qiandong Miao -> Hmong */ +/*{"hei", HB_TAG('H','E','I',' ')},*/ /* Heiltsuk */ {"hi", HB_TAG('H','I','N',' ')}, /* Hindi */ /*{"hil", HB_TAG('H','I','L',' ')},*/ /* Hiligaynon */ {"hji", HB_TAG('M','L','Y',' ')}, /* Haji -> Malay */ {"hlt", HB_TAG('Q','I','N',' ')}, /* Matu Chin -> Chin */ {"hma", HB_TAG('H','M','N',' ')}, /* Southern Mashan Hmong -> Hmong */ {"hmc", HB_TAG('H','M','N',' ')}, /* Central Huishui Hmong -> Hmong */ + {"hmd", HB_TAG('H','M','D',' ')}, /* Large Flowery Miao -> A-Hmao */ {"hmd", HB_TAG('H','M','N',' ')}, /* Large Flowery Miao -> Hmong */ {"hme", HB_TAG('H','M','N',' ')}, /* Eastern Huishui Hmong -> Hmong */ {"hmg", HB_TAG('H','M','N',' ')}, /* Southwestern Guiyang Hmong -> Hmong */ @@ -569,6 +575,7 @@ static const LangTag ot_languages[] = { {"hms", HB_TAG('H','M','N',' ')}, /* Southern Qiandong Miao -> Hmong */ {"hmw", HB_TAG('H','M','N',' ')}, /* Western Mashan Hmong -> Hmong */ {"hmy", HB_TAG('H','M','N',' ')}, /* Southern Guiyang Hmong -> Hmong */ + {"hmz", HB_TAG('H','M','Z',' ')}, /* Hmong Shua -> Hmong Shuat */ {"hmz", HB_TAG('H','M','N',' ')}, /* Hmong Shua -> Hmong */ /*{"hnd", HB_TAG('H','N','D',' ')},*/ /* Southern Hindko -> Hindko */ {"hne", HB_TAG('C','H','H',' ')}, /* Chhattisgarhi -> Chattisgarhi */ @@ -625,6 +632,7 @@ static const LangTag ot_languages[] = { {"inh", HB_TAG('I','N','G',' ')}, /* Ingush */ {"io", HB_TAG('I','D','O',' ')}, /* Ido */ {"iri", HB_TAG_NONE }, /* Rigwe != Irish */ +/*{"iru", HB_TAG('I','R','U',' ')},*/ /* Irula */ {"is", HB_TAG('I','S','L',' ')}, /* Icelandic */ {"ism", HB_TAG_NONE }, /* Masimasi != Inari Sami */ {"it", HB_TAG('I','T','A',' ')}, /* Italian */ @@ -660,6 +668,7 @@ static const LangTag ot_languages[] = { {"kac", HB_TAG_NONE }, /* Kachin != Kachchi */ {"kam", HB_TAG('K','M','B',' ')}, /* Kamba (Kenya) */ {"kar", HB_TAG('K','R','N',' ')}, /* Karen [family] */ +/*{"kaw", HB_TAG('K','A','W',' ')},*/ /* Kawi (Old Javanese) */ {"kbd", HB_TAG('K','A','B',' ')}, /* Kabardian */ {"kby", HB_TAG('K','N','R',' ')}, /* Manga Kanuri -> Kanuri */ {"kca", HB_TAG('K','H','K',' ')}, /* Khanty -> Khanty-Kazim */ @@ -779,6 +788,7 @@ static const LangTag ot_languages[] = { {"kvu", HB_TAG('K','R','N',' ')}, /* Yinbaw Karen -> Karen */ {"kvy", HB_TAG('K','R','N',' ')}, /* Yintale Karen -> Karen */ {"kw", HB_TAG('C','O','R',' ')}, /* Cornish */ +/*{"kwk", HB_TAG('K','W','K',' ')},*/ /* Kwakiutl -> Kwakʼwala */ {"kww", HB_TAG('C','P','P',' ')}, /* Kwinti -> Creoles */ {"kwy", HB_TAG('K','O','N','0')}, /* San Salvador Kongo -> Kongo */ {"kxc", HB_TAG('K','M','S',' ')}, /* Konso -> Komso */ @@ -806,6 +816,7 @@ static const LangTag ot_languages[] = { {"lcf", HB_TAG('M','L','Y',' ')}, /* Lubu -> Malay */ {"ldi", HB_TAG('K','O','N','0')}, /* Laari -> Kongo */ {"ldk", HB_TAG_NONE }, /* Leelau != Ladakhi */ +/*{"lef", HB_TAG('L','E','F',' ')},*/ /* Lelemi */ /*{"lez", HB_TAG('L','E','Z',' ')},*/ /* Lezghian -> Lezgi */ {"lg", HB_TAG('L','U','G',' ')}, /* Ganda */ {"li", HB_TAG('L','I','M',' ')}, /* Limburgish */ @@ -832,6 +843,7 @@ static const LangTag ot_languages[] = { {"lo", HB_TAG('L','A','O',' ')}, /* Lao */ /*{"lom", HB_TAG('L','O','M',' ')},*/ /* Loma (Liberia) */ {"lou", HB_TAG('C','P','P',' ')}, /* Louisiana Creole -> Creoles */ +/*{"lpo", HB_TAG('L','P','O',' ')},*/ /* Lipo */ /*{"lrc", HB_TAG('L','R','C',' ')},*/ /* Northern Luri -> Luri */ {"lri", HB_TAG('L','U','H',' ')}, /* Marachi -> Luyia */ {"lrm", HB_TAG('L','U','H',' ')}, /* Marama -> Luyia */ @@ -1231,6 +1243,7 @@ static const LangTag ot_languages[] = { {"rbl", HB_TAG('B','I','K',' ')}, /* Miraya Bikol -> Bikol */ {"rcf", HB_TAG('C','P','P',' ')}, /* Réunion Creole French -> Creoles */ /*{"rej", HB_TAG('R','E','J',' ')},*/ /* Rejang */ +/*{"rhg", HB_TAG('R','H','G',' ')},*/ /* Rohingya */ /*{"ria", HB_TAG('R','I','A',' ')},*/ /* Riang (India) */ {"rif", HB_TAG('R','I','F',' ')}, /* Tarifit */ {"rif", HB_TAG('B','B','R',' ')}, /* Tarifit -> Berber */ @@ -1286,6 +1299,7 @@ static const LangTag ot_languages[] = { {"sek", HB_TAG('A','T','H',' ')}, /* Sekani -> Athapaskan */ /*{"sel", HB_TAG('S','E','L',' ')},*/ /* Selkup */ {"sez", HB_TAG('Q','I','N',' ')}, /* Senthang Chin -> Chin */ + {"sfm", HB_TAG('S','F','M',' ')}, /* Small Flowery Miao */ {"sfm", HB_TAG('H','M','N',' ')}, /* Small Flowery Miao -> Hmong */ {"sg", HB_TAG('S','G','O',' ')}, /* Sango */ /*{"sga", HB_TAG('S','G','A',' ')},*/ /* Old Irish (to 900) */ @@ -1413,6 +1427,7 @@ static const LangTag ot_languages[] = { {"tkg", HB_TAG('M','L','G',' ')}, /* Tesaka Malagasy -> Malagasy */ {"tkm", HB_TAG_NONE }, /* Takelma != Turkmen */ {"tl", HB_TAG('T','G','L',' ')}, /* Tagalog */ +/*{"tli", HB_TAG('T','L','I',' ')},*/ /* Tlingit */ {"tmg", HB_TAG('C','P','P',' ')}, /* Ternateño -> Creoles */ {"tmh", HB_TAG('T','M','H',' ')}, /* Tamashek [macrolanguage] */ {"tmh", HB_TAG('B','B','R',' ')}, /* Tamashek [macrolanguage] -> Berber */ @@ -1499,6 +1514,7 @@ static const LangTag ot_languages[] = { {"wbm", HB_TAG('W','A',' ',' ')}, /* Wa */ {"wbr", HB_TAG('W','A','G',' ')}, /* Wagdi */ {"wbr", HB_TAG('R','A','J',' ')}, /* Wagdi -> Rajasthani */ +/*{"wci", HB_TAG('W','C','I',' ')},*/ /* Waci Gbe */ {"wea", HB_TAG('K','R','N',' ')}, /* Wewaw -> Karen */ {"wes", HB_TAG('C','P','P',' ')}, /* Cameroon Pidgin -> Creoles */ {"weu", HB_TAG('Q','I','N',' ')}, /* Rawngtu Chin -> Chin */ @@ -1533,6 +1549,8 @@ static const LangTag ot_languages[] = { {"xsl", HB_TAG('S','L','A',' ')}, /* South Slavey -> Slavey */ {"xsl", HB_TAG('A','T','H',' ')}, /* South Slavey -> Athapaskan */ {"xst", HB_TAG('S','I','G',' ')}, /* Silt'e (retired code) -> Silte Gurage */ +/*{"xub", HB_TAG('X','U','B',' ')},*/ /* Betta Kurumba -> Bette Kuruma */ +/*{"xuj", HB_TAG('X','U','J',' ')},*/ /* Jennu Kurumba -> Jennu Kuruma */ {"xup", HB_TAG('A','T','H',' ')}, /* Upper Umpqua -> Athapaskan */ {"xwo", HB_TAG('T','O','D',' ')}, /* Written Oirat -> Todo */ {"yaj", HB_TAG('B','A','D','0')}, /* Banda-Yangere -> Banda */ @@ -1543,13 +1561,16 @@ static const LangTag ot_languages[] = { {"ybb", HB_TAG('B','M','L',' ')}, /* Yemba -> Bamileke */ {"ybd", HB_TAG('A','R','K',' ')}, /* Yangbye (retired code) -> Rakhine */ {"ydd", HB_TAG('J','I','I',' ')}, /* Eastern Yiddish -> Yiddish */ +/*{"ygp", HB_TAG('Y','G','P',' ')},*/ /* Gepo */ {"yi", HB_TAG('J','I','I',' ')}, /* Yiddish [macrolanguage] */ {"yih", HB_TAG('J','I','I',' ')}, /* Western Yiddish -> Yiddish */ {"yim", HB_TAG_NONE }, /* Yimchungru Naga != Yi Modern */ +/*{"yna", HB_TAG('Y','N','A',' ')},*/ /* Aluo */ {"yo", HB_TAG('Y','B','A',' ')}, /* Yoruba */ {"yos", HB_TAG('Q','I','N',' ')}, /* Yos (retired code) -> Chin */ {"yua", HB_TAG('M','Y','N',' ')}, /* Yucateco -> Mayan */ {"yue", HB_TAG('Z','H','H',' ')}, /* Yue Chinese -> Chinese, Traditional, Hong Kong SAR */ +/*{"ywq", HB_TAG('Y','W','Q',' ')},*/ /* Wuding-Luquan Yi */ {"za", HB_TAG('Z','H','A',' ')}, /* Zhuang [macrolanguage] */ {"zch", HB_TAG('Z','H','A',' ')}, /* Central Hongshuihe Zhuang -> Zhuang */ {"zdj", HB_TAG('C','M','R',' ')}, /* Ngazidja Comorian -> Comorian */ diff --git a/thirdparty/harfbuzz/src/hb-ot-tag.cc b/thirdparty/harfbuzz/src/hb-ot-tag.cc index fc145a41f7..1837063af8 100644 --- a/thirdparty/harfbuzz/src/hb-ot-tag.cc +++ b/thirdparty/harfbuzz/src/hb-ot-tag.cc @@ -522,7 +522,7 @@ hb_ot_tags_to_script_and_language (hb_tag_t script_tag, unsigned char *buf; const char *lang_str = hb_language_to_string (*language); size_t len = strlen (lang_str); - buf = (unsigned char *) malloc (len + 16); + buf = (unsigned char *) hb_malloc (len + 16); if (unlikely (!buf)) { *language = nullptr; @@ -544,7 +544,7 @@ hb_ot_tags_to_script_and_language (hb_tag_t script_tag, for (shift = 28; shift >= 0; shift -= 4) buf[len++] = TOHEX (script_tag >> shift); *language = hb_language_from_string ((char *) buf, len); - free (buf); + hb_free (buf); } } } diff --git a/thirdparty/harfbuzz/src/hb-ot-var-avar-table.hh b/thirdparty/harfbuzz/src/hb-ot-var-avar-table.hh index 29219adb0a..65f26c1d22 100644 --- a/thirdparty/harfbuzz/src/hb-ot-var-avar-table.hh +++ b/thirdparty/harfbuzz/src/hb-ot-var-avar-table.hh @@ -58,7 +58,7 @@ struct AxisValueMap DEFINE_SIZE_STATIC (4); }; -struct SegmentMaps : ArrayOf<AxisValueMap> +struct SegmentMaps : Array16Of<AxisValueMap> { int map (int value, unsigned int from_offset = 0, unsigned int to_offset = 1) const { diff --git a/thirdparty/harfbuzz/src/hb-ot-var-fvar-table.hh b/thirdparty/harfbuzz/src/hb-ot-var-fvar-table.hh index f9e933fb2b..05f289db26 100644 --- a/thirdparty/harfbuzz/src/hb-ot-var-fvar-table.hh +++ b/thirdparty/harfbuzz/src/hb-ot-var-fvar-table.hh @@ -142,11 +142,13 @@ struct AxisRecord max = hb_max (default_, maxValue / 65536.f); } - protected: + public: Tag axisTag; /* Tag identifying the design variation for the axis. */ + protected: HBFixed minValue; /* The minimum coordinate value for the axis. */ HBFixed defaultValue; /* The default coordinate value for the axis. */ HBFixed maxValue; /* The maximum coordinate value for the axis. */ + public: HBUINT16 flags; /* Axis flags. */ NameID axisNameID; /* The name ID for entries in the 'name' table that * provide a display name for this axis. */ @@ -214,7 +216,6 @@ struct fvar return axes.lfind (tag, axis_index) && (axes[*axis_index].get_axis_deprecated (info), true); } #endif - bool find_axis_info (hb_tag_t tag, hb_ot_var_axis_info_t *info) const { @@ -289,7 +290,7 @@ struct fvar ; } - protected: + public: hb_array_t<const AxisRecord> get_axes () const { return hb_array (&(this+firstAxis), axisCount); } @@ -303,7 +304,7 @@ struct fvar protected: FixedVersion<>version; /* Version of the fvar table * initially set to 0x00010000u */ - OffsetTo<AxisRecord> + Offset16To<AxisRecord> firstAxis; /* Offset in bytes from the beginning of the table * to the start of the AxisRecord array. */ HBUINT16 reserved; /* This field is permanently reserved. Set to 2. */ diff --git a/thirdparty/harfbuzz/src/hb-ot-var-gvar-table.hh b/thirdparty/harfbuzz/src/hb-ot-var-gvar-table.hh index 7e4eaaad95..49b5532d40 100644 --- a/thirdparty/harfbuzz/src/hb-ot-var-gvar-table.hh +++ b/thirdparty/harfbuzz/src/hb-ot-var-gvar-table.hh @@ -374,7 +374,7 @@ struct GlyphVariationData * low 12 bits are the number of tuple variation tables * for this glyph. The number of tuple variation tables * can be any number between 1 and 4095. */ - OffsetTo<HBUINT8> + Offset16To<HBUINT8> data; /* Offset from the start of the GlyphVariationData table * to the serialized data. */ /* TupleVariationHeader tupleVariationHeaders[] *//* Array of tuple variation headers. */ @@ -419,7 +419,9 @@ struct gvar out->glyphCount = num_glyphs; unsigned int subset_data_size = 0; - for (hb_codepoint_t gid = 0; gid < num_glyphs; gid++) + for (hb_codepoint_t gid = (c->plan->flags & HB_SUBSET_FLAGS_NOTDEF_OUTLINE) ? 0 : 1; + gid < num_glyphs; + gid++) { hb_codepoint_t old_gid; if (!c->plan->old_gid_for_new_gid (gid, &old_gid)) continue; @@ -449,7 +451,9 @@ struct gvar out->dataZ = subset_data - (char *) out; unsigned int glyph_offset = 0; - for (hb_codepoint_t gid = 0; gid < num_glyphs; gid++) + for (hb_codepoint_t gid = (c->plan->flags & HB_SUBSET_FLAGS_NOTDEF_OUTLINE) ? 0 : 1; + gid < num_glyphs; + gid++) { hb_codepoint_t old_gid; hb_bytes_t var_data_bytes = c->plan->old_gid_for_new_gid (gid, &old_gid) @@ -676,7 +680,7 @@ no_more_gaps: * can be referenced within glyph variation data tables for * multiple glyphs, as opposed to other tuple records stored * directly within a glyph variation data table. */ - LNNOffsetTo<UnsizedArrayOf<F2DOT14>> + NNOffset32To<UnsizedArrayOf<F2DOT14>> sharedTuples; /* Offset from the start of this table to the shared tuple records. * Array of tuple records shared across all glyph variation data tables. */ HBUINT16 glyphCount; /* The number of glyphs in this font. This must match the number of @@ -684,7 +688,7 @@ no_more_gaps: HBUINT16 flags; /* Bit-field that gives the format of the offset array that follows. * If bit 0 is clear, the offsets are uint16; if bit 0 is set, the * offsets are uint32. */ - LOffsetTo<GlyphVariationData> + Offset32To<GlyphVariationData> dataZ; /* Offset from the start of this table to the array of * GlyphVariationData tables. */ UnsizedArrayOf<HBUINT8> diff --git a/thirdparty/harfbuzz/src/hb-ot-var-hvar-table.hh b/thirdparty/harfbuzz/src/hb-ot-var-hvar-table.hh index fdcc88d674..72217e7f29 100644 --- a/thirdparty/harfbuzz/src/hb-ot-var-hvar-table.hh +++ b/thirdparty/harfbuzz/src/hb-ot-var-hvar-table.hh @@ -49,12 +49,12 @@ struct DeltaSetIndexMap { unsigned int width = plan.get_width (); unsigned int inner_bit_count = plan.get_inner_bit_count (); - const hb_array_t<const unsigned int> output_map = plan.get_output_map (); + const hb_array_t<const uint32_t> output_map = plan.get_output_map (); TRACE_SERIALIZE (this); if (unlikely (output_map.length && ((((inner_bit_count-1)&~0xF)!=0) || (((width-1)&~0x3)!=0)))) return_trace (false); - if (unlikely (!c->extend_min (*this))) return_trace (false); + if (unlikely (!c->extend_min (this))) return_trace (false); format = ((width-1)<<4)|(inner_bit_count-1); mapCount = output_map.length; @@ -76,7 +76,7 @@ struct DeltaSetIndexMap return_trace (true); } - unsigned int map (unsigned int v) const /* Returns 16.16 outer.inner. */ + uint32_t map (unsigned int v) const /* Returns 16.16 outer.inner. */ { /* If count is zero, pass value unchanged. This takes * care of direct mapping for advance map. */ @@ -217,7 +217,7 @@ struct index_map_subset_plan_t hb_codepoint_t old_gid; if (plan->old_gid_for_new_gid (gid, &old_gid)) { - unsigned int v = input_map->map (old_gid); + uint32_t v = input_map->map (old_gid); unsigned int outer = v >> 16; output_map[gid] = (outer_map[outer] << 16) | (inner_maps[outer][v & 0xFFFF]); } @@ -234,14 +234,14 @@ struct index_map_subset_plan_t { return (map_count? (DeltaSetIndexMap::min_size + get_width () * map_count): 0); } bool is_identity () const { return get_output_map ().length == 0; } - hb_array_t<const unsigned int> get_output_map () const { return output_map.as_array (); } + hb_array_t<const uint32_t> get_output_map () const { return output_map.as_array (); } protected: unsigned int map_count; hb_vector_t<unsigned int> max_inners; unsigned int outer_bit_count; unsigned int inner_bit_count; - hb_vector_t<unsigned int> output_map; + hb_vector_t<uint32_t> output_map; }; struct hvarvvar_subset_plan_t @@ -272,7 +272,7 @@ struct hvarvvar_subset_plan_t index_map_plans[0].init (*index_maps[0], outer_map, inner_sets, plan); if (index_maps[0] == &Null (DeltaSetIndexMap)) { - retain_adv_map = plan->retain_gids; + retain_adv_map = plan->flags & HB_SUBSET_FLAGS_RETAIN_GIDS; outer_map.add (0); for (hb_codepoint_t gid = 0; gid < plan->num_output_glyphs (); gid++) { @@ -367,15 +367,15 @@ struct HVARVVAR TRACE_SERIALIZE (this); if (im_plans[index_map_subset_plan_t::ADV_INDEX].is_identity ()) advMap = 0; - else if (unlikely (!advMap.serialize (c, this).serialize (c, im_plans[index_map_subset_plan_t::ADV_INDEX]))) + else if (unlikely (!advMap.serialize_serialize (c, im_plans[index_map_subset_plan_t::ADV_INDEX]))) return_trace (false); if (im_plans[index_map_subset_plan_t::LSB_INDEX].is_identity ()) lsbMap = 0; - else if (unlikely (!lsbMap.serialize (c, this).serialize (c, im_plans[index_map_subset_plan_t::LSB_INDEX]))) + else if (unlikely (!lsbMap.serialize_serialize (c, im_plans[index_map_subset_plan_t::LSB_INDEX]))) return_trace (false); if (im_plans[index_map_subset_plan_t::RSB_INDEX].is_identity ()) rsbMap = 0; - else if (unlikely (!rsbMap.serialize (c, this).serialize (c, im_plans[index_map_subset_plan_t::RSB_INDEX]))) + else if (unlikely (!rsbMap.serialize_serialize (c, im_plans[index_map_subset_plan_t::RSB_INDEX]))) return_trace (false); return_trace (true); @@ -398,8 +398,10 @@ struct HVARVVAR out->version.major = 1; out->version.minor = 0; - if (unlikely (!out->varStore.serialize (c->serializer, out) - .serialize (c->serializer, hvar_plan.var_store, hvar_plan.inner_maps.as_array ()))) + if (unlikely (!out->varStore + .serialize_serialize (c->serializer, + hvar_plan.var_store, + hvar_plan.inner_maps.as_array ()))) return_trace (false); return_trace (out->T::serialize_index_maps (c->serializer, @@ -408,7 +410,7 @@ struct HVARVVAR float get_advance_var (hb_codepoint_t glyph, hb_font_t *font) const { - unsigned int varidx = (this+advMap).map (glyph); + uint32_t varidx = (this+advMap).map (glyph); return (this+varStore).get_delta (varidx, font->coords, font->num_coords); } @@ -416,7 +418,7 @@ struct HVARVVAR const int *coords, unsigned int coord_count) const { if (!has_side_bearing_deltas ()) return 0.f; - unsigned int varidx = (this+lsbMap).map (glyph); + uint32_t varidx = (this+lsbMap).map (glyph); return (this+varStore).get_delta (varidx, coords, coord_count); } @@ -425,13 +427,13 @@ struct HVARVVAR protected: FixedVersion<>version; /* Version of the metrics variation table * initially set to 0x00010000u */ - LOffsetTo<VariationStore> + Offset32To<VariationStore> varStore; /* Offset to item variation store table. */ - LOffsetTo<DeltaSetIndexMap> + Offset32To<DeltaSetIndexMap> advMap; /* Offset to advance var-idx mapping. */ - LOffsetTo<DeltaSetIndexMap> + Offset32To<DeltaSetIndexMap> lsbMap; /* Offset to lsb/tsb var-idx mapping. */ - LOffsetTo<DeltaSetIndexMap> + Offset32To<DeltaSetIndexMap> rsbMap; /* Offset to rsb/bsb var-idx mapping. */ public: @@ -466,7 +468,7 @@ struct VVAR : HVARVVAR { return_trace (false); if (!im_plans[index_map_subset_plan_t::VORG_INDEX].get_map_count ()) vorgMap = 0; - else if (unlikely (!vorgMap.serialize (c, this).serialize (c, im_plans[index_map_subset_plan_t::VORG_INDEX]))) + else if (unlikely (!vorgMap.serialize_serialize (c, im_plans[index_map_subset_plan_t::VORG_INDEX]))) return_trace (false); return_trace (true); @@ -475,7 +477,7 @@ struct VVAR : HVARVVAR { bool subset (hb_subset_context_t *c) const { return HVARVVAR::_subset<VVAR> (c); } protected: - LOffsetTo<DeltaSetIndexMap> + Offset32To<DeltaSetIndexMap> vorgMap; /* Offset to vertical-origin var-idx mapping. */ public: diff --git a/thirdparty/harfbuzz/src/hb-ot-var-mvar-table.hh b/thirdparty/harfbuzz/src/hb-ot-var-mvar-table.hh index 1b7fad9cec..208db46741 100644 --- a/thirdparty/harfbuzz/src/hb-ot-var-mvar-table.hh +++ b/thirdparty/harfbuzz/src/hb-ot-var-mvar-table.hh @@ -103,7 +103,7 @@ protected: HBUINT16 valueRecordSize;/* The size in bytes of each value record — * must be greater than zero. */ HBUINT16 valueRecordCount;/* The number of value records — may be zero. */ - OffsetTo<VariationStore> + Offset16To<VariationStore> varStore; /* Offset to item variation store table. */ UnsizedArrayOf<HBUINT8> valuesZ; /* Array of value records. The records must be diff --git a/thirdparty/harfbuzz/src/hb-ot-vorg-table.hh b/thirdparty/harfbuzz/src/hb-ot-vorg-table.hh index c6803200f9..efa7737d6f 100644 --- a/thirdparty/harfbuzz/src/hb-ot-vorg-table.hh +++ b/thirdparty/harfbuzz/src/hb-ot-vorg-table.hh @@ -125,7 +125,7 @@ struct VORG FixedVersion<>version; /* Version of VORG table. Set to 0x00010000u. */ FWORD defaultVertOriginY; /* The default vertical origin. */ - SortedArrayOf<VertOriginMetric> + SortedArray16Of<VertOriginMetric> vertYOrigins; /* The array of vertical origins. */ public: diff --git a/thirdparty/harfbuzz/src/hb-pool.hh b/thirdparty/harfbuzz/src/hb-pool.hh index dcf0faf2a9..dcf8f6627d 100644 --- a/thirdparty/harfbuzz/src/hb-pool.hh +++ b/thirdparty/harfbuzz/src/hb-pool.hh @@ -41,7 +41,7 @@ struct hb_pool_t { next = nullptr; - for (chunk_t *_ : chunks) ::free (_); + for (chunk_t *_ : chunks) hb_free (_); chunks.fini (); } @@ -51,7 +51,7 @@ struct hb_pool_t if (unlikely (!next)) { if (unlikely (!chunks.alloc (chunks.length + 1))) return nullptr; - chunk_t *chunk = (chunk_t *) calloc (1, sizeof (chunk_t)); + chunk_t *chunk = (chunk_t *) hb_calloc (1, sizeof (chunk_t)); if (unlikely (!chunk)) return nullptr; chunks.push (chunk); next = chunk->thread (); @@ -65,7 +65,7 @@ struct hb_pool_t return obj; } - void free (T* obj) + void release (T* obj) { * (T**) obj = next; next = obj; diff --git a/thirdparty/harfbuzz/src/hb-priority-queue.hh b/thirdparty/harfbuzz/src/hb-priority-queue.hh new file mode 100644 index 0000000000..7d799ae906 --- /dev/null +++ b/thirdparty/harfbuzz/src/hb-priority-queue.hh @@ -0,0 +1,151 @@ +/* + * Copyright © 2020 Google, Inc. + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + * Google Author(s): Garret Rieger + */ + +#ifndef HB_PRIORITY_QUEUE_HH +#define HB_PRIORITY_QUEUE_HH + +#include "hb.hh" +#include "hb-vector.hh" + +/* + * hb_priority_queue_t + * + * Priority queue implemented as a binary heap. Supports extract minimum + * and insert operations. + */ +struct hb_priority_queue_t +{ + HB_DELETE_COPY_ASSIGN (hb_priority_queue_t); + hb_priority_queue_t () { init (); } + ~hb_priority_queue_t () { fini (); } + + private: + typedef hb_pair_t<int64_t, unsigned> item_t; + hb_vector_t<item_t> heap; + + public: + void init () { heap.init (); } + + void fini () { heap.fini (); } + + void reset () { heap.resize (0); } + + bool in_error () const { return heap.in_error (); } + + void insert (int64_t priority, unsigned value) + { + heap.push (item_t (priority, value)); + bubble_up (heap.length - 1); + } + + item_t pop_minimum () + { + item_t result = heap[0]; + + heap[0] = heap[heap.length - 1]; + heap.shrink (heap.length - 1); + bubble_down (0); + + return result; + } + + const item_t& minimum () + { + return heap[0]; + } + + bool is_empty () const { return heap.length == 0; } + explicit operator bool () const { return !is_empty (); } + unsigned int get_population () const { return heap.length; } + + /* Sink interface. */ + hb_priority_queue_t& operator << (item_t item) + { insert (item.first, item.second); return *this; } + + private: + + static constexpr unsigned parent (unsigned index) + { + return (index - 1) / 2; + } + + static constexpr unsigned left_child (unsigned index) + { + return 2 * index + 1; + } + + static constexpr unsigned right_child (unsigned index) + { + return 2 * index + 2; + } + + void bubble_down (unsigned index) + { + unsigned left = left_child (index); + unsigned right = right_child (index); + + bool has_left = left < heap.length; + if (!has_left) + // If there's no left, then there's also no right. + return; + + bool has_right = right < heap.length; + if (heap[index].first <= heap[left].first + && (!has_right || heap[index].first <= heap[right].first)) + return; + + if (!has_right || heap[left].first < heap[right].first) + { + swap (index, left); + bubble_down (left); + return; + } + + swap (index, right); + bubble_down (right); + } + + void bubble_up (unsigned index) + { + if (index == 0) return; + + unsigned parent_index = parent (index); + if (heap[parent_index].first <= heap[index].first) + return; + + swap (index, parent_index); + bubble_up (parent_index); + } + + void swap (unsigned a, unsigned b) + { + item_t temp = heap[a]; + heap[a] = heap[b]; + heap[b] = temp; + } +}; + +#endif /* HB_PRIORITY_QUEUE_HH */ diff --git a/thirdparty/harfbuzz/src/hb-repacker.hh b/thirdparty/harfbuzz/src/hb-repacker.hh new file mode 100644 index 0000000000..b02128b5c4 --- /dev/null +++ b/thirdparty/harfbuzz/src/hb-repacker.hh @@ -0,0 +1,769 @@ +/* + * Copyright © 2020 Google, Inc. + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + * Google Author(s): Garret Rieger + */ + +#ifndef HB_REPACKER_HH +#define HB_REPACKER_HH + +#include "hb-open-type.hh" +#include "hb-map.hh" +#include "hb-priority-queue.hh" +#include "hb-serialize.hh" +#include "hb-vector.hh" + + +struct graph_t +{ + struct vertex_t + { + vertex_t () : + distance (0), + incoming_edges (0), + start (0), + end (0), + priority(0) {} + + void fini () { obj.fini (); } + + hb_serialize_context_t::object_t obj; + int64_t distance; + unsigned incoming_edges; + unsigned start; + unsigned end; + unsigned priority; + + bool is_shared () const + { + return incoming_edges > 1; + } + + bool is_leaf () const + { + return !obj.links.length; + } + + void raise_priority () + { + priority++; + } + + int64_t modified_distance (unsigned order) const + { + // TODO(garretrieger): once priority is high enough, should try + // setting distance = 0 which will force to sort immediately after + // it's parent where possible. + + int64_t modified_distance = + hb_min (hb_max(distance + distance_modifier (), 0), 0x7FFFFFFFFF); + return (modified_distance << 24) | (0x00FFFFFF & order); + } + + int64_t distance_modifier () const + { + if (!priority) return 0; + int64_t table_size = obj.tail - obj.head; + return -(table_size - table_size / (1 << hb_min(priority, 16u))); + } + }; + + struct overflow_record_t + { + unsigned parent; + const hb_serialize_context_t::object_t::link_t* link; + }; + + struct clone_buffer_t + { + clone_buffer_t () : head (nullptr), tail (nullptr) {} + + bool copy (const hb_serialize_context_t::object_t& object) + { + fini (); + unsigned size = object.tail - object.head; + head = (char*) hb_malloc (size); + if (!head) return false; + + memcpy (head, object.head, size); + tail = head + size; + return true; + } + + char* head; + char* tail; + + void fini () + { + if (!head) return; + hb_free (head); + head = nullptr; + } + }; + + /* + * A topological sorting of an object graph. Ordered + * in reverse serialization order (first object in the + * serialization is at the end of the list). This matches + * the 'packed' object stack used internally in the + * serializer + */ + graph_t (const hb_vector_t<hb_serialize_context_t::object_t *>& objects) + : edge_count_invalid (true), + distance_invalid (true), + positions_invalid (true), + successful (true) + { + bool removed_nil = false; + for (unsigned i = 0; i < objects.length; i++) + { + // TODO(grieger): check all links point to valid objects. + + // If this graph came from a serialization buffer object 0 is the + // nil object. We don't need it for our purposes here so drop it. + if (i == 0 && !objects[i]) + { + removed_nil = true; + continue; + } + + vertex_t* v = vertices_.push (); + if (check_success (!vertices_.in_error ())) + v->obj = *objects[i]; + if (!removed_nil) continue; + for (unsigned i = 0; i < v->obj.links.length; i++) + // Fix indices to account for removed nil object. + v->obj.links[i].objidx--; + } + } + + ~graph_t () + { + vertices_.fini_deep (); + clone_buffers_.fini_deep (); + } + + bool in_error () const + { + return !successful || vertices_.in_error () || clone_buffers_.in_error (); + } + + const vertex_t& root () const + { + return vertices_[root_idx ()]; + } + + unsigned root_idx () const + { + // Object graphs are in reverse order, the first object is at the end + // of the vector. Since the graph is topologically sorted it's safe to + // assume the first object has no incoming edges. + return vertices_.length - 1; + } + + const hb_serialize_context_t::object_t& object(unsigned i) const + { + return vertices_[i].obj; + } + + /* + * serialize graph into the provided serialization buffer. + */ + void serialize (hb_serialize_context_t* c) const + { + c->start_serialize<void> (); + for (unsigned i = 0; i < vertices_.length; i++) { + c->push (); + + size_t size = vertices_[i].obj.tail - vertices_[i].obj.head; + char* start = c->allocate_size <char> (size); + if (!start) return; + + memcpy (start, vertices_[i].obj.head, size); + + for (const auto& link : vertices_[i].obj.links) + serialize_link (link, start, c); + + // All duplications are already encoded in the graph, so don't + // enable sharing during packing. + c->pop_pack (false); + } + c->end_serialize (); + } + + /* + * Generates a new topological sorting of graph using Kahn's + * algorithm: https://en.wikipedia.org/wiki/Topological_sorting#Algorithms + */ + void sort_kahn () + { + positions_invalid = true; + + if (vertices_.length <= 1) { + // Graph of 1 or less doesn't need sorting. + return; + } + + hb_vector_t<unsigned> queue; + hb_vector_t<vertex_t> sorted_graph; + hb_vector_t<unsigned> id_map; + if (unlikely (!check_success (id_map.resize (vertices_.length)))) return; + + hb_vector_t<unsigned> removed_edges; + if (unlikely (!check_success (removed_edges.resize (vertices_.length)))) return; + update_incoming_edge_count (); + + queue.push (root_idx ()); + int new_id = vertices_.length - 1; + + while (!queue.in_error () && queue.length) + { + unsigned next_id = queue[0]; + queue.remove (0); + + vertex_t& next = vertices_[next_id]; + sorted_graph.push (next); + id_map[next_id] = new_id--; + + for (const auto& link : next.obj.links) { + removed_edges[link.objidx]++; + if (!(vertices_[link.objidx].incoming_edges - removed_edges[link.objidx])) + queue.push (link.objidx); + } + } + + check_success (!queue.in_error ()); + check_success (!sorted_graph.in_error ()); + if (!check_success (new_id == -1)) + DEBUG_MSG (SUBSET_REPACK, nullptr, "Graph is not fully connected."); + + remap_obj_indices (id_map, &sorted_graph); + + sorted_graph.as_array ().reverse (); + + vertices_.fini_deep (); + vertices_ = sorted_graph; + sorted_graph.fini_deep (); + } + + /* + * Generates a new topological sorting of graph ordered by the shortest + * distance to each node. + */ + void sort_shortest_distance () + { + positions_invalid = true; + + if (vertices_.length <= 1) { + // Graph of 1 or less doesn't need sorting. + return; + } + + update_distances (); + + hb_priority_queue_t queue; + hb_vector_t<vertex_t> sorted_graph; + hb_vector_t<unsigned> id_map; + if (unlikely (!check_success (id_map.resize (vertices_.length)))) return; + + hb_vector_t<unsigned> removed_edges; + if (unlikely (!check_success (removed_edges.resize (vertices_.length)))) return; + update_incoming_edge_count (); + + queue.insert (root ().modified_distance (0), root_idx ()); + int new_id = root_idx (); + unsigned order = 1; + while (!queue.in_error () && !queue.is_empty ()) + { + unsigned next_id = queue.pop_minimum().second; + + vertex_t& next = vertices_[next_id]; + sorted_graph.push (next); + id_map[next_id] = new_id--; + + for (const auto& link : next.obj.links) { + removed_edges[link.objidx]++; + if (!(vertices_[link.objidx].incoming_edges - removed_edges[link.objidx])) + // Add the order that the links were encountered to the priority. + // This ensures that ties between priorities objects are broken in a consistent + // way. More specifically this is set up so that if a set of objects have the same + // distance they'll be added to the topological order in the order that they are + // referenced from the parent object. + queue.insert (vertices_[link.objidx].modified_distance (order++), + link.objidx); + } + } + + check_success (!queue.in_error ()); + check_success (!sorted_graph.in_error ()); + if (!check_success (new_id == -1)) + DEBUG_MSG (SUBSET_REPACK, nullptr, "Graph is not fully connected."); + + remap_obj_indices (id_map, &sorted_graph); + + sorted_graph.as_array ().reverse (); + + vertices_.fini_deep (); + vertices_ = sorted_graph; + sorted_graph.fini_deep (); + } + + /* + * Creates a copy of child and re-assigns the link from + * parent to the clone. The copy is a shallow copy, objects + * linked from child are not duplicated. + */ + void duplicate (unsigned parent_idx, unsigned child_idx) + { + DEBUG_MSG (SUBSET_REPACK, nullptr, " Duplicating %d => %d", + parent_idx, child_idx); + + positions_invalid = true; + + auto* clone = vertices_.push (); + auto& child = vertices_[child_idx]; + clone_buffer_t* buffer = clone_buffers_.push (); + if (vertices_.in_error () + || clone_buffers_.in_error () + || !check_success (buffer->copy (child.obj))) { + return; + } + + clone->obj.head = buffer->head; + clone->obj.tail = buffer->tail; + clone->distance = child.distance; + + for (const auto& l : child.obj.links) + clone->obj.links.push (l); + + check_success (!clone->obj.links.in_error ()); + + auto& parent = vertices_[parent_idx]; + unsigned clone_idx = vertices_.length - 2; + for (unsigned i = 0; i < parent.obj.links.length; i++) + { + auto& l = parent.obj.links[i]; + if (l.objidx == child_idx) + { + l.objidx = clone_idx; + clone->incoming_edges++; + child.incoming_edges--; + } + } + + // The last object is the root of the graph, so swap back the root to the end. + // The root's obj idx does change, however since it's root nothing else refers to it. + // all other obj idx's will be unaffected. + vertex_t root = vertices_[vertices_.length - 2]; + vertices_[vertices_.length - 2] = *clone; + vertices_[vertices_.length - 1] = root; + } + + /* + * Raises the sorting priority of all children. + */ + void raise_childrens_priority (unsigned parent_idx) + { + DEBUG_MSG (SUBSET_REPACK, nullptr, " Raising priority of all children of %d", + parent_idx); + // This operation doesn't change ordering until a sort is run, so no need + // to invalidate positions. It does not change graph structure so no need + // to update distances or edge counts. + auto& parent = vertices_[parent_idx].obj; + for (unsigned i = 0; i < parent.links.length; i++) + vertices_[parent.links[i].objidx].raise_priority (); + } + + /* + * Will any offsets overflow on graph when it's serialized? + */ + bool will_overflow (hb_vector_t<overflow_record_t>* overflows = nullptr) + { + if (overflows) overflows->resize (0); + update_positions (); + + for (int parent_idx = vertices_.length - 1; parent_idx >= 0; parent_idx--) + { + for (const auto& link : vertices_[parent_idx].obj.links) + { + int64_t offset = compute_offset (parent_idx, link); + if (is_valid_offset (offset, link)) + continue; + + if (!overflows) return true; + + overflow_record_t r; + r.parent = parent_idx; + r.link = &link; + overflows->push (r); + } + } + + if (!overflows) return false; + return overflows->length; + } + + void print_overflows (const hb_vector_t<overflow_record_t>& overflows) + { + if (!DEBUG_ENABLED(SUBSET_REPACK)) return; + + update_incoming_edge_count (); + for (const auto& o : overflows) + { + const auto& child = vertices_[o.link->objidx]; + DEBUG_MSG (SUBSET_REPACK, nullptr, " overflow from %d => %d (%d incoming , %d outgoing)", + o.parent, + o.link->objidx, + child.incoming_edges, + child.obj.links.length); + } + } + + void err_other_error () { this->successful = false; } + + private: + + bool check_success (bool success) + { return this->successful && (success || (err_other_error (), false)); } + + /* + * Creates a map from objid to # of incoming edges. + */ + void update_incoming_edge_count () + { + if (!edge_count_invalid) return; + + for (unsigned i = 0; i < vertices_.length; i++) + vertices_[i].incoming_edges = 0; + + for (const vertex_t& v : vertices_) + { + for (auto& l : v.obj.links) + { + vertices_[l.objidx].incoming_edges++; + } + } + + edge_count_invalid = false; + } + + /* + * compute the serialized start and end positions for each vertex. + */ + void update_positions () + { + if (!positions_invalid) return; + + unsigned current_pos = 0; + for (int i = root_idx (); i >= 0; i--) + { + auto& v = vertices_[i]; + v.start = current_pos; + current_pos += v.obj.tail - v.obj.head; + v.end = current_pos; + } + + positions_invalid = false; + } + + /* + * Finds the distance to each object in the graph + * from the initial node. + */ + void update_distances () + { + if (!distance_invalid) return; + + // Uses Dijkstra's algorithm to find all of the shortest distances. + // https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm + // + // Implementation Note: + // Since our priority queue doesn't support fast priority decreases + // we instead just add new entries into the queue when a priority changes. + // Redundant ones are filtered out later on by the visited set. + // According to https://www3.cs.stonybrook.edu/~rezaul/papers/TR-07-54.pdf + // for practical performance this is faster then using a more advanced queue + // (such as a fibonaacci queue) with a fast decrease priority. + for (unsigned i = 0; i < vertices_.length; i++) + { + if (i == vertices_.length - 1) + vertices_[i].distance = 0; + else + vertices_[i].distance = hb_int_max (int64_t); + } + + hb_priority_queue_t queue; + queue.insert (0, vertices_.length - 1); + + hb_set_t visited; + + while (!queue.in_error () && !queue.is_empty ()) + { + unsigned next_idx = queue.pop_minimum ().second; + if (visited.has (next_idx)) continue; + const auto& next = vertices_[next_idx]; + int64_t next_distance = vertices_[next_idx].distance; + visited.add (next_idx); + + for (const auto& link : next.obj.links) + { + if (visited.has (link.objidx)) continue; + + const auto& child = vertices_[link.objidx].obj; + int64_t child_weight = child.tail - child.head + + ((int64_t) 1 << (link.width * 8)); + int64_t child_distance = next_distance + child_weight; + + if (child_distance < vertices_[link.objidx].distance) + { + vertices_[link.objidx].distance = child_distance; + queue.insert (child_distance, link.objidx); + } + } + } + + check_success (!queue.in_error ()); + if (!check_success (queue.is_empty ())) + { + DEBUG_MSG (SUBSET_REPACK, nullptr, "Graph is not fully connected."); + return; + } + + distance_invalid = false; + } + + int64_t compute_offset ( + unsigned parent_idx, + const hb_serialize_context_t::object_t::link_t& link) const + { + const auto& parent = vertices_[parent_idx]; + const auto& child = vertices_[link.objidx]; + int64_t offset = 0; + switch ((hb_serialize_context_t::whence_t) link.whence) { + case hb_serialize_context_t::whence_t::Head: + offset = child.start - parent.start; break; + case hb_serialize_context_t::whence_t::Tail: + offset = child.start - parent.end; break; + case hb_serialize_context_t::whence_t::Absolute: + offset = child.start; break; + } + + assert (offset >= link.bias); + offset -= link.bias; + return offset; + } + + bool is_valid_offset (int64_t offset, + const hb_serialize_context_t::object_t::link_t& link) const + { + if (link.is_signed) + { + if (link.width == 4) + return offset >= -((int64_t) 1 << 31) && offset < ((int64_t) 1 << 31); + else + return offset >= -(1 << 15) && offset < (1 << 15); + } + else + { + if (link.width == 4) + return offset >= 0 && offset < ((int64_t) 1 << 32); + else if (link.width == 3) + return offset >= 0 && offset < ((int32_t) 1 << 24); + else + return offset >= 0 && offset < (1 << 16); + } + } + + /* + * Updates all objidx's in all links using the provided mapping. + */ + void remap_obj_indices (const hb_vector_t<unsigned>& id_map, + hb_vector_t<vertex_t>* sorted_graph) const + { + for (unsigned i = 0; i < sorted_graph->length; i++) + { + for (unsigned j = 0; j < (*sorted_graph)[i].obj.links.length; j++) + { + auto& link = (*sorted_graph)[i].obj.links[j]; + link.objidx = id_map[link.objidx]; + } + } + } + + template <typename O> void + serialize_link_of_type (const hb_serialize_context_t::object_t::link_t& link, + char* head, + hb_serialize_context_t* c) const + { + OT::Offset<O>* offset = reinterpret_cast<OT::Offset<O>*> (head + link.position); + *offset = 0; + c->add_link (*offset, + // serializer has an extra nil object at the start of the + // object array. So all id's are +1 of what our id's are. + link.objidx + 1, + (hb_serialize_context_t::whence_t) link.whence, + link.bias); + } + + void serialize_link (const hb_serialize_context_t::object_t::link_t& link, + char* head, + hb_serialize_context_t* c) const + { + switch (link.width) + { + case 4: + if (link.is_signed) + { + serialize_link_of_type<OT::HBINT32> (link, head, c); + } else { + serialize_link_of_type<OT::HBUINT32> (link, head, c); + } + return; + case 2: + if (link.is_signed) + { + serialize_link_of_type<OT::HBINT16> (link, head, c); + } else { + serialize_link_of_type<OT::HBUINT16> (link, head, c); + } + return; + case 3: + serialize_link_of_type<OT::HBUINT24> (link, head, c); + return; + default: + // Unexpected link width. + assert (0); + } + } + + public: + // TODO(garretrieger): make private, will need to move most of offset overflow code into graph. + hb_vector_t<vertex_t> vertices_; + private: + hb_vector_t<clone_buffer_t> clone_buffers_; + bool edge_count_invalid; + bool distance_invalid; + bool positions_invalid; + bool successful; +}; + + +/* + * Attempts to modify the topological sorting of the provided object graph to + * eliminate offset overflows in the links between objects of the graph. If a + * non-overflowing ordering is found the updated graph is serialized it into the + * provided serialization context. + * + * If necessary the structure of the graph may be modified in ways that do not + * affect the functionality of the graph. For example shared objects may be + * duplicated. + */ +inline void +hb_resolve_overflows (const hb_vector_t<hb_serialize_context_t::object_t *>& packed, + hb_serialize_context_t* c) { + // Kahn sort is ~twice as fast as shortest distance sort and works for many fonts + // so try it first to save time. + graph_t sorted_graph (packed); + sorted_graph.sort_kahn (); + if (!sorted_graph.will_overflow ()) + { + sorted_graph.serialize (c); + return; + } + + sorted_graph.sort_shortest_distance (); + + unsigned round = 0; + hb_vector_t<graph_t::overflow_record_t> overflows; + // TODO(garretrieger): select a good limit for max rounds. + while (!sorted_graph.in_error () + && sorted_graph.will_overflow (&overflows) + && round++ < 10) { + DEBUG_MSG (SUBSET_REPACK, nullptr, "=== Over flow resolution round %d ===", round); + sorted_graph.print_overflows (overflows); + + bool resolution_attempted = false; + hb_set_t priority_bumped_parents; + // Try resolving the furthest overflows first. + for (int i = overflows.length - 1; i >= 0; i--) + { + const graph_t::overflow_record_t& r = overflows[i]; + const auto& child = sorted_graph.vertices_[r.link->objidx]; + if (child.is_shared ()) + { + // The child object is shared, we may be able to eliminate the overflow + // by duplicating it. + sorted_graph.duplicate (r.parent, r.link->objidx); + resolution_attempted = true; + + // Stop processing overflows for this round so that object order can be + // updated to account for the newly added object. + break; + } + + if (child.is_leaf () && !priority_bumped_parents.has (r.parent)) + { + // This object is too far from it's parent, attempt to move it closer. + // + // TODO(garretrieger): initially limiting this to leaf's since they can be + // moved closer with fewer consequences. However, this can + // likely can be used for non-leafs as well. + // TODO(garretrieger): add a maximum priority, don't try to raise past this. + // TODO(garretrieger): also try lowering priority of the parent. Make it + // get placed further up in the ordering, closer to it's children. + // this is probably preferable if the total size of the parent object + // is < then the total size of the children (and the parent can be moved). + // Since in that case moving the parent will cause a smaller increase in + // the length of other offsets. + sorted_graph.raise_childrens_priority (r.parent); + priority_bumped_parents.add (r.parent); + resolution_attempted = true; + continue; + } + + // TODO(garretrieger): add additional offset resolution strategies + // - Promotion to extension lookups. + // - Table splitting. + } + + if (resolution_attempted) + { + sorted_graph.sort_shortest_distance (); + continue; + } + + DEBUG_MSG (SUBSET_REPACK, nullptr, "No resolution available :("); + c->err (HB_SERIALIZE_ERROR_OFFSET_OVERFLOW); + return; + } + + if (sorted_graph.in_error ()) + { + c->err (HB_SERIALIZE_ERROR_OTHER); + return; + } + sorted_graph.serialize (c); +} + + +#endif /* HB_REPACKER_HH */ diff --git a/thirdparty/harfbuzz/src/hb-sanitize.hh b/thirdparty/harfbuzz/src/hb-sanitize.hh index 1675e8448a..56c46015a6 100644 --- a/thirdparty/harfbuzz/src/hb-sanitize.hh +++ b/thirdparty/harfbuzz/src/hb-sanitize.hh @@ -105,7 +105,7 @@ #define HB_SANITIZE_MAX_EDITS 32 #endif #ifndef HB_SANITIZE_MAX_OPS_FACTOR -#define HB_SANITIZE_MAX_OPS_FACTOR 8 +#define HB_SANITIZE_MAX_OPS_FACTOR 64 #endif #ifndef HB_SANITIZE_MAX_OPS_MIN #define HB_SANITIZE_MAX_OPS_MIN 16384 @@ -233,7 +233,7 @@ struct hb_sanitize_context_t : (this->start <= p && p <= this->end && (unsigned int) (this->end - p) >= len && - this->max_ops-- > 0); + (this->max_ops -= len) > 0); DEBUG_MSG_LEVEL (SANITIZE, p, this->debug_depth+1, 0, "check_range [%p..%p]" diff --git a/thirdparty/harfbuzz/src/hb-serialize.hh b/thirdparty/harfbuzz/src/hb-serialize.hh index fe29bdf96e..7212d9872a 100644 --- a/thirdparty/harfbuzz/src/hb-serialize.hh +++ b/thirdparty/harfbuzz/src/hb-serialize.hh @@ -41,6 +41,16 @@ * Serialize */ +enum hb_serialize_error_t { + HB_SERIALIZE_ERROR_NONE = 0x00000000u, + HB_SERIALIZE_ERROR_OTHER = 0x00000001u, + HB_SERIALIZE_ERROR_OFFSET_OVERFLOW = 0x00000002u, + HB_SERIALIZE_ERROR_OUT_OF_ROOM = 0x00000004u, + HB_SERIALIZE_ERROR_INT_OVERFLOW = 0x00000008u, + HB_SERIALIZE_ERROR_ARRAY_OVERFLOW = 0x00000010u +}; +HB_MARK_AS_FLAG_T (hb_serialize_error_t); + struct hb_serialize_context_t { typedef unsigned objidx_t; @@ -51,6 +61,8 @@ struct hb_serialize_context_t Absolute /* Absolute: from the start of the serialize buffer. */ }; + + struct object_t { void fini () { links.fini (); } @@ -70,7 +82,7 @@ struct hb_serialize_context_t struct link_t { - bool is_wide: 1; + unsigned width: 3; bool is_signed: 1; unsigned whence: 2; unsigned position: 28; @@ -90,10 +102,11 @@ struct hb_serialize_context_t char *tail; object_t *current; // Just for sanity check unsigned num_links; + hb_serialize_error_t errors; }; snapshot_t snapshot () - { return snapshot_t { head, tail, current, current->links.length }; } + { return snapshot_t { head, tail, current, current->links.length, errors }; } hb_serialize_context_t (void *start_, unsigned int size) : start ((char *) start_), @@ -117,30 +130,60 @@ struct hb_serialize_context_t object_pool.fini (); } - bool in_error () const { return !this->successful; } + bool in_error () const { return bool (errors); } + + bool successful () const { return !bool (errors); } + + HB_NODISCARD bool ran_out_of_room () const { return errors & HB_SERIALIZE_ERROR_OUT_OF_ROOM; } + HB_NODISCARD bool offset_overflow () const { return errors & HB_SERIALIZE_ERROR_OFFSET_OVERFLOW; } + HB_NODISCARD bool only_offset_overflow () const { return errors == HB_SERIALIZE_ERROR_OFFSET_OVERFLOW; } + HB_NODISCARD bool only_overflow () const + { + return errors == HB_SERIALIZE_ERROR_OFFSET_OVERFLOW + || errors == HB_SERIALIZE_ERROR_INT_OVERFLOW + || errors == HB_SERIALIZE_ERROR_ARRAY_OVERFLOW; + } + + void reset (void *start_, unsigned int size) + { + start = (char*) start_; + end = start + size; + reset (); + current = nullptr; + } void reset () { - this->successful = true; - this->ran_out_of_room = false; + this->errors = HB_SERIALIZE_ERROR_NONE; this->head = this->start; this->tail = this->end; this->debug_depth = 0; fini (); this->packed.push (nullptr); + this->packed_map.init (); } - bool check_success (bool success) - { return this->successful && (success || (err_other_error (), false)); } + bool check_success (bool success, + hb_serialize_error_t err_type = HB_SERIALIZE_ERROR_OTHER) + { + return successful () + && (success || err (err_type)); + } template <typename T1, typename T2> - bool check_equal (T1 &&v1, T2 &&v2) - { return check_success ((long long) v1 == (long long) v2); } + bool check_equal (T1 &&v1, T2 &&v2, hb_serialize_error_t err_type) + { + if ((long long) v1 != (long long) v2) + { + return err (err_type); + } + return true; + } template <typename T1, typename T2> - bool check_assign (T1 &v1, T2 &&v2) - { return check_equal (v1 = v2, v2); } + bool check_assign (T1 &v1, T2 &&v2, hb_serialize_error_t err_type) + { return check_equal (v1 = v2, v2, err_type); } template <typename T> bool propagate_error (T &&obj) { return check_success (!hb_deref (obj).in_error ()); } @@ -167,12 +210,18 @@ struct hb_serialize_context_t "end [%p..%p] serialized %u bytes; %s", this->start, this->end, (unsigned) (this->head - this->start), - this->successful ? "successful" : "UNSUCCESSFUL"); + successful () ? "successful" : "UNSUCCESSFUL"); propagate_error (packed, packed_map); if (unlikely (!current)) return; - if (unlikely (in_error())) return; + if (unlikely (in_error())) + { + // Offset overflows that occur before link resolution cannot be handled + // by repacking, so set a more general error. + if (offset_overflow ()) err (HB_SERIALIZE_ERROR_OTHER); + return; + } assert (!current->next); @@ -212,7 +261,7 @@ struct hb_serialize_context_t current = current->next; revert (obj->head, obj->tail); obj->fini (); - object_pool.free (obj); + object_pool.release (obj); } /* Set share to false when an object is unlikely sharable with others @@ -275,9 +324,11 @@ struct hb_serialize_context_t void revert (snapshot_t snap) { - if (unlikely (in_error ())) return; + // Overflows that happened after the snapshot will be erased by the revert. + if (unlikely (in_error () && !only_overflow ())) return; assert (snap.current == current); current->links.shrink (snap.num_links); + errors = snap.errors; revert (snap.head, snap.tail); } @@ -312,7 +363,6 @@ struct hb_serialize_context_t whence_t whence = Head, unsigned bias = 0) { - static_assert (sizeof (T) == 2 || sizeof (T) == 4, ""); if (unlikely (in_error ())) return; if (!objidx) @@ -322,8 +372,10 @@ struct hb_serialize_context_t assert (current->head <= (const char *) &ofs); auto& link = *current->links.push (); + if (current->links.in_error ()) + err (HB_SERIALIZE_ERROR_OTHER); - link.is_wide = sizeof (T) == 4; + link.width = sizeof (T); link.is_signed = hb_is_signed (hb_unwrap_type (T)); link.whence = (unsigned) whence; link.position = (const char *) &ofs - current->head; @@ -351,7 +403,7 @@ struct hb_serialize_context_t for (const object_t::link_t &link : parent->links) { const object_t* child = packed[link.objidx]; - if (unlikely (!child)) { err_other_error(); return; } + if (unlikely (!child)) { err (HB_SERIALIZE_ERROR_OTHER); return; } unsigned offset = 0; switch ((whence_t) link.whence) { case Head: offset = child->head - parent->head; break; @@ -363,15 +415,19 @@ struct hb_serialize_context_t offset -= link.bias; if (link.is_signed) { - if (link.is_wide) + assert (link.width == 2 || link.width == 4); + if (link.width == 4) assign_offset<int32_t> (parent, link, offset); else assign_offset<int16_t> (parent, link, offset); } else { - if (link.is_wide) + assert (link.width == 2 || link.width == 3 || link.width == 4); + if (link.width == 4) assign_offset<uint32_t> (parent, link, offset); + else if (link.width == 3) + assign_offset<uint32_t, 3> (parent, link, offset); else assign_offset<uint16_t> (parent, link, offset); } @@ -398,22 +454,22 @@ struct hb_serialize_context_t Type *start_embed (const Type &obj) const { return start_embed (hb_addressof (obj)); } - /* Following two functions exist to allow setting breakpoint on. */ - void err_ran_out_of_room () { this->ran_out_of_room = true; } - void err_other_error () { this->successful = false; } + bool err (hb_serialize_error_t err_type) + { + return !bool ((errors = (errors | err_type))); + } template <typename Type> - Type *allocate_size (unsigned int size) + Type *allocate_size (size_t size) { - if (unlikely (!this->successful)) return nullptr; + if (unlikely (in_error ())) return nullptr; - if (this->tail - this->head < ptrdiff_t (size)) + if (unlikely (size > INT_MAX || this->tail - this->head < ptrdiff_t (size))) { - err_ran_out_of_room (); - this->successful = false; + err (HB_SERIALIZE_ERROR_OUT_OF_ROOM); return nullptr; } - memset (this->head, 0, size); + hb_memset (this->head, 0, size); char *ret = this->head; this->head += size; return reinterpret_cast<Type *> (ret); @@ -468,18 +524,19 @@ struct hb_serialize_context_t hb_serialize_context_t& operator << (const Type &obj) & { embed (obj); return *this; } template <typename Type> - Type *extend_size (Type *obj, unsigned int size) + Type *extend_size (Type *obj, size_t size) { if (unlikely (in_error ())) return nullptr; assert (this->start <= (char *) obj); assert ((char *) obj <= this->head); - assert ((char *) obj + size >= this->head); - if (unlikely (!this->allocate_size<Type> (((char *) obj) + size - this->head))) return nullptr; + assert ((size_t) (this->head - (char *) obj) <= size); + if (unlikely (((char *) obj + size < (char *) obj) || + !this->allocate_size<Type> (((char *) obj) + size - this->head))) return nullptr; return reinterpret_cast<Type *> (obj); } template <typename Type> - Type *extend_size (Type &obj, unsigned int size) + Type *extend_size (Type &obj, size_t size) { return extend_size (hb_addressof (obj), size); } template <typename Type> @@ -497,12 +554,16 @@ struct hb_serialize_context_t /* Output routines. */ hb_bytes_t copy_bytes () const { - assert (this->successful); + assert (successful ()); /* Copy both items from head side and tail side... */ unsigned int len = (this->head - this->start) + (this->end - this->tail); - char *p = (char *) malloc (len); + // If len is zero don't hb_malloc as the memory won't get properly + // cleaned up later. + if (!len) return hb_bytes_t (); + + char *p = (char *) hb_malloc (len); if (unlikely (!p)) return hb_bytes_t (); memcpy (p, this->start, this->head - this->start); @@ -517,23 +578,25 @@ struct hb_serialize_context_t hb_bytes_t b = copy_bytes (); return hb_blob_create (b.arrayZ, b.length, HB_MEMORY_MODE_WRITABLE, - (char *) b.arrayZ, free); + (char *) b.arrayZ, hb_free); } + const hb_vector_t<object_t *>& object_graph() const + { return packed; } + private: - template <typename T> + template <typename T, unsigned Size = sizeof (T)> void assign_offset (const object_t* parent, const object_t::link_t &link, unsigned offset) { - auto &off = * ((BEInt<T> *) (parent->head + link.position)); + auto &off = * ((BEInt<T, Size> *) (parent->head + link.position)); assert (0 == off); - check_assign (off, offset); + check_assign (off, offset, HB_SERIALIZE_ERROR_OFFSET_OVERFLOW); } public: /* TODO Make private. */ char *start, *head, *tail, *end; unsigned int debug_depth; - bool successful; - bool ran_out_of_room; + hb_serialize_error_t errors; private: @@ -550,5 +613,4 @@ struct hb_serialize_context_t hb_hashmap_t<const object_t *, objidx_t, nullptr, 0> packed_map; }; - #endif /* HB_SERIALIZE_HH */ diff --git a/thirdparty/harfbuzz/src/hb-set-digest.hh b/thirdparty/harfbuzz/src/hb-set-digest.hh index b97526f775..1ef1ba5fb2 100644 --- a/thirdparty/harfbuzz/src/hb-set-digest.hh +++ b/thirdparty/harfbuzz/src/hb-set-digest.hh @@ -87,6 +87,8 @@ struct hb_set_digest_lowest_bits_t } } template <typename T> + void add_array (const hb_array_t<const T>& arr) { add_array (&arr, arr.len ()); } + template <typename T> bool add_sorted_array (const T *array, unsigned int count, unsigned int stride=sizeof(T)) { for (unsigned int i = 0; i < count; i++) @@ -96,6 +98,8 @@ struct hb_set_digest_lowest_bits_t } return true; } + template <typename T> + bool add_sorted_array (const hb_sorted_array_t<const T>& arr) { return add_sorted_array (&arr, arr.len ()); } bool may_have (hb_codepoint_t g) const { return !!(mask & mask_for (g)); } @@ -135,12 +139,16 @@ struct hb_set_digest_combiner_t tail.add_array (array, count, stride); } template <typename T> + void add_array (const hb_array_t<const T>& arr) { add_array (&arr, arr.len ()); } + template <typename T> bool add_sorted_array (const T *array, unsigned int count, unsigned int stride=sizeof(T)) { head.add_sorted_array (array, count, stride); tail.add_sorted_array (array, count, stride); return true; } + template <typename T> + bool add_sorted_array (const hb_sorted_array_t<const T>& arr) { return add_sorted_array (&arr, arr.len ()); } bool may_have (hb_codepoint_t g) const { diff --git a/thirdparty/harfbuzz/src/hb-set.cc b/thirdparty/harfbuzz/src/hb-set.cc index 86bf70034c..204dbb5645 100644 --- a/thirdparty/harfbuzz/src/hb-set.cc +++ b/thirdparty/harfbuzz/src/hb-set.cc @@ -109,7 +109,7 @@ hb_set_destroy (hb_set_t *set) set->fini_shallow (); - free (set); + hb_free (set); } /** @@ -169,7 +169,25 @@ hb_set_get_user_data (hb_set_t *set, hb_bool_t hb_set_allocation_successful (const hb_set_t *set) { - return set->successful; + return !set->in_error (); +} + +/** + * hb_set_copy: + * @set: A set + * + * Allocate a copy of @set. + * + * Return value: Newly-allocated set. + * + * Since: 2.8.2 + **/ +hb_set_t * +hb_set_copy (const hb_set_t *set) +{ + hb_set_t *copy = hb_set_create (); + copy->set (*set); + return copy; } /** @@ -183,9 +201,7 @@ hb_set_allocation_successful (const hb_set_t *set) void hb_set_clear (hb_set_t *set) { - if (unlikely (hb_object_is_immutable (set))) - return; - + /* Immutible-safe. */ set->clear (); } @@ -236,6 +252,7 @@ void hb_set_add (hb_set_t *set, hb_codepoint_t codepoint) { + /* Immutible-safe. */ set->add (codepoint); } @@ -255,6 +272,7 @@ hb_set_add_range (hb_set_t *set, hb_codepoint_t first, hb_codepoint_t last) { + /* Immutible-safe. */ set->add_range (first, last); } @@ -271,6 +289,7 @@ void hb_set_del (hb_set_t *set, hb_codepoint_t codepoint) { + /* Immutible-safe. */ set->del (codepoint); } @@ -283,6 +302,9 @@ hb_set_del (hb_set_t *set, * Removes all of the elements from @first to @last * (inclusive) from @set. * + * If @last is #HB_SET_VALUE_INVALID, then all values + * greater than or equal to @first are removed. + * * Since: 0.9.7 **/ void @@ -290,6 +312,7 @@ hb_set_del_range (hb_set_t *set, hb_codepoint_t first, hb_codepoint_t last) { + /* Immutible-safe. */ set->del_range (first, last); } @@ -309,7 +332,7 @@ hb_bool_t hb_set_is_equal (const hb_set_t *set, const hb_set_t *other) { - return set->is_equal (other); + return set->is_equal (*other); } /** @@ -327,7 +350,7 @@ hb_bool_t hb_set_is_subset (const hb_set_t *set, const hb_set_t *larger_set) { - return set->is_subset (larger_set); + return set->is_subset (*larger_set); } /** @@ -343,7 +366,8 @@ void hb_set_set (hb_set_t *set, const hb_set_t *other) { - set->set (other); + /* Immutible-safe. */ + set->set (*other); } /** @@ -359,7 +383,8 @@ void hb_set_union (hb_set_t *set, const hb_set_t *other) { - set->union_ (other); + /* Immutible-safe. */ + set->union_ (*other); } /** @@ -375,7 +400,8 @@ void hb_set_intersect (hb_set_t *set, const hb_set_t *other) { - set->intersect (other); + /* Immutible-safe. */ + set->intersect (*other); } /** @@ -391,7 +417,8 @@ void hb_set_subtract (hb_set_t *set, const hb_set_t *other) { - set->subtract (other); + /* Immutible-safe. */ + set->subtract (*other); } /** @@ -408,25 +435,24 @@ void hb_set_symmetric_difference (hb_set_t *set, const hb_set_t *other) { - set->symmetric_difference (other); + /* Immutible-safe. */ + set->symmetric_difference (*other); } -#ifndef HB_DISABLE_DEPRECATED /** * hb_set_invert: * @set: A set * * Inverts the contents of @set. * - * Since: 0.9.10 - * - * Deprecated: 1.6.1 + * Since: 3.0.0 **/ void -hb_set_invert (hb_set_t *set HB_UNUSED) +hb_set_invert (hb_set_t *set) { + /* Immutible-safe. */ + set->invert (); } -#endif /** * hb_set_get_population: diff --git a/thirdparty/harfbuzz/src/hb-set.h b/thirdparty/harfbuzz/src/hb-set.h index 0ad27f4bbd..423225bf96 100644 --- a/thirdparty/harfbuzz/src/hb-set.h +++ b/thirdparty/harfbuzz/src/hb-set.h @@ -85,12 +85,18 @@ hb_set_get_user_data (hb_set_t *set, HB_EXTERN hb_bool_t hb_set_allocation_successful (const hb_set_t *set); +HB_EXTERN hb_set_t * +hb_set_copy (const hb_set_t *set); + HB_EXTERN void hb_set_clear (hb_set_t *set); HB_EXTERN hb_bool_t hb_set_is_empty (const hb_set_t *set); +HB_EXTERN void +hb_set_invert (hb_set_t *set); + HB_EXTERN hb_bool_t hb_set_has (const hb_set_t *set, hb_codepoint_t codepoint); diff --git a/thirdparty/harfbuzz/src/hb-set.hh b/thirdparty/harfbuzz/src/hb-set.hh index ae8b5eb10f..437e234361 100644 --- a/thirdparty/harfbuzz/src/hb-set.hh +++ b/thirdparty/harfbuzz/src/hb-set.hh @@ -1,5 +1,6 @@ /* * Copyright © 2012,2017 Google, Inc. + * Copyright © 2021 Behdad Esfahbod * * This is part of HarfBuzz, a text shaping library. * @@ -28,420 +29,67 @@ #define HB_SET_HH #include "hb.hh" -#include "hb-machinery.hh" +#include "hb-bit-set-invertible.hh" -/* - * hb_set_t - */ - -/* TODO Keep a free-list so we can free pages that are completely zeroed. At that - * point maybe also use a sentinel value for "all-1" pages? */ - -struct hb_set_t +template <typename impl_t> +struct hb_sparseset_t { - HB_DELETE_COPY_ASSIGN (hb_set_t); - hb_set_t () { init (); } - ~hb_set_t () { fini (); } - - struct page_map_t - { - int cmp (const page_map_t &o) const { return (int) o.major - (int) major; } - - uint32_t major; - uint32_t index; - }; - - struct page_t - { - void init0 () { v.clear (); } - void init1 () { v.clear (0xFF); } - - unsigned int len () const - { return ARRAY_LENGTH_CONST (v); } - - bool is_empty () const - { - for (unsigned int i = 0; i < len (); i++) - if (v[i]) - return false; - return true; - } - - void add (hb_codepoint_t g) { elt (g) |= mask (g); } - void del (hb_codepoint_t g) { elt (g) &= ~mask (g); } - bool get (hb_codepoint_t g) const { return elt (g) & mask (g); } - - void add_range (hb_codepoint_t a, hb_codepoint_t b) - { - elt_t *la = &elt (a); - elt_t *lb = &elt (b); - if (la == lb) - *la |= (mask (b) << 1) - mask(a); - else - { - *la |= ~(mask (a) - 1); - la++; - - memset (la, 0xff, (char *) lb - (char *) la); - - *lb |= ((mask (b) << 1) - 1); - } - } - - void del_range (hb_codepoint_t a, hb_codepoint_t b) - { - elt_t *la = &elt (a); - elt_t *lb = &elt (b); - if (la == lb) - *la &= ~((mask (b) << 1) - mask(a)); - else - { - *la &= mask (a) - 1; - la++; - - memset (la, 0, (char *) lb - (char *) la); - - *lb &= ~((mask (b) << 1) - 1); - } - } - - bool is_equal (const page_t *other) const - { - return 0 == hb_memcmp (&v, &other->v, sizeof (v)); - } - - unsigned int get_population () const - { - unsigned int pop = 0; - for (unsigned int i = 0; i < len (); i++) - pop += hb_popcount (v[i]); - return pop; - } - - bool next (hb_codepoint_t *codepoint) const - { - unsigned int m = (*codepoint + 1) & MASK; - if (!m) - { - *codepoint = INVALID; - return false; - } - unsigned int i = m / ELT_BITS; - unsigned int j = m & ELT_MASK; - - const elt_t vv = v[i] & ~((elt_t (1) << j) - 1); - for (const elt_t *p = &vv; i < len (); p = &v[++i]) - if (*p) - { - *codepoint = i * ELT_BITS + elt_get_min (*p); - return true; - } - - *codepoint = INVALID; - return false; - } - bool previous (hb_codepoint_t *codepoint) const - { - unsigned int m = (*codepoint - 1) & MASK; - if (m == MASK) - { - *codepoint = INVALID; - return false; - } - unsigned int i = m / ELT_BITS; - unsigned int j = m & ELT_MASK; - - /* Fancy mask to avoid shifting by elt_t bitsize, which is undefined. */ - const elt_t mask = j < 8 * sizeof (elt_t) - 1 ? - ((elt_t (1) << (j + 1)) - 1) : - (elt_t) -1; - const elt_t vv = v[i] & mask; - const elt_t *p = &vv; - while (true) - { - if (*p) - { - *codepoint = i * ELT_BITS + elt_get_max (*p); - return true; - } - if ((int) i <= 0) break; - p = &v[--i]; - } - - *codepoint = INVALID; - return false; - } - hb_codepoint_t get_min () const - { - for (unsigned int i = 0; i < len (); i++) - if (v[i]) - return i * ELT_BITS + elt_get_min (v[i]); - return INVALID; - } - hb_codepoint_t get_max () const - { - for (int i = len () - 1; i >= 0; i--) - if (v[i]) - return i * ELT_BITS + elt_get_max (v[i]); - return 0; - } - - typedef unsigned long long elt_t; - static constexpr unsigned PAGE_BITS = 512; - static_assert ((PAGE_BITS & ((PAGE_BITS) - 1)) == 0, ""); - - static unsigned int elt_get_min (const elt_t &elt) { return hb_ctz (elt); } - static unsigned int elt_get_max (const elt_t &elt) { return hb_bit_storage (elt) - 1; } - - typedef hb_vector_size_t<elt_t, PAGE_BITS / 8> vector_t; - - static constexpr unsigned ELT_BITS = sizeof (elt_t) * 8; - static constexpr unsigned ELT_MASK = ELT_BITS - 1; - static constexpr unsigned BITS = sizeof (vector_t) * 8; - static constexpr unsigned MASK = BITS - 1; - static_assert ((unsigned) PAGE_BITS == (unsigned) BITS, ""); - - elt_t &elt (hb_codepoint_t g) { return v[(g & MASK) / ELT_BITS]; } - elt_t const &elt (hb_codepoint_t g) const { return v[(g & MASK) / ELT_BITS]; } - elt_t mask (hb_codepoint_t g) const { return elt_t (1) << (g & ELT_MASK); } + hb_object_header_t header; + impl_t s; - vector_t v; - }; - static_assert (page_t::PAGE_BITS == sizeof (page_t) * 8, ""); + hb_sparseset_t () { init (); } + ~hb_sparseset_t () { fini (); } - hb_object_header_t header; - bool successful; /* Allocations successful */ - mutable unsigned int population; - hb_sorted_vector_t<page_map_t> page_map; - hb_vector_t<page_t> pages; + hb_sparseset_t (const hb_sparseset_t& other) : hb_sparseset_t () { set (other); } + void operator= (const hb_sparseset_t& other) { set (other); } + // TODO Add move construtor/assign + // TODO Add constructor for Iterator - void init_shallow () - { - successful = true; - population = 0; - page_map.init (); - pages.init (); - } + void init_shallow () { s.init (); } void init () { hb_object_init (this); init_shallow (); } - void fini_shallow () - { - population = 0; - page_map.fini (); - pages.fini (); - } + void fini_shallow () { s.fini (); } void fini () { hb_object_fini (this); fini_shallow (); } - bool in_error () const { return !successful; } - - bool resize (unsigned int count) - { - if (unlikely (count > pages.length && !successful)) return false; - if (!pages.resize (count) || !page_map.resize (count)) - { - pages.resize (page_map.length); - successful = false; - return false; - } - return true; - } - - void reset () - { - successful = true; - clear (); - } - - void clear () - { - if (resize (0)) - population = 0; - } - bool is_empty () const - { - unsigned int count = pages.length; - for (unsigned int i = 0; i < count; i++) - if (!pages[i].is_empty ()) - return false; - return true; - } explicit operator bool () const { return !is_empty (); } - void dirty () { population = UINT_MAX; } - - void add (hb_codepoint_t g) - { - if (unlikely (!successful)) return; - if (unlikely (g == INVALID)) return; - dirty (); - page_t *page = page_for_insert (g); if (unlikely (!page)) return; - page->add (g); - } - bool add_range (hb_codepoint_t a, hb_codepoint_t b) - { - if (unlikely (!successful)) return true; /* https://github.com/harfbuzz/harfbuzz/issues/657 */ - if (unlikely (a > b || a == INVALID || b == INVALID)) return false; - dirty (); - unsigned int ma = get_major (a); - unsigned int mb = get_major (b); - if (ma == mb) - { - page_t *page = page_for_insert (a); if (unlikely (!page)) return false; - page->add_range (a, b); - } - else - { - page_t *page = page_for_insert (a); if (unlikely (!page)) return false; - page->add_range (a, major_start (ma + 1) - 1); + void err () { s.err (); } + bool in_error () const { return s.in_error (); } - for (unsigned int m = ma + 1; m < mb; m++) - { - page = page_for_insert (major_start (m)); if (unlikely (!page)) return false; - page->init1 (); - } + void reset () { s.reset (); } + void clear () { s.clear (); } + void invert () { s.invert (); } + bool is_empty () const { return s.is_empty (); } - page = page_for_insert (b); if (unlikely (!page)) return false; - page->add_range (major_start (mb), b); - } - return true; - } + void add (hb_codepoint_t g) { s.add (g); } + bool add_range (hb_codepoint_t a, hb_codepoint_t b) { return s.add_range (a, b); } template <typename T> void add_array (const T *array, unsigned int count, unsigned int stride=sizeof(T)) - { - if (unlikely (!successful)) return; - if (!count) return; - dirty (); - hb_codepoint_t g = *array; - while (count) - { - unsigned int m = get_major (g); - page_t *page = page_for_insert (g); if (unlikely (!page)) return; - unsigned int start = major_start (m); - unsigned int end = major_start (m + 1); - do - { - page->add (g); - - array = &StructAtOffsetUnaligned<T> (array, stride); - count--; - } - while (count && (g = *array, start <= g && g < end)); - } - } + { s.add_array (array, count, stride); } + template <typename T> + void add_array (const hb_array_t<const T>& arr) { add_array (&arr, arr.len ()); } /* Might return false if array looks unsorted. * Used for faster rejection of corrupt data. */ template <typename T> bool add_sorted_array (const T *array, unsigned int count, unsigned int stride=sizeof(T)) - { - if (unlikely (!successful)) return true; /* https://github.com/harfbuzz/harfbuzz/issues/657 */ - if (!count) return true; - dirty (); - hb_codepoint_t g = *array; - hb_codepoint_t last_g = g; - while (count) - { - unsigned int m = get_major (g); - page_t *page = page_for_insert (g); if (unlikely (!page)) return false; - unsigned int end = major_start (m + 1); - do - { - /* If we try harder we can change the following comparison to <=; - * Not sure if it's worth it. */ - if (g < last_g) return false; - last_g = g; - page->add (g); - - array = (const T *) ((const char *) array + stride); - count--; - } - while (count && (g = *array, g < end)); - } - return true; - } - - void del (hb_codepoint_t g) - { - /* TODO perform op even if !successful. */ - if (unlikely (!successful)) return; - page_t *page = page_for (g); - if (!page) - return; - dirty (); - page->del (g); - } - - private: - void del_pages (int ds, int de) - { - if (ds <= de) - { - // Pre-allocate the workspace that compact() will need so we can bail on allocation failure - // before attempting to rewrite the page map. - hb_vector_t<unsigned> compact_workspace; - if (unlikely (!allocate_compact_workspace (compact_workspace))) return; - - unsigned int write_index = 0; - for (unsigned int i = 0; i < page_map.length; i++) - { - int m = (int) page_map[i].major; - if (m < ds || de < m) - page_map[write_index++] = page_map[i]; - } - compact (compact_workspace, write_index); - resize (write_index); - } - } + { return s.add_sorted_array (array, count, stride); } + template <typename T> + bool add_sorted_array (const hb_sorted_array_t<const T>& arr) { return add_sorted_array (&arr, arr.len ()); } + void del (hb_codepoint_t g) { s.del (g); } + void del_range (hb_codepoint_t a, hb_codepoint_t b) { s.del_range (a, b); } - public: - void del_range (hb_codepoint_t a, hb_codepoint_t b) - { - /* TODO perform op even if !successful. */ - if (unlikely (!successful)) return; - if (unlikely (a > b || a == INVALID || b == INVALID)) return; - dirty (); - unsigned int ma = get_major (a); - unsigned int mb = get_major (b); - /* Delete pages from ds through de if ds <= de. */ - int ds = (a == major_start (ma))? (int) ma: (int) (ma + 1); - int de = (b + 1 == major_start (mb + 1))? (int) mb: ((int) mb - 1); - if (ds > de || (int) ma < ds) - { - page_t *page = page_for (a); - if (page) - { - if (ma == mb) - page->del_range (a, b); - else - page->del_range (a, major_start (ma + 1) - 1); - } - } - if (de < (int) mb && ma != mb) - { - page_t *page = page_for (b); - if (page) - page->del_range (major_start (mb), b); - } - del_pages (ds, de); - } - - bool get (hb_codepoint_t g) const - { - const page_t *page = page_for (g); - if (!page) - return false; - return page->get (g); - } + bool get (hb_codepoint_t g) const { return s.get (g); } /* Has interface. */ static constexpr bool SENTINEL = false; @@ -452,464 +100,49 @@ struct hb_set_t bool operator () (hb_codepoint_t k) const { return has (k); } /* Sink interface. */ - hb_set_t& operator << (hb_codepoint_t v) + hb_sparseset_t& operator << (hb_codepoint_t v) { add (v); return *this; } - hb_set_t& operator << (const hb_pair_t<hb_codepoint_t, hb_codepoint_t>& range) + hb_sparseset_t& operator << (const hb_pair_t<hb_codepoint_t, hb_codepoint_t>& range) { add_range (range.first, range.second); return *this; } bool intersects (hb_codepoint_t first, hb_codepoint_t last) const - { - hb_codepoint_t c = first - 1; - return next (&c) && c <= last; - } - void set (const hb_set_t *other) - { - if (unlikely (!successful)) return; - unsigned int count = other->pages.length; - if (!resize (count)) - return; - population = other->population; - memcpy ((void *) pages, (const void *) other->pages, count * pages.item_size); - memcpy ((void *) page_map, (const void *) other->page_map, count * page_map.item_size); - } - - bool is_equal (const hb_set_t *other) const - { - if (get_population () != other->get_population ()) - return false; - - unsigned int na = pages.length; - unsigned int nb = other->pages.length; + { return s.intersects (first, last); } - unsigned int a = 0, b = 0; - for (; a < na && b < nb; ) - { - if (page_at (a).is_empty ()) { a++; continue; } - if (other->page_at (b).is_empty ()) { b++; continue; } - if (page_map[a].major != other->page_map[b].major || - !page_at (a).is_equal (&other->page_at (b))) - return false; - a++; - b++; - } - for (; a < na; a++) - if (!page_at (a).is_empty ()) { return false; } - for (; b < nb; b++) - if (!other->page_at (b).is_empty ()) { return false; } + void set (const hb_sparseset_t &other) { s.set (other.s); } - return true; - } - - bool is_subset (const hb_set_t *larger_set) const - { - if (get_population () > larger_set->get_population ()) - return false; - - /* TODO Optimize to use pages. */ - hb_codepoint_t c = INVALID; - while (next (&c)) - if (!larger_set->has (c)) - return false; - - return true; - } - - bool allocate_compact_workspace(hb_vector_t<unsigned>& workspace) - { - if (unlikely(!workspace.resize (pages.length))) - { - successful = false; - return false; - } - - return true; - } - - - /* - * workspace should be a pre-sized vector allocated to hold at exactly pages.length - * elements. - */ - void compact (hb_vector_t<unsigned>& workspace, - unsigned int length) - { - assert(workspace.length == pages.length); - hb_vector_t<unsigned>& old_index_to_page_map_index = workspace; - - hb_fill (old_index_to_page_map_index.writer(), 0xFFFFFFFF); - /* TODO(iter) Rewrite as dagger? */ - for (unsigned i = 0; i < length; i++) - old_index_to_page_map_index[page_map[i].index] = i; - - compact_pages (old_index_to_page_map_index); - } - - void compact_pages (const hb_vector_t<unsigned>& old_index_to_page_map_index) - { - unsigned int write_index = 0; - for (unsigned int i = 0; i < pages.length; i++) - { - if (old_index_to_page_map_index[i] == 0xFFFFFFFF) continue; + bool is_equal (const hb_sparseset_t &other) const { return s.is_equal (other.s); } - if (write_index < i) - pages[write_index] = pages[i]; + bool is_subset (const hb_sparseset_t &larger_set) const { return s.is_subset (larger_set.s); } - page_map[old_index_to_page_map_index[i]].index = write_index; - write_index++; - } - } - - template <typename Op> - void process (const Op& op, const hb_set_t *other) - { - const bool passthru_left = op (1, 0); - const bool passthru_right = op (0, 1); - - if (unlikely (!successful)) return; - - dirty (); - - unsigned int na = pages.length; - unsigned int nb = other->pages.length; - unsigned int next_page = na; - - unsigned int count = 0, newCount = 0; - unsigned int a = 0, b = 0; - unsigned int write_index = 0; - - // Pre-allocate the workspace that compact() will need so we can bail on allocation failure - // before attempting to rewrite the page map. - hb_vector_t<unsigned> compact_workspace; - if (!passthru_left && unlikely (!allocate_compact_workspace (compact_workspace))) return; - - for (; a < na && b < nb; ) - { - if (page_map[a].major == other->page_map[b].major) - { - if (!passthru_left) - { - // Move page_map entries that we're keeping from the left side set - // to the front of the page_map vector. This isn't necessary if - // passthru_left is set since no left side pages will be removed - // in that case. - if (write_index < a) - page_map[write_index] = page_map[a]; - write_index++; - } - - count++; - a++; - b++; - } - else if (page_map[a].major < other->page_map[b].major) - { - if (passthru_left) - count++; - a++; - } - else - { - if (passthru_right) - count++; - b++; - } - } - if (passthru_left) - count += na - a; - if (passthru_right) - count += nb - b; + void union_ (const hb_sparseset_t &other) { s.union_ (other.s); } + void intersect (const hb_sparseset_t &other) { s.intersect (other.s); } + void subtract (const hb_sparseset_t &other) { s.subtract (other.s); } + void symmetric_difference (const hb_sparseset_t &other) { s.symmetric_difference (other.s); } - if (!passthru_left) - { - na = write_index; - next_page = write_index; - compact (compact_workspace, write_index); - } - - if (!resize (count)) - return; - - newCount = count; - - /* Process in-place backward. */ - a = na; - b = nb; - for (; a && b; ) - { - if (page_map[a - 1].major == other->page_map[b - 1].major) - { - a--; - b--; - count--; - page_map[count] = page_map[a]; - page_at (count).v = op (page_at (a).v, other->page_at (b).v); - } - else if (page_map[a - 1].major > other->page_map[b - 1].major) - { - a--; - if (passthru_left) - { - count--; - page_map[count] = page_map[a]; - } - } - else - { - b--; - if (passthru_right) - { - count--; - page_map[count].major = other->page_map[b].major; - page_map[count].index = next_page++; - page_at (count).v = other->page_at (b).v; - } - } - } - if (passthru_left) - while (a) - { - a--; - count--; - page_map[count] = page_map [a]; - } - if (passthru_right) - while (b) - { - b--; - count--; - page_map[count].major = other->page_map[b].major; - page_map[count].index = next_page++; - page_at (count).v = other->page_at (b).v; - } - assert (!count); - if (pages.length > newCount) - // This resize() doesn't need to be checked because we can't get here - // if the set is currently in_error() and this only resizes downwards - // which will always succeed if the set is not in_error(). - resize (newCount); - } - - void union_ (const hb_set_t *other) - { - process (hb_bitwise_or, other); - } - void intersect (const hb_set_t *other) - { - process (hb_bitwise_and, other); - } - void subtract (const hb_set_t *other) - { - process (hb_bitwise_sub, other); - } - void symmetric_difference (const hb_set_t *other) - { - process (hb_bitwise_xor, other); - } - bool next (hb_codepoint_t *codepoint) const - { - if (unlikely (*codepoint == INVALID)) { - *codepoint = get_min (); - return *codepoint != INVALID; - } - - page_map_t map = {get_major (*codepoint), 0}; - unsigned int i; - page_map.bfind (map, &i, HB_BFIND_NOT_FOUND_STORE_CLOSEST); - if (i < page_map.length && page_map[i].major == map.major) - { - if (pages[page_map[i].index].next (codepoint)) - { - *codepoint += page_map[i].major * page_t::PAGE_BITS; - return true; - } - i++; - } - for (; i < page_map.length; i++) - { - hb_codepoint_t m = pages[page_map[i].index].get_min (); - if (m != INVALID) - { - *codepoint = page_map[i].major * page_t::PAGE_BITS + m; - return true; - } - } - *codepoint = INVALID; - return false; - } - bool previous (hb_codepoint_t *codepoint) const - { - if (unlikely (*codepoint == INVALID)) { - *codepoint = get_max (); - return *codepoint != INVALID; - } - - page_map_t map = {get_major (*codepoint), 0}; - unsigned int i; - page_map.bfind (map, &i, HB_BFIND_NOT_FOUND_STORE_CLOSEST); - if (i < page_map.length && page_map[i].major == map.major) - { - if (pages[page_map[i].index].previous (codepoint)) - { - *codepoint += page_map[i].major * page_t::PAGE_BITS; - return true; - } - } - i--; - for (; (int) i >= 0; i--) - { - hb_codepoint_t m = pages[page_map[i].index].get_max (); - if (m != INVALID) - { - *codepoint = page_map[i].major * page_t::PAGE_BITS + m; - return true; - } - } - *codepoint = INVALID; - return false; - } + bool next (hb_codepoint_t *codepoint) const { return s.next (codepoint); } + bool previous (hb_codepoint_t *codepoint) const { return s.previous (codepoint); } bool next_range (hb_codepoint_t *first, hb_codepoint_t *last) const - { - hb_codepoint_t i; - - i = *last; - if (!next (&i)) - { - *last = *first = INVALID; - return false; - } - - /* TODO Speed up. */ - *last = *first = i; - while (next (&i) && i == *last + 1) - (*last)++; - - return true; - } + { return s.next_range (first, last); } bool previous_range (hb_codepoint_t *first, hb_codepoint_t *last) const - { - hb_codepoint_t i; + { return s.previous_range (first, last); } - i = *first; - if (!previous (&i)) - { - *last = *first = INVALID; - return false; - } - - /* TODO Speed up. */ - *last = *first = i; - while (previous (&i) && i == *first - 1) - (*first)--; - - return true; - } - - unsigned int get_population () const - { - if (population != UINT_MAX) - return population; + unsigned int get_population () const { return s.get_population (); } + hb_codepoint_t get_min () const { return s.get_min (); } + hb_codepoint_t get_max () const { return s.get_max (); } - unsigned int pop = 0; - unsigned int count = pages.length; - for (unsigned int i = 0; i < count; i++) - pop += pages[i].get_population (); - - population = pop; - return pop; - } - hb_codepoint_t get_min () const - { - unsigned int count = pages.length; - for (unsigned int i = 0; i < count; i++) - if (!page_at (i).is_empty ()) - return page_map[i].major * page_t::PAGE_BITS + page_at (i).get_min (); - return INVALID; - } - hb_codepoint_t get_max () const - { - unsigned int count = pages.length; - for (int i = count - 1; i >= 0; i++) - if (!page_at (i).is_empty ()) - return page_map[(unsigned) i].major * page_t::PAGE_BITS + page_at (i).get_max (); - return INVALID; - } - - static constexpr hb_codepoint_t INVALID = HB_SET_VALUE_INVALID; + static constexpr hb_codepoint_t INVALID = impl_t::INVALID; /* * Iterator implementation. */ - struct iter_t : hb_iter_with_fallback_t<iter_t, hb_codepoint_t> - { - static constexpr bool is_sorted_iterator = true; - iter_t (const hb_set_t &s_ = Null (hb_set_t), - bool init = true) : s (&s_), v (INVALID), l(0) - { - if (init) - { - l = s->get_population () + 1; - __next__ (); - } - } - - typedef hb_codepoint_t __item_t__; - hb_codepoint_t __item__ () const { return v; } - bool __more__ () const { return v != INVALID; } - void __next__ () { s->next (&v); if (l) l--; } - void __prev__ () { s->previous (&v); } - unsigned __len__ () const { return l; } - iter_t end () const { return iter_t (*s, false); } - bool operator != (const iter_t& o) const - { return s != o.s || v != o.v; } - - protected: - const hb_set_t *s; - hb_codepoint_t v; - unsigned l; - }; - iter_t iter () const { return iter_t (*this); } + using iter_t = typename impl_t::iter_t; + iter_t iter () const { return iter_t (this->s); } operator iter_t () const { return iter (); } +}; - protected: - - page_t *page_for_insert (hb_codepoint_t g) - { - page_map_t map = {get_major (g), pages.length}; - unsigned int i; - if (!page_map.bfind (map, &i, HB_BFIND_NOT_FOUND_STORE_CLOSEST)) - { - if (!resize (pages.length + 1)) - return nullptr; +struct hb_set_t : hb_sparseset_t<hb_bit_set_invertible_t> {}; - pages[map.index].init0 (); - memmove (page_map + i + 1, - page_map + i, - (page_map.length - 1 - i) * page_map.item_size); - page_map[i] = map; - } - return &pages[page_map[i].index]; - } - page_t *page_for (hb_codepoint_t g) - { - page_map_t key = {get_major (g)}; - const page_map_t *found = page_map.bsearch (key); - if (found) - return &pages[found->index]; - return nullptr; - } - const page_t *page_for (hb_codepoint_t g) const - { - page_map_t key = {get_major (g)}; - const page_map_t *found = page_map.bsearch (key); - if (found) - return &pages[found->index]; - return nullptr; - } - page_t &page_at (unsigned int i) { return pages[page_map[i].index]; } - const page_t &page_at (unsigned int i) const { return pages[page_map[i].index]; } - unsigned int get_major (hb_codepoint_t g) const { return g / page_t::PAGE_BITS; } - hb_codepoint_t major_start (unsigned int major) const { return major * page_t::PAGE_BITS; } -}; +static_assert (hb_set_t::INVALID == HB_SET_VALUE_INVALID, ""); #endif /* HB_SET_HH */ diff --git a/thirdparty/harfbuzz/src/hb-shape-plan.cc b/thirdparty/harfbuzz/src/hb-shape-plan.cc index 0d9eaddaa6..66332165c3 100644 --- a/thirdparty/harfbuzz/src/hb-shape-plan.cc +++ b/thirdparty/harfbuzz/src/hb-shape-plan.cc @@ -66,7 +66,7 @@ hb_shape_plan_key_t::init (bool copy, const char * const *shaper_list) { hb_feature_t *features = nullptr; - if (copy && num_user_features && !(features = (hb_feature_t *) calloc (num_user_features, sizeof (hb_feature_t)))) + if (copy && num_user_features && !(features = (hb_feature_t *) hb_calloc (num_user_features, sizeof (hb_feature_t)))) goto bail; this->props = *props; @@ -130,7 +130,7 @@ hb_shape_plan_key_t::init (bool copy, #undef HB_SHAPER_PLAN bail: - ::free (features); + ::hb_free (features); return false; } @@ -264,9 +264,9 @@ hb_shape_plan_create2 (hb_face_t *face, #ifndef HB_NO_OT_SHAPE bail3: #endif - shape_plan->key.free (); + shape_plan->key.fini (); bail2: - free (shape_plan); + hb_free (shape_plan); bail: return hb_shape_plan_get_empty (); } @@ -320,8 +320,8 @@ hb_shape_plan_destroy (hb_shape_plan_t *shape_plan) #ifndef HB_NO_OT_SHAPE shape_plan->ot.fini (); #endif - shape_plan->key.free (); - free (shape_plan); + shape_plan->key.fini (); + hb_free (shape_plan); } /** @@ -404,7 +404,7 @@ _hb_shape_plan_execute_internal (hb_shape_plan_t *shape_plan, buffer->assert_unicode (); - if (unlikely (hb_object_is_inert (shape_plan))) + if (unlikely (!hb_object_is_valid (shape_plan))) return false; assert (shape_plan->face_unsafe == font->face); @@ -529,7 +529,7 @@ hb_shape_plan_create_cached2 (hb_face_t *face, retry: hb_face_t::plan_node_t *cached_plan_nodes = face->shape_plans; - bool dont_cache = hb_object_is_inert (face); + bool dont_cache = !hb_object_is_valid (face); if (likely (!dont_cache)) { @@ -560,7 +560,7 @@ retry: if (unlikely (dont_cache)) return shape_plan; - hb_face_t::plan_node_t *node = (hb_face_t::plan_node_t *) calloc (1, sizeof (hb_face_t::plan_node_t)); + hb_face_t::plan_node_t *node = (hb_face_t::plan_node_t *) hb_calloc (1, sizeof (hb_face_t::plan_node_t)); if (unlikely (!node)) return shape_plan; @@ -570,7 +570,7 @@ retry: if (unlikely (!face->shape_plans.cmpexch (cached_plan_nodes, node))) { hb_shape_plan_destroy (shape_plan); - free (node); + hb_free (node); goto retry; } DEBUG_MSG_FUNC (SHAPE_PLAN, shape_plan, "inserted into cache"); diff --git a/thirdparty/harfbuzz/src/hb-shape-plan.hh b/thirdparty/harfbuzz/src/hb-shape-plan.hh index 6da7edb2f8..8cb4ddb927 100644 --- a/thirdparty/harfbuzz/src/hb-shape-plan.hh +++ b/thirdparty/harfbuzz/src/hb-shape-plan.hh @@ -55,7 +55,7 @@ struct hb_shape_plan_key_t unsigned int num_coords, const char * const *shaper_list); - HB_INTERNAL void free () { ::free ((void *) user_features); } + HB_INTERNAL void fini () { hb_free ((void *) user_features); } HB_INTERNAL bool user_features_match (const hb_shape_plan_key_t *other); diff --git a/thirdparty/harfbuzz/src/hb-shape.cc b/thirdparty/harfbuzz/src/hb-shape.cc index c442f4403b..c1f619c81c 100644 --- a/thirdparty/harfbuzz/src/hb-shape.cc +++ b/thirdparty/harfbuzz/src/hb-shape.cc @@ -48,9 +48,7 @@ **/ -#if HB_USE_ATEXIT -static void free_static_shaper_list (); -#endif +static inline void free_static_shaper_list (); static const char *nil_shaper_list[] = {nullptr}; @@ -59,7 +57,7 @@ static struct hb_shaper_list_lazy_loader_t : hb_lazy_loader_t<const char *, { static const char ** create () { - const char **shaper_list = (const char **) calloc (1 + HB_SHAPERS_COUNT, sizeof (const char *)); + const char **shaper_list = (const char **) hb_calloc (1 + HB_SHAPERS_COUNT, sizeof (const char *)); if (unlikely (!shaper_list)) return nullptr; @@ -69,25 +67,21 @@ static struct hb_shaper_list_lazy_loader_t : hb_lazy_loader_t<const char *, shaper_list[i] = shapers[i].name; shaper_list[i] = nullptr; -#if HB_USE_ATEXIT - atexit (free_static_shaper_list); -#endif + hb_atexit (free_static_shaper_list); return shaper_list; } static void destroy (const char **l) - { free (l); } + { hb_free (l); } static const char ** get_null () { return nil_shaper_list; } } static_shaper_list; -#if HB_USE_ATEXIT -static +static inline void free_static_shaper_list () { static_shaper_list.free_instance (); } -#endif /** diff --git a/thirdparty/harfbuzz/src/hb-shaper.cc b/thirdparty/harfbuzz/src/hb-shaper.cc index 0ea68ad1f5..a11ed83afd 100644 --- a/thirdparty/harfbuzz/src/hb-shaper.cc +++ b/thirdparty/harfbuzz/src/hb-shaper.cc @@ -38,9 +38,7 @@ static const hb_shaper_entry_t all_shapers[] = { static_assert (0 != ARRAY_LENGTH_CONST (all_shapers), "No shaper enabled."); #endif -#if HB_USE_ATEXIT -static void free_static_shapers (); -#endif +static inline void free_static_shapers (); static struct hb_shapers_lazy_loader_t : hb_lazy_loader_t<const hb_shaper_entry_t, hb_shapers_lazy_loader_t> @@ -51,7 +49,7 @@ static struct hb_shapers_lazy_loader_t : hb_lazy_loader_t<const hb_shaper_entry_ if (!env || !*env) return nullptr; - hb_shaper_entry_t *shapers = (hb_shaper_entry_t *) calloc (1, sizeof (all_shapers)); + hb_shaper_entry_t *shapers = (hb_shaper_entry_t *) hb_calloc (1, sizeof (all_shapers)); if (unlikely (!shapers)) return nullptr; @@ -83,23 +81,19 @@ static struct hb_shapers_lazy_loader_t : hb_lazy_loader_t<const hb_shaper_entry_ p = end + 1; } -#if HB_USE_ATEXIT - atexit (free_static_shapers); -#endif + hb_atexit (free_static_shapers); return shapers; } - static void destroy (const hb_shaper_entry_t *p) { free ((void *) p); } + static void destroy (const hb_shaper_entry_t *p) { hb_free ((void *) p); } static const hb_shaper_entry_t *get_null () { return all_shapers; } } static_shapers; -#if HB_USE_ATEXIT -static +static inline void free_static_shapers () { static_shapers.free_instance (); } -#endif const hb_shaper_entry_t * _hb_shapers_get () diff --git a/thirdparty/harfbuzz/src/hb-static.cc b/thirdparty/harfbuzz/src/hb-static.cc index f5b7fa50a0..ec4b241470 100644 --- a/thirdparty/harfbuzz/src/hb-static.cc +++ b/thirdparty/harfbuzz/src/hb-static.cc @@ -43,6 +43,7 @@ uint64_t const _hb_NullPool[(HB_NULL_POOL_SIZE + sizeof (uint64_t) - 1) / sizeof /*thread_local*/ uint64_t _hb_CrapPool[(HB_NULL_POOL_SIZE + sizeof (uint64_t) - 1) / sizeof (uint64_t)] = {}; DEFINE_NULL_NAMESPACE_BYTES (OT, Index) = {0xFF,0xFF}; +DEFINE_NULL_NAMESPACE_BYTES (OT, VarIdx) = {0xFF,0xFF,0xFF,0xFF}; DEFINE_NULL_NAMESPACE_BYTES (OT, LangSys) = {0x00,0x00, 0xFF,0xFF, 0x00,0x00}; DEFINE_NULL_NAMESPACE_BYTES (OT, RangeRecord) = {0x00,0x01, 0x00,0x00, 0x00, 0x00}; DEFINE_NULL_NAMESPACE_BYTES (OT, CmapSubtableLongGroup) = {0x00,0x00,0x00,0x01, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00}; diff --git a/thirdparty/harfbuzz/src/hb-style.cc b/thirdparty/harfbuzz/src/hb-style.cc index 2f45d119f9..dfb1017c88 100644 --- a/thirdparty/harfbuzz/src/hb-style.cc +++ b/thirdparty/harfbuzz/src/hb-style.cc @@ -25,7 +25,6 @@ #include "hb.hh" #ifndef HB_NO_STYLE -#ifdef HB_EXPERIMENTAL_API #include "hb-ot-var-avar-table.hh" #include "hb-ot-var-fvar-table.hh" @@ -36,56 +35,46 @@ #include "hb-ot-face.hh" /** - * hb_style_tag_t: - * @HB_STYLE_TAG_ITALIC: Used to vary between non-italic and italic. - * A value of 0 can be interpreted as "Roman" (non-italic); a value of 1 can - * be interpreted as (fully) italic. - * @HB_STYLE_TAG_OPTICAL_SIZE: Used to vary design to suit different text sizes. - * Non-zero. Values can be interpreted as text size, in points. - * @HB_STYLE_TAG_SLANT: Used to vary between upright and slanted text. Values - * must be greater than -90 and less than +90. Values can be interpreted as - * the angle, in counter-clockwise degrees, of oblique slant from whatever the - * designer considers to be upright for that font design. - * @HB_STYLE_TAG_WIDTH: Used to vary width of text from narrower to wider. - * Non-zero. Values can be interpreted as a percentage of whatever the font - * designer considers “normal width” for that font design. - * @HB_STYLE_TAG_WEIGHT: Used to vary stroke thicknesses or other design details - * to give variation from lighter to blacker. Values can be interpreted in direct - * comparison to values for usWeightClass in the OS/2 table, - * or the CSS font-weight property. + * SECTION:hb-style + * @title: hb-style + * @short_description: Font Styles + * @include: hb.h * - * Defined by https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg - * - * Since: EXPERIMENTAL + * Functions for fetching style information from fonts. **/ -typedef enum { - HB_STYLE_TAG_ITALIC = HB_TAG ('i','t','a','l'), - HB_STYLE_TAG_OPTICAL_SIZE = HB_TAG ('o','p','s','z'), - HB_STYLE_TAG_SLANT = HB_TAG ('s','l','n','t'), - HB_STYLE_TAG_WIDTH = HB_TAG ('w','d','t','h'), - HB_STYLE_TAG_WEIGHT = HB_TAG ('w','g','h','t'), - /*< private >*/ - _HB_STYLE_TAG_MAX_VALUE = HB_TAG_MAX_SIGNED /*< skip >*/ -} hb_style_tag_t; +static inline float +_hb_angle_to_ratio (float a) +{ + return tanf (a * float (M_PI / 180.)); +} +#if 0 +static inline float +_hb_ratio_to_angle (float r) +{ + return atanf (r) * float (180. / M_PI); +} +#endif /** * hb_style_get_value: * @font: a #hb_font_t object. * @style_tag: a style tag. * - * Searches variation axes of a hb_font_t object for a specific axis first, + * Searches variation axes of a #hb_font_t object for a specific axis first, * if not set, then tries to get default style values from different * tables of the font. * * Returns: Corresponding axis or default value to a style tag. * - * Since: EXPERIMENTAL + * Since: 3.0.0 **/ float -hb_style_get_value (hb_font_t *font, hb_tag_t tag) +hb_style_get_value (hb_font_t *font, hb_style_tag_t style_tag) { - hb_style_tag_t style_tag = (hb_style_tag_t) tag; + if (unlikely (style_tag == HB_STYLE_TAG_SLANT_RATIO)) + return _hb_angle_to_ratio (hb_style_get_value (font, HB_STYLE_TAG_SLANT_ANGLE)); + hb_face_t *face = font->face; #ifndef HB_NO_VAR @@ -112,12 +101,14 @@ hb_style_get_value (hb_font_t *font, hb_tag_t tag) return face->table.OS2->is_italic () || face->table.head->is_italic () ? 1 : 0; case HB_STYLE_TAG_OPTICAL_SIZE: { - unsigned int lower, upper; + unsigned int lower, design, upper; return face->table.OS2->v5 ().get_optical_size (&lower, &upper) ? (float) (lower + upper) / 2.f + : hb_ot_layout_get_size_params (face, &design, nullptr, nullptr, nullptr, nullptr) + ? design / 10.f : 12.f; } - case HB_STYLE_TAG_SLANT: + case HB_STYLE_TAG_SLANT_ANGLE: return face->table.post->table->italicAngle.to_float (); case HB_STYLE_TAG_WIDTH: return face->table.OS2->has_data () @@ -133,4 +124,3 @@ hb_style_get_value (hb_font_t *font, hb_tag_t tag) } #endif -#endif diff --git a/thirdparty/harfbuzz/src/hb-style.h b/thirdparty/harfbuzz/src/hb-style.h index f5776cee58..30a6f2b878 100644 --- a/thirdparty/harfbuzz/src/hb-style.h +++ b/thirdparty/harfbuzz/src/hb-style.h @@ -33,10 +33,46 @@ HB_BEGIN_DECLS -#ifdef HB_EXPERIMENTAL_API +/** + * hb_style_tag_t: + * @HB_STYLE_TAG_ITALIC: Used to vary between non-italic and italic. + * A value of 0 can be interpreted as "Roman" (non-italic); a value of 1 can + * be interpreted as (fully) italic. + * @HB_STYLE_TAG_OPTICAL_SIZE: Used to vary design to suit different text sizes. + * Non-zero. Values can be interpreted as text size, in points. + * @HB_STYLE_TAG_SLANT_ANGLE: Used to vary between upright and slanted text. Values + * must be greater than -90 and less than +90. Values can be interpreted as + * the angle, in counter-clockwise degrees, of oblique slant from whatever the + * designer considers to be upright for that font design. + * @HB_STYLE_TAG_SLANT_RATIO: same as @HB_STYLE_TAG_SLANT_ANGLE expression as ratio. + * @HB_STYLE_TAG_WIDTH: Used to vary width of text from narrower to wider. + * Non-zero. Values can be interpreted as a percentage of whatever the font + * designer considers “normal width” for that font design. + * @HB_STYLE_TAG_WEIGHT: Used to vary stroke thicknesses or other design details + * to give variation from lighter to blacker. Values can be interpreted in direct + * comparison to values for usWeightClass in the OS/2 table, + * or the CSS font-weight property. + * + * Defined by [OpenType Design-Variation Axis Tag Registry](https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg). + * + * Since: 3.0.0 + **/ +typedef enum +{ + HB_STYLE_TAG_ITALIC = HB_TAG ('i','t','a','l'), + HB_STYLE_TAG_OPTICAL_SIZE = HB_TAG ('o','p','s','z'), + HB_STYLE_TAG_SLANT_ANGLE = HB_TAG ('s','l','n','t'), + HB_STYLE_TAG_SLANT_RATIO = HB_TAG ('S','l','n','t'), + HB_STYLE_TAG_WIDTH = HB_TAG ('w','d','t','h'), + HB_STYLE_TAG_WEIGHT = HB_TAG ('w','g','h','t'), + + /*< private >*/ + _HB_STYLE_TAG_MAX_VALUE = HB_TAG_MAX_SIGNED /*< skip >*/ +} hb_style_tag_t; + + HB_EXTERN float -hb_style_get_value (hb_font_t *font, hb_tag_t style_tag); -#endif +hb_style_get_value (hb_font_t *font, hb_style_tag_t style_tag); HB_END_DECLS diff --git a/thirdparty/harfbuzz/src/hb-subset-cff-common.cc b/thirdparty/harfbuzz/src/hb-subset-cff-common.cc index 04e1db24ac..711b2236d6 100644 --- a/thirdparty/harfbuzz/src/hb-subset-cff-common.cc +++ b/thirdparty/harfbuzz/src/hb-subset-cff-common.cc @@ -38,13 +38,12 @@ using namespace CFF; -/** - * hb_plan_subset_cff_fdselect - * Determine an optimal FDSelect format according to a provided plan. + +/* Determine an optimal FDSelect format according to a provided plan. * * Return value: FDSelect format, size, and ranges for the most compact subset FDSelect * along with a font index remapping table - **/ + */ bool hb_plan_subset_cff_fdselect (const hb_subset_plan_t *plan, @@ -169,10 +168,7 @@ serialize_fdselect_3_4 (hb_serialize_context_t *c, return_trace (true); } -/** - * hb_serialize_cff_fdselect - * Serialize a subset FDSelect format planned above. - **/ +/* Serialize a subset FDSelect format planned above. */ bool hb_serialize_cff_fdselect (hb_serialize_context_t *c, const unsigned int num_glyphs, diff --git a/thirdparty/harfbuzz/src/hb-subset-cff-common.hh b/thirdparty/harfbuzz/src/hb-subset-cff-common.hh index 422b20b8d0..7fd96ca86d 100644 --- a/thirdparty/harfbuzz/src/hb-subset-cff-common.hh +++ b/thirdparty/harfbuzz/src/hb-subset-cff-common.hh @@ -259,7 +259,10 @@ struct subr_flattener_t return false; cs_interpreter_t<ENV, OPSET, flatten_param_t> interp; interp.env.init (str, acc, fd); - flatten_param_t param = { flat_charstrings[i], plan->drop_hints }; + flatten_param_t param = { + flat_charstrings[i], + (bool) (plan->flags & HB_SUBSET_FLAGS_NO_HINTING) + }; if (unlikely (!interp.interpret (param))) return false; } @@ -636,7 +639,7 @@ struct subr_subsetter_t param.init (&parsed_charstrings[i], &parsed_global_subrs, &parsed_local_subrs[fd], closures.global_closure, closures.local_closures[fd], - plan->drop_hints); + plan->flags & HB_SUBSET_FLAGS_NO_HINTING); if (unlikely (!interp.interpret (param))) return false; @@ -645,7 +648,7 @@ struct subr_subsetter_t SUBSETTER::complete_parsed_str (interp.env, param, parsed_charstrings[i]); } - if (plan->drop_hints) + if (plan->flags & HB_SUBSET_FLAGS_NO_HINTING) { /* mark hint ops and arguments for drop */ for (unsigned int i = 0; i < plan->num_output_glyphs (); i++) @@ -660,7 +663,7 @@ struct subr_subsetter_t param.init (&parsed_charstrings[i], &parsed_global_subrs, &parsed_local_subrs[fd], closures.global_closure, closures.local_closures[fd], - plan->drop_hints); + plan->flags & HB_SUBSET_FLAGS_NO_HINTING); drop_hints_param_t drop; if (drop_hints_in_str (parsed_charstrings[i], param, drop)) @@ -685,7 +688,7 @@ struct subr_subsetter_t param.init (&parsed_charstrings[i], &parsed_global_subrs, &parsed_local_subrs[fd], closures.global_closure, closures.local_closures[fd], - plan->drop_hints); + plan->flags & HB_SUBSET_FLAGS_NO_HINTING); collect_subr_refs_in_str (parsed_charstrings[i], param); } } diff --git a/thirdparty/harfbuzz/src/hb-subset-cff1.cc b/thirdparty/harfbuzz/src/hb-subset-cff1.cc index df322f8451..b4e24122c9 100644 --- a/thirdparty/harfbuzz/src/hb-subset-cff1.cc +++ b/thirdparty/harfbuzz/src/hb-subset-cff1.cc @@ -402,7 +402,7 @@ struct cff_subset_plan { void plan_subset_encoding (const OT::cff1::accelerator_subset_t &acc, hb_subset_plan_t *plan) { const Encoding *encoding = acc.encoding; - unsigned int size0, size1, supp_size; + unsigned int size0, size1; hb_codepoint_t code, last_code = CFF_UNDEF_CODE; hb_vector_t<hb_codepoint_t> supp_codes; @@ -412,7 +412,6 @@ struct cff_subset_plan { return; } - supp_size = 0; supp_codes.init (); subset_enc_num_codes = plan->num_output_glyphs () - 1; @@ -448,7 +447,6 @@ struct cff_subset_plan { code_pair_t pair = { supp_codes[i], sid }; subset_enc_supp_codes.push (pair); } - supp_size += SuppEncoding::static_size * supp_codes.length; } } supp_codes.fini (); @@ -545,8 +543,8 @@ struct cff_subset_plan { num_glyphs = plan->num_output_glyphs (); orig_fdcount = acc.fdCount; - drop_hints = plan->drop_hints; - desubroutinize = plan->desubroutinize; + drop_hints = plan->flags & HB_SUBSET_FLAGS_NO_HINTING; + desubroutinize = plan->flags & HB_SUBSET_FLAGS_DESUBROUTINIZE; /* check whether the subset renumbers any glyph IDs */ gid_renum = false; @@ -919,12 +917,6 @@ _hb_subset_cff1 (const OT::cff1::accelerator_subset_t &acc, return _serialize_cff1 (c->serializer, cff_plan, acc, c->plan->num_output_glyphs ()); } -/** - * hb_subset_cff1: - * Subsets the CFF table according to a provided plan. - * - * Return value: subsetted cff table. - **/ bool hb_subset_cff1 (hb_subset_context_t *c) { diff --git a/thirdparty/harfbuzz/src/hb-subset-cff2.cc b/thirdparty/harfbuzz/src/hb-subset-cff2.cc index 17ee040deb..896ae64016 100644 --- a/thirdparty/harfbuzz/src/hb-subset-cff2.cc +++ b/thirdparty/harfbuzz/src/hb-subset-cff2.cc @@ -262,8 +262,8 @@ struct cff2_subset_plan { { orig_fdcount = acc.fdArray->count; - drop_hints = plan->drop_hints; - desubroutinize = plan->desubroutinize; + drop_hints = plan->flags & HB_SUBSET_FLAGS_NO_HINTING; + desubroutinize = plan->flags & HB_SUBSET_FLAGS_DESUBROUTINIZE; if (desubroutinize) { @@ -470,10 +470,6 @@ _hb_subset_cff2 (const OT::cff2::accelerator_subset_t &acc, return _serialize_cff2 (c->serializer, cff2_plan, acc, c->plan->num_output_glyphs ()); } -/** - * hb_subset_cff2: - * Subsets the CFF2 table according to a provided subset context. - **/ bool hb_subset_cff2 (hb_subset_context_t *c) { diff --git a/thirdparty/harfbuzz/src/hb-subset-input.cc b/thirdparty/harfbuzz/src/hb-subset-input.cc index fe9be3ce02..4885280996 100644 --- a/thirdparty/harfbuzz/src/hb-subset-input.cc +++ b/thirdparty/harfbuzz/src/hb-subset-input.cc @@ -30,35 +30,37 @@ /** * hb_subset_input_create_or_fail: * - * Return value: New subset input. + * Creates a new subset input object. + * + * Return value: (transfer full): New subset input, or %NULL if failed. Destroy + * with hb_subset_input_destroy(). * * Since: 1.8.0 **/ hb_subset_input_t * -hb_subset_input_create_or_fail () +hb_subset_input_create_or_fail (void) { hb_subset_input_t *input = hb_object_create<hb_subset_input_t>(); if (unlikely (!input)) return nullptr; - input->unicodes = hb_set_create (); - input->glyphs = hb_set_create (); - input->name_ids = hb_set_create (); - hb_set_add_range (input->name_ids, 0, 6); - input->name_languages = hb_set_create (); - hb_set_add (input->name_languages, 0x0409); - input->drop_tables = hb_set_create (); - input->drop_hints = false; - input->desubroutinize = false; - input->retain_gids = false; - input->name_legacy = false; + for (auto& set : input->sets_iter ()) + set = hb_set_create (); + + if (input->in_error ()) + { + hb_subset_input_destroy (input); + return nullptr; + } + + input->flags = HB_SUBSET_FLAGS_DEFAULT; + + hb_set_add_range (input->sets.name_ids, 0, 6); + hb_set_add (input->sets.name_languages, 0x0409); hb_tag_t default_drop_tables[] = { // Layout disabled by default - HB_TAG ('G', 'S', 'U', 'B'), - HB_TAG ('G', 'P', 'O', 'S'), - HB_TAG ('G', 'D', 'E', 'F'), HB_TAG ('m', 'o', 'r', 'x'), HB_TAG ('m', 'o', 'r', 't'), HB_TAG ('k', 'e', 'r', 'x'), @@ -81,149 +83,281 @@ hb_subset_input_create_or_fail () HB_TAG ('S', 'i', 'l', 'f'), HB_TAG ('S', 'i', 'l', 'l'), }; + input->sets.drop_tables->add_array (default_drop_tables, ARRAY_LENGTH (default_drop_tables)); + + hb_tag_t default_no_subset_tables[] = { + HB_TAG ('a', 'v', 'a', 'r'), + HB_TAG ('f', 'v', 'a', 'r'), + HB_TAG ('g', 'a', 's', 'p'), + HB_TAG ('c', 'v', 't', ' '), + HB_TAG ('f', 'p', 'g', 'm'), + HB_TAG ('p', 'r', 'e', 'p'), + HB_TAG ('V', 'D', 'M', 'X'), + HB_TAG ('D', 'S', 'I', 'G'), + HB_TAG ('M', 'V', 'A', 'R'), + HB_TAG ('c', 'v', 'a', 'r'), + HB_TAG ('S', 'T', 'A', 'T'), + }; + input->sets.no_subset_tables->add_array (default_no_subset_tables, + ARRAY_LENGTH (default_no_subset_tables)); + + //copied from _layout_features_groups in fonttools + hb_tag_t default_layout_features[] = { + // default shaper + // common + HB_TAG ('r', 'v', 'r', 'n'), + HB_TAG ('c', 'c', 'm', 'p'), + HB_TAG ('l', 'i', 'g', 'a'), + HB_TAG ('l', 'o', 'c', 'l'), + HB_TAG ('m', 'a', 'r', 'k'), + HB_TAG ('m', 'k', 'm', 'k'), + HB_TAG ('r', 'l', 'i', 'g'), - input->drop_tables->add_array (default_drop_tables, ARRAY_LENGTH (default_drop_tables)); + //fractions + HB_TAG ('f', 'r', 'a', 'c'), + HB_TAG ('n', 'u', 'm', 'r'), + HB_TAG ('d', 'n', 'o', 'm'), + //horizontal + HB_TAG ('c', 'a', 'l', 't'), + HB_TAG ('c', 'l', 'i', 'g'), + HB_TAG ('c', 'u', 'r', 's'), + HB_TAG ('k', 'e', 'r', 'n'), + HB_TAG ('r', 'c', 'l', 't'), + + //vertical + HB_TAG ('v', 'a', 'l', 't'), + HB_TAG ('v', 'e', 'r', 't'), + HB_TAG ('v', 'k', 'r', 'n'), + HB_TAG ('v', 'p', 'a', 'l'), + HB_TAG ('v', 'r', 't', '2'), + + //ltr + HB_TAG ('l', 't', 'r', 'a'), + HB_TAG ('l', 't', 'r', 'm'), + + //rtl + HB_TAG ('r', 't', 'l', 'a'), + HB_TAG ('r', 't', 'l', 'm'), + + //Complex shapers + //arabic + HB_TAG ('i', 'n', 'i', 't'), + HB_TAG ('m', 'e', 'd', 'i'), + HB_TAG ('f', 'i', 'n', 'a'), + HB_TAG ('i', 's', 'o', 'l'), + HB_TAG ('m', 'e', 'd', '2'), + HB_TAG ('f', 'i', 'n', '2'), + HB_TAG ('f', 'i', 'n', '3'), + HB_TAG ('c', 's', 'w', 'h'), + HB_TAG ('m', 's', 'e', 't'), + HB_TAG ('s', 't', 'c', 'h'), + + //hangul + HB_TAG ('l', 'j', 'm', 'o'), + HB_TAG ('v', 'j', 'm', 'o'), + HB_TAG ('t', 'j', 'm', 'o'), + + //tibetan + HB_TAG ('a', 'b', 'v', 's'), + HB_TAG ('b', 'l', 'w', 's'), + HB_TAG ('a', 'b', 'v', 'm'), + HB_TAG ('b', 'l', 'w', 'm'), + + //indic + HB_TAG ('n', 'u', 'k', 't'), + HB_TAG ('a', 'k', 'h', 'n'), + HB_TAG ('r', 'p', 'h', 'f'), + HB_TAG ('r', 'k', 'r', 'f'), + HB_TAG ('p', 'r', 'e', 'f'), + HB_TAG ('b', 'l', 'w', 'f'), + HB_TAG ('h', 'a', 'l', 'f'), + HB_TAG ('a', 'b', 'v', 'f'), + HB_TAG ('p', 's', 't', 'f'), + HB_TAG ('c', 'f', 'a', 'r'), + HB_TAG ('v', 'a', 't', 'u'), + HB_TAG ('c', 'j', 'c', 't'), + HB_TAG ('i', 'n', 'i', 't'), + HB_TAG ('p', 'r', 'e', 's'), + HB_TAG ('a', 'b', 'v', 's'), + HB_TAG ('b', 'l', 'w', 's'), + HB_TAG ('p', 's', 't', 's'), + HB_TAG ('h', 'a', 'l', 'n'), + HB_TAG ('d', 'i', 's', 't'), + HB_TAG ('a', 'b', 'v', 'm'), + HB_TAG ('b', 'l', 'w', 'm'), + }; + + input->sets.layout_features->add_array (default_layout_features, ARRAY_LENGTH (default_layout_features)); + + if (input->in_error ()) + { + hb_subset_input_destroy (input); + return nullptr; + } return input; } /** * hb_subset_input_reference: (skip) - * @subset_input: a subset_input. + * @input: a #hb_subset_input_t object. * + * Increases the reference count on @input. * - * - * Return value: + * Return value: @input. * * Since: 1.8.0 **/ hb_subset_input_t * -hb_subset_input_reference (hb_subset_input_t *subset_input) +hb_subset_input_reference (hb_subset_input_t *input) { - return hb_object_reference (subset_input); + return hb_object_reference (input); } /** * hb_subset_input_destroy: - * @subset_input: a subset_input. + * @input: a #hb_subset_input_t object. + * + * Decreases the reference count on @input, and if it reaches zero, destroys + * @input, freeing all memory. * * Since: 1.8.0 **/ void -hb_subset_input_destroy (hb_subset_input_t *subset_input) +hb_subset_input_destroy (hb_subset_input_t *input) { - if (!hb_object_destroy (subset_input)) return; + if (!hb_object_destroy (input)) return; - hb_set_destroy (subset_input->unicodes); - hb_set_destroy (subset_input->glyphs); - hb_set_destroy (subset_input->name_ids); - hb_set_destroy (subset_input->name_languages); - hb_set_destroy (subset_input->drop_tables); + for (hb_set_t* set : input->sets_iter ()) + hb_set_destroy (set); - free (subset_input); + hb_free (input); } /** * hb_subset_input_unicode_set: - * @subset_input: a subset_input. + * @input: a #hb_subset_input_t object. + * + * Gets the set of Unicode code points to retain, the caller should modify the + * set as needed. + * + * Return value: (transfer none): pointer to the #hb_set_t of Unicode code + * points. * * Since: 1.8.0 **/ HB_EXTERN hb_set_t * -hb_subset_input_unicode_set (hb_subset_input_t *subset_input) +hb_subset_input_unicode_set (hb_subset_input_t *input) { - return subset_input->unicodes; + return input->sets.unicodes; } /** * hb_subset_input_glyph_set: - * @subset_input: a subset_input. + * @input: a #hb_subset_input_t object. + * + * Gets the set of glyph IDs to retain, the caller should modify the set as + * needed. + * + * Return value: (transfer none): pointer to the #hb_set_t of glyph IDs. * * Since: 1.8.0 **/ HB_EXTERN hb_set_t * -hb_subset_input_glyph_set (hb_subset_input_t *subset_input) -{ - return subset_input->glyphs; -} - -HB_EXTERN hb_set_t * -hb_subset_input_nameid_set (hb_subset_input_t *subset_input) -{ - return subset_input->name_ids; -} - -HB_EXTERN hb_set_t * -hb_subset_input_namelangid_set (hb_subset_input_t *subset_input) +hb_subset_input_glyph_set (hb_subset_input_t *input) { - return subset_input->name_languages; + return input->sets.glyphs; } +/** + * hb_subset_input_set: + * @input: a #hb_subset_input_t object. + * @set_type: a #hb_subset_sets_t set type. + * + * Gets the set of the specified type. + * + * Return value: (transfer none): pointer to the #hb_set_t of the specified type. + * + * Since: 2.9.1 + **/ HB_EXTERN hb_set_t * -hb_subset_input_drop_tables_set (hb_subset_input_t *subset_input) -{ - return subset_input->drop_tables; -} - -HB_EXTERN void -hb_subset_input_set_drop_hints (hb_subset_input_t *subset_input, - hb_bool_t drop_hints) +hb_subset_input_set (hb_subset_input_t *input, hb_subset_sets_t set_type) { - subset_input->drop_hints = drop_hints; + return input->sets_iter () [set_type]; } -HB_EXTERN hb_bool_t -hb_subset_input_get_drop_hints (hb_subset_input_t *subset_input) -{ - return subset_input->drop_hints; -} - -HB_EXTERN void -hb_subset_input_set_desubroutinize (hb_subset_input_t *subset_input, - hb_bool_t desubroutinize) -{ - subset_input->desubroutinize = desubroutinize; -} - -HB_EXTERN hb_bool_t -hb_subset_input_get_desubroutinize (hb_subset_input_t *subset_input) +/** + * hb_subset_input_get_flags: + * @input: a #hb_subset_input_t object. + * + * Gets all of the subsetting flags in the input object. + * + * Return value: the subsetting flags bit field. + * + * Since: 2.9.0 + **/ +HB_EXTERN hb_subset_flags_t +hb_subset_input_get_flags (hb_subset_input_t *input) { - return subset_input->desubroutinize; + return (hb_subset_flags_t) input->flags; } /** - * hb_subset_input_set_retain_gids: - * @subset_input: a subset_input. - * @retain_gids: If true the subsetter will not renumber glyph ids. - * Since: 2.4.0 + * hb_subset_input_set_flags: + * @input: a #hb_subset_input_t object. + * @value: bit field of flags + * + * Sets all of the flags in the input object to the values specified by the bit + * field. + * + * Since: 2.9.0 **/ HB_EXTERN void -hb_subset_input_set_retain_gids (hb_subset_input_t *subset_input, - hb_bool_t retain_gids) +hb_subset_input_set_flags (hb_subset_input_t *input, + unsigned value) { - subset_input->retain_gids = retain_gids; + input->flags = (hb_subset_flags_t) value; } /** - * hb_subset_input_get_retain_gids: - * Returns: value of retain_gids. - * Since: 2.4.0 + * hb_subset_input_set_user_data: (skip) + * @input: a #hb_subset_input_t object. + * @key: The user-data key to set + * @data: A pointer to the user data + * @destroy: (nullable): A callback to call when @data is not needed anymore + * @replace: Whether to replace an existing data with the same key + * + * Attaches a user-data key/data pair to the given subset input object. + * + * Return value: %true if success, %false otherwise + * + * Since: 2.9.0 **/ -HB_EXTERN hb_bool_t -hb_subset_input_get_retain_gids (hb_subset_input_t *subset_input) +hb_bool_t +hb_subset_input_set_user_data (hb_subset_input_t *input, + hb_user_data_key_t *key, + void * data, + hb_destroy_func_t destroy, + hb_bool_t replace) { - return subset_input->retain_gids; + return hb_object_set_user_data (input, key, data, destroy, replace); } -HB_EXTERN void -hb_subset_input_set_name_legacy (hb_subset_input_t *subset_input, - hb_bool_t name_legacy) -{ - subset_input->name_legacy = name_legacy; -} - -HB_EXTERN hb_bool_t -hb_subset_input_get_name_legacy (hb_subset_input_t *subset_input) +/** + * hb_subset_input_get_user_data: (skip) + * @input: a #hb_subset_input_t object. + * @key: The user-data key to query + * + * Fetches the user data associated with the specified key, + * attached to the specified subset input object. + * + * Return value: (transfer none): A pointer to the user data + * + * Since: 2.9.0 + **/ +void * +hb_subset_input_get_user_data (const hb_subset_input_t *input, + hb_user_data_key_t *key) { - return subset_input->name_legacy; + return hb_object_get_user_data (input, key); } diff --git a/thirdparty/harfbuzz/src/hb-subset-input.hh b/thirdparty/harfbuzz/src/hb-subset-input.hh index 0aeb96695b..a3e28b0562 100644 --- a/thirdparty/harfbuzz/src/hb-subset-input.hh +++ b/thirdparty/harfbuzz/src/hb-subset-input.hh @@ -31,30 +31,51 @@ #include "hb.hh" #include "hb-subset.h" +#include "hb-map.hh" +#include "hb-set.hh" #include "hb-font.hh" +HB_MARK_AS_FLAG_T (hb_subset_flags_t); + struct hb_subset_input_t { hb_object_header_t header; - hb_set_t *unicodes; - hb_set_t *glyphs; - hb_set_t *name_ids; - hb_set_t *name_languages; - hb_set_t *drop_tables; - - bool drop_hints; - bool desubroutinize; - bool retain_gids; - bool name_legacy; - /* TODO - * - * features - * lookups - * name_ids - * ... - */ + union { + struct { + hb_set_t *glyphs; + hb_set_t *unicodes; + hb_set_t *no_subset_tables; + hb_set_t *drop_tables; + hb_set_t *name_ids; + hb_set_t *name_languages; + hb_set_t *layout_features; + } sets; + hb_set_t* set_ptrs[sizeof (sets) / sizeof (hb_set_t*)]; + }; + + unsigned flags; + + inline unsigned num_sets () const + { + return sizeof (set_ptrs) / sizeof (hb_set_t*); + } + + inline hb_array_t<hb_set_t*> sets_iter () + { + return hb_array_t<hb_set_t*> (set_ptrs, num_sets ()); + } + + bool in_error () const + { + for (unsigned i = 0; i < num_sets (); i++) + { + if (unlikely (set_ptrs[i]->in_error ())) + return true; + } + return false; + } }; diff --git a/thirdparty/harfbuzz/src/hb-subset-plan.cc b/thirdparty/harfbuzz/src/hb-subset-plan.cc index d055783a4d..677df35fad 100644 --- a/thirdparty/harfbuzz/src/hb-subset-plan.cc +++ b/thirdparty/harfbuzz/src/hb-subset-plan.cc @@ -35,10 +35,12 @@ #include "hb-ot-layout-gsub-table.hh" #include "hb-ot-cff1-table.hh" #include "hb-ot-color-colr-table.hh" +#include "hb-ot-color-colrv1-closure.hh" #include "hb-ot-var-fvar-table.hh" #include "hb-ot-stat-table.hh" +typedef hb_hashmap_t<unsigned, hb_set_t *, (unsigned)-1, nullptr> script_langsys_map; #ifndef HB_NO_SUBSET_CFF static inline void _add_cff_seac_components (const OT::cff1::accelerator_t &cff, @@ -54,7 +56,23 @@ _add_cff_seac_components (const OT::cff1::accelerator_t &cff, } #endif -#ifndef HB_NO_SUBSET_LAYOUT +static void +_remap_palette_indexes (const hb_set_t *palette_indexes, + hb_map_t *mapping /* OUT */) +{ + unsigned new_idx = 0; + for (unsigned palette_index : palette_indexes->iter ()) + { + if (palette_index == 0xFFFF) + { + mapping->set (palette_index, palette_index); + continue; + } + mapping->set (palette_index, new_idx); + new_idx++; + } +} + static void _remap_indexes (const hb_set_t *indexes, hb_map_t *mapping /* OUT */) @@ -66,73 +84,100 @@ _remap_indexes (const hb_set_t *indexes, } -static inline void -_gsub_closure_glyphs_lookups_features (hb_face_t *face, - hb_set_t *gids_to_retain, - hb_map_t *gsub_lookups, - hb_map_t *gsub_features) +#ifndef HB_NO_SUBSET_LAYOUT +typedef void (*layout_collect_func_t) (hb_face_t *face, hb_tag_t table_tag, const hb_tag_t *scripts, const hb_tag_t *languages, const hb_tag_t *features, hb_set_t *lookup_indexes /* OUT */); + + +template <typename T> +static void _collect_layout_indices (hb_face_t *face, + const T& table, + const hb_set_t *layout_features_to_retain, + layout_collect_func_t layout_collect_func, + hb_set_t *indices /* OUT */) { - hb_set_t lookup_indices; - hb_ot_layout_collect_lookups (face, - HB_OT_TAG_GSUB, - nullptr, - nullptr, - nullptr, - &lookup_indices); - hb_ot_layout_lookups_substitute_closure (face, - &lookup_indices, - gids_to_retain); - hb_blob_ptr_t<OT::GSUB> gsub = hb_sanitize_context_t ().reference_table<OT::GSUB> (face); - gsub->closure_lookups (face, - gids_to_retain, - &lookup_indices); - _remap_indexes (&lookup_indices, gsub_lookups); + hb_vector_t<hb_tag_t> features; + if (!features.alloc (table.get_feature_count () + 1)) + return; - // Collect and prune features - hb_set_t feature_indices; - hb_ot_layout_collect_features (face, - HB_OT_TAG_GSUB, - nullptr, - nullptr, - nullptr, - &feature_indices); - gsub->prune_features (gsub_lookups, &feature_indices); - _remap_indexes (&feature_indices, gsub_features); - - gsub.destroy (); + for (unsigned i = 0; i < table.get_feature_count (); i++) + { + hb_tag_t tag = table.get_feature_tag (i); + if (tag && layout_features_to_retain->has (tag)) + features.push (tag); + } + + if (!features) + return; + + // The collect function needs a null element to signal end of the array. + features.push (0); + + if (features.get_size () == table.get_feature_count () + 1) + { + // Looking for all features, trigger the faster collection method. + layout_collect_func (face, + T::tableTag, + nullptr, + nullptr, + nullptr, + indices); + return; + } + + layout_collect_func (face, + T::tableTag, + nullptr, + nullptr, + features.arrayZ, + indices); } +template <typename T> static inline void -_gpos_closure_lookups_features (hb_face_t *face, - const hb_set_t *gids_to_retain, - hb_map_t *gpos_lookups, - hb_map_t *gpos_features) +_closure_glyphs_lookups_features (hb_face_t *face, + hb_set_t *gids_to_retain, + const hb_set_t *layout_features_to_retain, + hb_map_t *lookups, + hb_map_t *features, + script_langsys_map *langsys_map) { + hb_blob_ptr_t<T> table = hb_sanitize_context_t ().reference_table<T> (face); + hb_tag_t table_tag = table->tableTag; hb_set_t lookup_indices; - hb_ot_layout_collect_lookups (face, - HB_OT_TAG_GPOS, - nullptr, - nullptr, - nullptr, - &lookup_indices); - hb_blob_ptr_t<OT::GPOS> gpos = hb_sanitize_context_t ().reference_table<OT::GPOS> (face); - gpos->closure_lookups (face, - gids_to_retain, + _collect_layout_indices<T> (face, + *table, + layout_features_to_retain, + hb_ot_layout_collect_lookups, + &lookup_indices); + + if (table_tag == HB_OT_TAG_GSUB) + hb_ot_layout_lookups_substitute_closure (face, + &lookup_indices, + gids_to_retain); + table->closure_lookups (face, + gids_to_retain, &lookup_indices); - _remap_indexes (&lookup_indices, gpos_lookups); + _remap_indexes (&lookup_indices, lookups); // Collect and prune features hb_set_t feature_indices; - hb_ot_layout_collect_features (face, - HB_OT_TAG_GPOS, - nullptr, - nullptr, - nullptr, - &feature_indices); - gpos->prune_features (gpos_lookups, &feature_indices); - _remap_indexes (&feature_indices, gpos_features); - gpos.destroy (); + _collect_layout_indices<T> (face, + *table, + layout_features_to_retain, + hb_ot_layout_collect_features, + &feature_indices); + + table->prune_features (lookups, &feature_indices); + hb_map_t duplicate_feature_map; + table->find_duplicate_features (lookups, &feature_indices, &duplicate_feature_map); + + feature_indices.clear (); + table->prune_langsys (&duplicate_feature_map, langsys_map, &feature_indices); + _remap_indexes (&feature_indices, features); + + table.destroy (); } + #endif #ifndef HB_NO_VAR @@ -166,9 +211,9 @@ static inline void #endif static inline void -_cmap_closure (hb_face_t *face, - const hb_set_t *unicodes, - hb_set_t *glyphset) +_cmap_closure (hb_face_t *face, + const hb_set_t *unicodes, + hb_set_t *glyphset) { OT::cmap::accelerator_t cmap; cmap.init (face); @@ -189,20 +234,74 @@ _remove_invalid_gids (hb_set_t *glyphs, } static void +_populate_unicodes_to_retain (const hb_set_t *unicodes, + const hb_set_t *glyphs, + hb_subset_plan_t *plan) +{ + OT::cmap::accelerator_t cmap; + cmap.init (plan->source); + + constexpr static const int size_threshold = 4096; + + if (glyphs->is_empty () && unicodes->get_population () < size_threshold) + { + /* This is the fast path if it's anticipated that size of unicodes + * is << than the number of codepoints in the font. */ + for (hb_codepoint_t cp : *unicodes) + { + hb_codepoint_t gid; + if (!cmap.get_nominal_glyph (cp, &gid)) + { + DEBUG_MSG(SUBSET, nullptr, "Drop U+%04X; no gid", cp); + continue; + } + + plan->codepoint_to_glyph->set (cp, gid); + } + } + else + { + hb_map_t unicode_glyphid_map; + cmap.collect_mapping (hb_set_get_empty (), &unicode_glyphid_map); + + for (hb_pair_t<hb_codepoint_t, hb_codepoint_t> cp_gid : + + unicode_glyphid_map.iter ()) + { + if (!unicodes->has (cp_gid.first) && !glyphs->has (cp_gid.second)) + continue; + + plan->codepoint_to_glyph->set (cp_gid.first, cp_gid.second); + } + + /* Add gids which where requested, but not mapped in cmap */ + // TODO(garretrieger): + // Once https://github.com/harfbuzz/harfbuzz/issues/3169 + // is implemented, this can be done with union and del_range + for (hb_codepoint_t gid : glyphs->iter ()) + { + if (gid >= plan->source->get_num_glyphs ()) + break; + plan->_glyphset_gsub->add (gid); + } + } + + + plan->codepoint_to_glyph->keys () | hb_sink (plan->unicodes); + + plan->codepoint_to_glyph->values () | hb_sink (plan->_glyphset_gsub); + + cmap.fini (); +} + +static void _populate_gids_to_retain (hb_subset_plan_t* plan, - const hb_set_t *unicodes, - const hb_set_t *input_glyphs_to_retain, bool close_over_gsub, bool close_over_gpos, bool close_over_gdef) { - OT::cmap::accelerator_t cmap; OT::glyf::accelerator_t glyf; #ifndef HB_NO_SUBSET_CFF OT::cff1::accelerator_t cff; #endif OT::COLR::accelerator_t colr; - cmap.init (plan->source); glyf.init (plan->source); #ifndef HB_NO_SUBSET_CFF cff.init (plan->source); @@ -210,73 +309,88 @@ _populate_gids_to_retain (hb_subset_plan_t* plan, colr.init (plan->source); plan->_glyphset_gsub->add (0); // Not-def - hb_set_union (plan->_glyphset_gsub, input_glyphs_to_retain); - - hb_codepoint_t cp = HB_SET_VALUE_INVALID; - while (unicodes->next (&cp)) - { - hb_codepoint_t gid; - if (!cmap.get_nominal_glyph (cp, &gid)) - { - DEBUG_MSG(SUBSET, nullptr, "Drop U+%04X; no gid", cp); - continue; - } - plan->unicodes->add (cp); - plan->codepoint_to_glyph->set (cp, gid); - plan->_glyphset_gsub->add (gid); - } _cmap_closure (plan->source, plan->unicodes, plan->_glyphset_gsub); #ifndef HB_NO_SUBSET_LAYOUT if (close_over_gsub) // closure all glyphs/lookups/features needed for GSUB substitutions. - _gsub_closure_glyphs_lookups_features (plan->source, plan->_glyphset_gsub, plan->gsub_lookups, plan->gsub_features); + _closure_glyphs_lookups_features<OT::GSUB> ( + plan->source, + plan->_glyphset_gsub, + plan->layout_features, + plan->gsub_lookups, + plan->gsub_features, + plan->gsub_langsys); if (close_over_gpos) - _gpos_closure_lookups_features (plan->source, plan->_glyphset_gsub, plan->gpos_lookups, plan->gpos_features); + _closure_glyphs_lookups_features<OT::GPOS> ( + plan->source, + plan->_glyphset_gsub, + plan->layout_features, + plan->gpos_lookups, + plan->gpos_features, + plan->gpos_langsys); #endif _remove_invalid_gids (plan->_glyphset_gsub, plan->source->get_num_glyphs ()); + // Collect all glyphs referenced by COLRv0 + hb_set_t* cur_glyphset = plan->_glyphset_gsub; + hb_set_t glyphset_colrv0; + if (colr.is_valid ()) + { + glyphset_colrv0.union_ (*cur_glyphset); + for (hb_codepoint_t gid : cur_glyphset->iter ()) + colr.closure_glyphs (gid, &glyphset_colrv0); + cur_glyphset = &glyphset_colrv0; + } + + hb_set_t palette_indices; + colr.closure_V0palette_indices (cur_glyphset, &palette_indices); + + hb_set_t layer_indices; + colr.closure_forV1 (cur_glyphset, &layer_indices, &palette_indices); + _remap_indexes (&layer_indices, plan->colrv1_layers); + _remap_palette_indexes (&palette_indices, plan->colr_palettes); + colr.fini (); + _remove_invalid_gids (cur_glyphset, plan->source->get_num_glyphs ()); + // Populate a full set of glyphs to retain by adding all referenced // composite glyphs. - hb_codepoint_t gid = HB_SET_VALUE_INVALID; - while (plan->_glyphset_gsub->next (&gid)) + for (hb_codepoint_t gid : cur_glyphset->iter ()) { glyf.add_gid_and_children (gid, plan->_glyphset); #ifndef HB_NO_SUBSET_CFF if (cff.is_valid ()) _add_cff_seac_components (cff, gid, plan->_glyphset); #endif - if (colr.is_valid ()) - colr.closure_glyphs (gid, plan->_glyphset); } _remove_invalid_gids (plan->_glyphset, plan->source->get_num_glyphs ()); + #ifndef HB_NO_VAR if (close_over_gdef) _collect_layout_variation_indices (plan->source, - plan->_glyphset_gsub, - plan->gpos_lookups, - plan->layout_variation_indices, - plan->layout_variation_idx_map); + plan->_glyphset_gsub, + plan->gpos_lookups, + plan->layout_variation_indices, + plan->layout_variation_idx_map); #endif #ifndef HB_NO_SUBSET_CFF cff.fini (); #endif glyf.fini (); - cmap.fini (); } static void _create_old_gid_to_new_gid_map (const hb_face_t *face, - bool retain_gids, - const hb_set_t *all_gids_to_retain, - hb_map_t *glyph_map, /* OUT */ - hb_map_t *reverse_glyph_map, /* OUT */ - unsigned int *num_glyphs /* OUT */) + bool retain_gids, + const hb_set_t *all_gids_to_retain, + hb_map_t *glyph_map, /* OUT */ + hb_map_t *reverse_glyph_map, /* OUT */ + unsigned int *num_glyphs /* OUT */) { if (!retain_gids) { @@ -319,33 +433,36 @@ _nameid_closure (hb_face_t *face, /** * hb_subset_plan_create: + * @face: font face to create the plan for. + * @input: a #hb_subset_input_t input. + * * Computes a plan for subsetting the supplied face according * to a provided input. The plan describes * which tables and glyphs should be retained. * - * Return value: New subset plan. + * Return value: (transfer full): New subset plan. Destroy with + * hb_subset_plan_destroy(). * * Since: 1.7.5 **/ hb_subset_plan_t * -hb_subset_plan_create (hb_face_t *face, - hb_subset_input_t *input) +hb_subset_plan_create (hb_face_t *face, + const hb_subset_input_t *input) { hb_subset_plan_t *plan; if (unlikely (!(plan = hb_object_create<hb_subset_plan_t> ()))) return const_cast<hb_subset_plan_t *> (&Null (hb_subset_plan_t)); plan->successful = true; - plan->drop_hints = input->drop_hints; - plan->desubroutinize = input->desubroutinize; - plan->retain_gids = input->retain_gids; - plan->name_legacy = input->name_legacy; + plan->flags = input->flags; plan->unicodes = hb_set_create (); - plan->name_ids = hb_set_reference (input->name_ids); + plan->name_ids = hb_set_copy (input->sets.name_ids); _nameid_closure (face, plan->name_ids); - plan->name_languages = hb_set_reference (input->name_languages); - plan->glyphs_requested = hb_set_reference (input->glyphs); - plan->drop_tables = hb_set_reference (input->drop_tables); + plan->name_languages = hb_set_copy (input->sets.name_languages); + plan->layout_features = hb_set_copy (input->sets.layout_features); + plan->glyphs_requested = hb_set_copy (input->sets.glyphs); + plan->drop_tables = hb_set_copy (input->sets.drop_tables); + plan->no_subset_tables = hb_set_copy (input->sets.no_subset_tables); plan->source = hb_face_reference (face); plan->dest = hb_face_builder_create (); @@ -356,20 +473,32 @@ hb_subset_plan_create (hb_face_t *face, plan->reverse_glyph_map = hb_map_create (); plan->gsub_lookups = hb_map_create (); plan->gpos_lookups = hb_map_create (); + + if (plan->check_success (plan->gsub_langsys = hb_object_create<script_langsys_map> ())) + plan->gsub_langsys->init_shallow (); + if (plan->check_success (plan->gpos_langsys = hb_object_create<script_langsys_map> ())) + plan->gpos_langsys->init_shallow (); + plan->gsub_features = hb_map_create (); plan->gpos_features = hb_map_create (); + plan->colrv1_layers = hb_map_create (); + plan->colr_palettes = hb_map_create (); plan->layout_variation_indices = hb_set_create (); plan->layout_variation_idx_map = hb_map_create (); + if (plan->in_error ()) { + return plan; + } + + _populate_unicodes_to_retain (input->sets.unicodes, input->sets.glyphs, plan); + _populate_gids_to_retain (plan, - input->unicodes, - input->glyphs, - !input->drop_tables->has (HB_OT_TAG_GSUB), - !input->drop_tables->has (HB_OT_TAG_GPOS), - !input->drop_tables->has (HB_OT_TAG_GDEF)); + !input->sets.drop_tables->has (HB_OT_TAG_GSUB), + !input->sets.drop_tables->has (HB_OT_TAG_GPOS), + !input->sets.drop_tables->has (HB_OT_TAG_GDEF)); _create_old_gid_to_new_gid_map (face, - input->retain_gids, + input->flags & HB_SUBSET_FLAGS_RETAIN_GIDS, plan->_glyphset, plan->glyph_map, plan->reverse_glyph_map, @@ -380,6 +509,10 @@ hb_subset_plan_create (hb_face_t *face, /** * hb_subset_plan_destroy: + * @plan: a #hb_subset_plan_t + * + * Decreases the reference count on @plan, and if it reaches zero, destroys + * @plan, freeing all memory. * * Since: 1.7.5 **/ @@ -391,8 +524,10 @@ hb_subset_plan_destroy (hb_subset_plan_t *plan) hb_set_destroy (plan->unicodes); hb_set_destroy (plan->name_ids); hb_set_destroy (plan->name_languages); + hb_set_destroy (plan->layout_features); hb_set_destroy (plan->glyphs_requested); hb_set_destroy (plan->drop_tables); + hb_set_destroy (plan->no_subset_tables); hb_face_destroy (plan->source); hb_face_destroy (plan->dest); hb_map_destroy (plan->codepoint_to_glyph); @@ -404,9 +539,30 @@ hb_subset_plan_destroy (hb_subset_plan_t *plan) hb_map_destroy (plan->gpos_lookups); hb_map_destroy (plan->gsub_features); hb_map_destroy (plan->gpos_features); + hb_map_destroy (plan->colrv1_layers); + hb_map_destroy (plan->colr_palettes); hb_set_destroy (plan->layout_variation_indices); hb_map_destroy (plan->layout_variation_idx_map); + if (plan->gsub_langsys) + { + for (auto _ : plan->gsub_langsys->iter ()) + hb_set_destroy (_.second); + + hb_object_destroy (plan->gsub_langsys); + plan->gsub_langsys->fini_shallow (); + hb_free (plan->gsub_langsys); + } + + if (plan->gpos_langsys) + { + for (auto _ : plan->gpos_langsys->iter ()) + hb_set_destroy (_.second); + + hb_object_destroy (plan->gpos_langsys); + plan->gpos_langsys->fini_shallow (); + hb_free (plan->gpos_langsys); + } - free (plan); + hb_free (plan); } diff --git a/thirdparty/harfbuzz/src/hb-subset-plan.hh b/thirdparty/harfbuzz/src/hb-subset-plan.hh index cc9cb7a1a2..92a4e27ccc 100644 --- a/thirdparty/harfbuzz/src/hb-subset-plan.hh +++ b/thirdparty/harfbuzz/src/hb-subset-plan.hh @@ -39,11 +39,8 @@ struct hb_subset_plan_t { hb_object_header_t header; - bool successful : 1; - bool drop_hints : 1; - bool desubroutinize : 1; - bool retain_gids : 1; - bool name_legacy : 1; + bool successful; + unsigned flags; // For each cp that we'd like to retain maps to the corresponding gid. hb_set_t *unicodes; @@ -54,9 +51,15 @@ struct hb_subset_plan_t // name_languages we would like to retain hb_set_t *name_languages; + //layout features which will be preserved + hb_set_t *layout_features; + //glyph ids requested to retain hb_set_t *glyphs_requested; + // Tables which should not be processed, just pass them through. + hb_set_t *no_subset_tables; + // Tables which should be dropped. hb_set_t *drop_tables; @@ -79,10 +82,18 @@ struct hb_subset_plan_t hb_map_t *gsub_lookups; hb_map_t *gpos_lookups; - //active features we'd like to retain + //active langsys we'd like to retain + hb_hashmap_t<unsigned, hb_set_t *, (unsigned)-1, nullptr> *gsub_langsys; + hb_hashmap_t<unsigned, hb_set_t *, (unsigned)-1, nullptr> *gpos_langsys; + + //active features after removing redundant langsys and prune_features hb_map_t *gsub_features; hb_map_t *gpos_features; + //active layers/palettes we'd like to retain + hb_map_t *colrv1_layers; + hb_map_t *colr_palettes; + //The set of layout item variation store delta set indices to be retained hb_set_t *layout_variation_indices; //Old -> New layout item variation store delta set index mapping @@ -189,7 +200,7 @@ typedef struct hb_subset_plan_t hb_subset_plan_t; HB_INTERNAL hb_subset_plan_t * hb_subset_plan_create (hb_face_t *face, - hb_subset_input_t *input); + const hb_subset_input_t *input); HB_INTERNAL void hb_subset_plan_destroy (hb_subset_plan_t *plan); diff --git a/thirdparty/harfbuzz/src/hb-subset.cc b/thirdparty/harfbuzz/src/hb-subset.cc index 8b77ecd45a..34f92e0d81 100644 --- a/thirdparty/harfbuzz/src/hb-subset.cc +++ b/thirdparty/harfbuzz/src/hb-subset.cc @@ -39,8 +39,10 @@ #include "hb-ot-maxp-table.hh" #include "hb-ot-color-sbix-table.hh" #include "hb-ot-color-colr-table.hh" +#include "hb-ot-color-cpal-table.hh" #include "hb-ot-os2-table.hh" #include "hb-ot-post-table.hh" +#include "hb-ot-post-table-v2subset.hh" #include "hb-ot-cff1-table.hh" #include "hb-ot-cff2-table.hh" #include "hb-ot-vorg-table.hh" @@ -50,7 +52,28 @@ #include "hb-ot-layout-gpos-table.hh" #include "hb-ot-var-gvar-table.hh" #include "hb-ot-var-hvar-table.hh" +#include "hb-repacker.hh" +/** + * SECTION:hb-subset + * @title: hb-subset + * @short_description: Subsets font files. + * @include: hb-subset.h + * + * Subsetting reduces the codepoint coverage of font files and removes all data + * that is no longer needed. A subset input describes the desired subset. The input is + * provided along with a font to the subsetting operation. Output is a new font file + * containing only the data specified in the input. + * + * Currently most outline and bitmap tables are supported: glyf, CFF, CFF2, sbix, + * COLR, and CBDT/CBLC. This also includes fonts with variable outlines via OpenType + * variations. Notably EBDT/EBLC and SVG are not supported. Layout subsetting is supported + * only for OpenType Layout tables (GSUB, GPOS, GDEF). Notably subsetting of graphite or AAT tables + * is not yet supported. + * + * Fonts with graphite or AAT tables may still be subsetted but will likely need to use the + * retain glyph ids option and configure the subset to pass through the layout tables untouched. + */ static unsigned _plan_estimate_subset_table_size (hb_subset_plan_t *plan, unsigned table_len) @@ -64,69 +87,133 @@ _plan_estimate_subset_table_size (hb_subset_plan_t *plan, unsigned table_len) return 512 + (unsigned) (table_len * sqrt ((double) dst_glyphs / src_glyphs)); } +/* + * Repack the serialization buffer if any offset overflows exist. + */ +static hb_blob_t* +_repack (hb_tag_t tag, const hb_serialize_context_t& c) +{ + if (tag != HB_OT_TAG_GPOS + && tag != HB_OT_TAG_GSUB) + { + // Check for overflow in a non-handled table. + return c.successful () ? c.copy_blob () : nullptr; + } + + if (!c.offset_overflow ()) + return c.copy_blob (); + + hb_vector_t<char> buf; + int buf_size = c.end - c.start; + if (unlikely (!buf.alloc (buf_size))) + return nullptr; + + hb_serialize_context_t repacked ((void *) buf, buf_size); + hb_resolve_overflows (c.object_graph (), &repacked); + + if (unlikely (repacked.in_error ())) + // TODO(garretrieger): refactor so we can share the resize/retry logic with the subset + // portion. + return nullptr; + + return repacked.copy_blob (); +} + +template<typename TableType> +static +bool +_try_subset (const TableType *table, + hb_vector_t<char>* buf, + unsigned buf_size, + hb_subset_context_t* c /* OUT */) +{ + c->serializer->start_serialize<TableType> (); + if (c->serializer->in_error ()) return false; + + bool needed = table->subset (c); + if (!c->serializer->ran_out_of_room ()) + { + c->serializer->end_serialize (); + return needed; + } + + buf_size += (buf_size >> 1) + 32; + DEBUG_MSG (SUBSET, nullptr, "OT::%c%c%c%c ran out of room; reallocating to %u bytes.", + HB_UNTAG (c->table_tag), buf_size); + + if (unlikely (!buf->alloc (buf_size))) + { + DEBUG_MSG (SUBSET, nullptr, "OT::%c%c%c%c failed to reallocate %u bytes.", + HB_UNTAG (c->table_tag), buf_size); + return needed; + } + + c->serializer->reset (buf->arrayZ, buf_size); + return _try_subset (table, buf, buf_size, c); +} + template<typename TableType> static bool _subset (hb_subset_plan_t *plan) { - bool result = false; hb_blob_t *source_blob = hb_sanitize_context_t ().reference_table<TableType> (plan->source); const TableType *table = source_blob->as<TableType> (); hb_tag_t tag = TableType::tableTag; - if (source_blob->data) + if (!source_blob->data) + { + DEBUG_MSG (SUBSET, nullptr, + "OT::%c%c%c%c::subset sanitize failed on source table.", HB_UNTAG (tag)); + hb_blob_destroy (source_blob); + return false; + } + + hb_vector_t<char> buf; + /* TODO Not all tables are glyph-related. 'name' table size for example should not be + * affected by number of glyphs. Accommodate that. */ + unsigned buf_size = _plan_estimate_subset_table_size (plan, source_blob->length); + DEBUG_MSG (SUBSET, nullptr, + "OT::%c%c%c%c initial estimated table size: %u bytes.", HB_UNTAG (tag), buf_size); + if (unlikely (!buf.alloc (buf_size))) + { + DEBUG_MSG (SUBSET, nullptr, "OT::%c%c%c%c failed to allocate %u bytes.", HB_UNTAG (tag), buf_size); + hb_blob_destroy (source_blob); + return false; + } + + bool needed = false; + hb_serialize_context_t serializer (buf.arrayZ, buf_size); { - hb_vector_t<char> buf; - /* TODO Not all tables are glyph-related. 'name' table size for example should not be - * affected by number of glyphs. Accommodate that. */ - unsigned buf_size = _plan_estimate_subset_table_size (plan, source_blob->length); - DEBUG_MSG (SUBSET, nullptr, "OT::%c%c%c%c initial estimated table size: %u bytes.", HB_UNTAG (tag), buf_size); - if (unlikely (!buf.alloc (buf_size))) - { - DEBUG_MSG (SUBSET, nullptr, "OT::%c%c%c%c failed to allocate %u bytes.", HB_UNTAG (tag), buf_size); - hb_blob_destroy (source_blob); - return false; - } - retry: - hb_serialize_context_t serializer ((void *) buf, buf_size); - serializer.start_serialize<TableType> (); hb_subset_context_t c (source_blob, plan, &serializer, tag); - bool needed = table->subset (&c); - if (serializer.ran_out_of_room) - { - buf_size += (buf_size >> 1) + 32; - DEBUG_MSG (SUBSET, nullptr, "OT::%c%c%c%c ran out of room; reallocating to %u bytes.", HB_UNTAG (tag), buf_size); - if (unlikely (!buf.alloc (buf_size))) - { - DEBUG_MSG (SUBSET, nullptr, "OT::%c%c%c%c failed to reallocate %u bytes.", HB_UNTAG (tag), buf_size); - hb_blob_destroy (source_blob); - return false; - } - goto retry; - } - serializer.end_serialize (); + needed = _try_subset (table, &buf, buf_size, &c); + } + hb_blob_destroy (source_blob); - result = !serializer.in_error (); + if (serializer.in_error () && !serializer.only_offset_overflow ()) + { + DEBUG_MSG (SUBSET, nullptr, "OT::%c%c%c%c::subset FAILED!", HB_UNTAG (tag)); + return false; + } - if (result) - { - if (needed) - { - hb_blob_t *dest_blob = serializer.copy_blob (); - DEBUG_MSG (SUBSET, nullptr, "OT::%c%c%c%c final subset table size: %u bytes.", HB_UNTAG (tag), dest_blob->length); - result = c.plan->add_table (tag, dest_blob); - hb_blob_destroy (dest_blob); - } - else - { - DEBUG_MSG (SUBSET, nullptr, "OT::%c%c%c%c::subset table subsetted to empty.", HB_UNTAG (tag)); - } - } + if (!needed) + { + DEBUG_MSG (SUBSET, nullptr, "OT::%c%c%c%c::subset table subsetted to empty.", HB_UNTAG (tag)); + return true; } - else - DEBUG_MSG (SUBSET, nullptr, "OT::%c%c%c%c::subset sanitize failed on source table.", HB_UNTAG (tag)); - hb_blob_destroy (source_blob); - DEBUG_MSG (SUBSET, nullptr, "OT::%c%c%c%c::subset %s", HB_UNTAG (tag), result ? "success" : "FAILED!"); + bool result = false; + hb_blob_t *dest_blob = _repack (tag, serializer); + if (dest_blob) + { + DEBUG_MSG (SUBSET, nullptr, + "OT::%c%c%c%c final subset table size: %u bytes.", + HB_UNTAG (tag), dest_blob->length); + result = plan->add_table (tag, dest_blob); + hb_blob_destroy (dest_blob); + } + + DEBUG_MSG (SUBSET, nullptr, "OT::%c%c%c%c::subset %s", + HB_UNTAG (tag), result ? "success" : "FAILED!"); return result; } @@ -159,7 +246,7 @@ _should_drop_table (hb_subset_plan_t *plan, hb_tag_t tag) case HB_TAG ('p','r','e','p'): /* hint table, fallthrough */ case HB_TAG ('h','d','m','x'): /* hint table, fallthrough */ case HB_TAG ('V','D','M','X'): /* hint table, fallthrough */ - return plan->drop_hints; + return plan->flags & HB_SUBSET_FLAGS_NO_HINTING; #ifdef HB_NO_SUBSET_LAYOUT // Drop Layout Tables if requested. @@ -179,8 +266,21 @@ _should_drop_table (hb_subset_plan_t *plan, hb_tag_t tag) } static bool +_passthrough (hb_subset_plan_t *plan, hb_tag_t tag) +{ + hb_blob_t *source_table = hb_face_reference_table (plan->source, tag); + bool result = plan->add_table (tag, source_table); + hb_blob_destroy (source_table); + return result; +} + +static bool _subset_table (hb_subset_plan_t *plan, hb_tag_t tag) { + if (plan->no_subset_tables->has (tag)) { + return _passthrough (plan, tag); + } + DEBUG_MSG (SUBSET, nullptr, "subset %c%c%c%c", HB_UNTAG (tag)); switch (tag) { @@ -202,6 +302,7 @@ _subset_table (hb_subset_plan_t *plan, hb_tag_t tag) case HB_OT_TAG_OS2 : return _subset<const OT::OS2 > (plan); case HB_OT_TAG_post: return _subset<const OT::post> (plan); case HB_OT_TAG_COLR: return _subset<const OT::COLR> (plan); + case HB_OT_TAG_CPAL: return _subset<const OT::CPAL> (plan); case HB_OT_TAG_CBLC: return _subset<const OT::CBLC> (plan); case HB_OT_TAG_CBDT: return true; /* skip CBDT, handled by CBLC */ @@ -221,28 +322,34 @@ _subset_table (hb_subset_plan_t *plan, hb_tag_t tag) #endif default: - hb_blob_t *source_table = hb_face_reference_table (plan->source, tag); - bool result = plan->add_table (tag, source_table); - hb_blob_destroy (source_table); - return result; + if (plan->flags & HB_SUBSET_FLAGS_PASSTHROUGH_UNRECOGNIZED) + return _passthrough (plan, tag); + + // Drop table + return true; } } /** - * hb_subset: + * hb_subset_or_fail: * @source: font face data to be subset. * @input: input to use for the subsetting. * - * Subsets a font according to provided input. + * Subsets a font according to provided input. Returns nullptr + * if the subset operation fails. + * + * Since: 2.9.0 **/ hb_face_t * -hb_subset (hb_face_t *source, hb_subset_input_t *input) +hb_subset_or_fail (hb_face_t *source, const hb_subset_input_t *input) { if (unlikely (!input || !source)) return hb_face_get_empty (); hb_subset_plan_t *plan = hb_subset_plan_create (source, input); - if (unlikely (plan->in_error ())) - return hb_face_get_empty (); + if (unlikely (plan->in_error ())) { + hb_subset_plan_destroy (plan); + return nullptr; + } hb_set_t tags_set; bool success = true; @@ -262,7 +369,7 @@ hb_subset (hb_face_t *source, hb_subset_input_t *input) } end: - hb_face_t *result = success ? hb_face_reference (plan->dest) : hb_face_get_empty (); + hb_face_t *result = success ? hb_face_reference (plan->dest) : nullptr; hb_subset_plan_destroy (plan); return result; diff --git a/thirdparty/harfbuzz/src/hb-subset.h b/thirdparty/harfbuzz/src/hb-subset.h index ddf4409734..1c65a4da1c 100644 --- a/thirdparty/harfbuzz/src/hb-subset.h +++ b/thirdparty/harfbuzz/src/hb-subset.h @@ -31,66 +31,119 @@ HB_BEGIN_DECLS -/* - * hb_subset_input_t +/** + * hb_subset_input_t: * * Things that change based on the input. Characters to keep, etc. */ typedef struct hb_subset_input_t hb_subset_input_t; +/** + * hb_subset_flags_t: + * @HB_SUBSET_FLAGS_DEFAULT: all flags at their default value of false. + * @HB_SUBSET_FLAGS_NO_HINTING: If set hinting instructions will be dropped in + * the produced subset. Otherwise hinting instructions will be retained. + * @HB_SUBSET_FLAGS_RETAIN_GIDS: If set glyph indices will not be modified in + * the produced subset. If glyphs are dropped their indices will be retained + * as an empty glyph. + * @HB_SUBSET_FLAGS_DESUBROUTINIZE: If set and subsetting a CFF font the + * subsetter will attempt to remove subroutines from the CFF glyphs. + * @HB_SUBSET_FLAGS_NAME_LEGACY: If set non-unicode name records will be + * retained in the subset. + * @HB_SUBSET_FLAGS_SET_OVERLAPS_FLAG: If set the subsetter will set the + * OVERLAP_SIMPLE flag on each simple glyph. + * @HB_SUBSET_FLAGS_PASSTHROUGH_UNRECOGNIZED: If set the subsetter will not + * drop unrecognized tables and instead pass them through untouched. + * @HB_SUBSET_FLAGS_NOTDEF_OUTLINE: If set the notdef glyph outline will be + * retained in the final subset. + * @HB_SUBSET_FLAGS_GLYPH_NAMES: If set the PS glyph names will be retained + * in the final subset. + * @HB_SUBSET_FLAGS_NO_PRUNE_UNICODE_RANGES: If set then the unicode ranges in + * OS/2 will not be recalculated. + * + * List of boolean properties that can be configured on the subset input. + * + * Since: 2.9.0 + **/ +typedef enum { /*< flags >*/ + HB_SUBSET_FLAGS_DEFAULT = 0x00000000u, + HB_SUBSET_FLAGS_NO_HINTING = 0x00000001u, + HB_SUBSET_FLAGS_RETAIN_GIDS = 0x00000002u, + HB_SUBSET_FLAGS_DESUBROUTINIZE = 0x00000004u, + HB_SUBSET_FLAGS_NAME_LEGACY = 0x00000008u, + HB_SUBSET_FLAGS_SET_OVERLAPS_FLAG = 0x00000010u, + HB_SUBSET_FLAGS_PASSTHROUGH_UNRECOGNIZED = 0x00000020u, + HB_SUBSET_FLAGS_NOTDEF_OUTLINE = 0x00000040u, + HB_SUBSET_FLAGS_GLYPH_NAMES = 0x00000080u, + HB_SUBSET_FLAGS_NO_PRUNE_UNICODE_RANGES = 0x00000100u, +} hb_subset_flags_t; + +/** + * hb_subset_sets_t: + * @HB_SUBSET_SETS_GLYPH_INDEX: the set of glyph indexes to retain in the subset. + * @HB_SUBSET_SETS_UNICODE: the set of unicode codepoints to retain in the subset. + * @HB_SUBSET_SETS_NO_SUBSET_TABLE_TAG: the set of table tags which specifies tables that should not be + * subsetted. + * @HB_SUBSET_SETS_DROP_TABLE_TAG: the set of table tags which specifies tables which will be dropped + * in the subset. + * @HB_SUBSET_SETS_NAME_ID: the set of name ids that will be retained. + * @HB_SUBSET_SETS_NAME_LANG_ID: the set of name lang ids that will be retained. + * @HB_SUBSET_SETS_LAYOUT_FEATURE_TAG: the set of layout feature tags that will be retained + * in the subset. + * + * List of sets that can be configured on the subset input. + * + * Since: 2.9.1 + **/ +typedef enum { + HB_SUBSET_SETS_GLYPH_INDEX = 0, + HB_SUBSET_SETS_UNICODE, + HB_SUBSET_SETS_NO_SUBSET_TABLE_TAG, + HB_SUBSET_SETS_DROP_TABLE_TAG, + HB_SUBSET_SETS_NAME_ID, + HB_SUBSET_SETS_NAME_LANG_ID, + HB_SUBSET_SETS_LAYOUT_FEATURE_TAG, +} hb_subset_sets_t; + HB_EXTERN hb_subset_input_t * hb_subset_input_create_or_fail (void); HB_EXTERN hb_subset_input_t * -hb_subset_input_reference (hb_subset_input_t *subset_input); +hb_subset_input_reference (hb_subset_input_t *input); HB_EXTERN void -hb_subset_input_destroy (hb_subset_input_t *subset_input); +hb_subset_input_destroy (hb_subset_input_t *input); -HB_EXTERN hb_set_t * -hb_subset_input_unicode_set (hb_subset_input_t *subset_input); +HB_EXTERN hb_bool_t +hb_subset_input_set_user_data (hb_subset_input_t *input, + hb_user_data_key_t *key, + void * data, + hb_destroy_func_t destroy, + hb_bool_t replace); -HB_EXTERN hb_set_t * -hb_subset_input_glyph_set (hb_subset_input_t *subset_input); +HB_EXTERN void * +hb_subset_input_get_user_data (const hb_subset_input_t *input, + hb_user_data_key_t *key); HB_EXTERN hb_set_t * -hb_subset_input_nameid_set (hb_subset_input_t *subset_input); +hb_subset_input_unicode_set (hb_subset_input_t *input); HB_EXTERN hb_set_t * -hb_subset_input_namelangid_set (hb_subset_input_t *subset_input); +hb_subset_input_glyph_set (hb_subset_input_t *input); HB_EXTERN hb_set_t * -hb_subset_input_drop_tables_set (hb_subset_input_t *subset_input); +hb_subset_input_set (hb_subset_input_t *input, hb_subset_sets_t set_type); -HB_EXTERN void -hb_subset_input_set_drop_hints (hb_subset_input_t *subset_input, - hb_bool_t drop_hints); -HB_EXTERN hb_bool_t -hb_subset_input_get_drop_hints (hb_subset_input_t *subset_input); +HB_EXTERN hb_subset_flags_t +hb_subset_input_get_flags (hb_subset_input_t *input); HB_EXTERN void -hb_subset_input_set_desubroutinize (hb_subset_input_t *subset_input, - hb_bool_t desubroutinize); -HB_EXTERN hb_bool_t -hb_subset_input_get_desubroutinize (hb_subset_input_t *subset_input); - -HB_EXTERN void -hb_subset_input_set_retain_gids (hb_subset_input_t *subset_input, - hb_bool_t retain_gids); -HB_EXTERN hb_bool_t -hb_subset_input_get_retain_gids (hb_subset_input_t *subset_input); +hb_subset_input_set_flags (hb_subset_input_t *input, + unsigned value); -HB_EXTERN void -hb_subset_input_set_name_legacy (hb_subset_input_t *subset_input, - hb_bool_t name_legacy); -HB_EXTERN hb_bool_t -hb_subset_input_get_name_legacy (hb_subset_input_t *subset_input); - -/* hb_subset () */ HB_EXTERN hb_face_t * -hb_subset (hb_face_t *source, hb_subset_input_t *input); - +hb_subset_or_fail (hb_face_t *source, const hb_subset_input_t *input); HB_END_DECLS diff --git a/thirdparty/harfbuzz/src/hb-ucd-table.hh b/thirdparty/harfbuzz/src/hb-ucd-table.hh index 88623db338..1a4c89c17f 100644 --- a/thirdparty/harfbuzz/src/hb-ucd-table.hh +++ b/thirdparty/harfbuzz/src/hb-ucd-table.hh @@ -4,7 +4,7 @@ * * ./gen-ucd-table.py ucd.nounihan.grouped.xml * - * on file with this description: Unicode 13.0.0 + * on file with this description: Unicode 14.0.0 */ #ifndef HB_UCD_TABLE_HH @@ -13,7 +13,7 @@ #include "hb.hh" static const hb_script_t -_hb_ucd_sc_map[157] = +_hb_ucd_sc_map[162] = { HB_SCRIPT_COMMON, HB_SCRIPT_INHERITED, HB_SCRIPT_UNKNOWN, HB_SCRIPT_ARABIC, @@ -93,7 +93,9 @@ _hb_ucd_sc_map[157] = HB_SCRIPT_NANDINAGARI, HB_SCRIPT_NYIAKENG_PUACHUE_HMONG, HB_SCRIPT_WANCHO, HB_SCRIPT_CHORASMIAN, HB_SCRIPT_DIVES_AKURU, HB_SCRIPT_KHITAN_SMALL_SCRIPT, - HB_SCRIPT_YEZIDI, + HB_SCRIPT_YEZIDI, HB_SCRIPT_CYPRO_MINOAN, + HB_SCRIPT_OLD_UYGHUR, HB_SCRIPT_TANGSA, + HB_SCRIPT_TOTO, HB_SCRIPT_VITHKUQI, }; static const uint16_t _hb_ucd_dm1_p0_map[825] = @@ -1065,144 +1067,144 @@ _hb_ucd_dm2_u64_map[388] = #ifndef HB_OPTIMIZE_SIZE static const uint8_t -_hb_ucd_u8[32480] = +_hb_ucd_u8[33120] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 28, - 29, 26, 30, 31, 32, 33, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 34, 35, 35, 35, 35, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 26, 57, 58, 59, 59, 59, 59, 59, 26, 26, 60, 59, 59, 59, 59, 59, - 59, 59, 26, 61, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 26, 62, 59, 63, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 64, 26, 26, 65, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 66, 67, 59, 59, 59, 59, 68, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 69, 70, 71, 72, 73, 74, 59, 59, - 75, 76, 59, 59, 77, 59, 78, 79, 80, 81, 73, 82, 83, 84, 59, 59, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 28, 26, 29, 30, 31, 32, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 33, 34, 34, 34, 34, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 26, 56, 57, 58, 58, 58, 58, 59, 26, 26, 60, 58, 58, 58, 58, 58, + 58, 58, 26, 61, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 26, 62, 58, 63, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 64, 26, 26, 65, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 66, 67, 68, 58, 58, 58, 58, 69, 58, + 58, 58, 58, 58, 58, 58, 58, 70, 71, 72, 73, 74, 75, 76, 58, 77, + 78, 79, 58, 80, 81, 58, 82, 83, 84, 85, 75, 86, 87, 88, 58, 58, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 85, 26, 26, 26, 26, 26, 26, 26, 86, 87, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 88, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 89, 59, 59, 59, 59, 59, 59, 26, 90, 59, 59, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 91, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 92, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 93, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 94, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 89, 26, 26, 26, 26, 26, 26, 26, 90, 91, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 92, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 93, 58, 58, 58, 58, 58, 58, 26, 94, 58, 58, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 95, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 96, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 97, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 21, 21, 21, 23, 21, 21, 21, 22, 18, 21, 25, 21, 17, 21, 21, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 21, 21, 25, 25, 25, 21, @@ -1255,7 +1257,7 @@ _hb_ucd_u8[32480] = 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2, 7, 7, 7, 7, 21, 21, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 25, 25, 25, 21, 21, 23, 21, 21, 26, 26, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 21, 1, 2, 21, 21, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 21, 1, 21, 21, 21, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 21, 21, 21, 21, 7, 7, 12, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, @@ -1275,10 +1277,9 @@ _hb_ucd_u8[32480] = 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 12, 12, 12, 2, 2, 21, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 7, 7, 7, 7, 7, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 7, 7, 7, 7, 7, 7, 7, 7, 24, 7, 7, 7, 7, 7, 7, 2, + 1, 1, 2, 2, 2, 2, 2, 2, 12, 12, 12, 12, 12, 12, 12, 12, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 12, 12, 12, 12, 12, 12, 12, 12, 1, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 10, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 12, 10, 12, 7, 10, 10, @@ -1320,14 +1321,14 @@ _hb_ucd_u8[32480] = 15, 15, 15, 26, 26, 26, 26, 26, 26, 23, 26, 2, 2, 2, 2, 2, 12, 10, 10, 10, 12, 7, 7, 7, 7, 7, 7, 7, 7, 2, 7, 7, 7, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 7, 12, 12, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 12, 7, 12, 12, 12, 10, 10, 10, 10, 2, 12, 12, 12, 2, 12, 12, 12, 12, 2, 2, - 2, 2, 2, 2, 2, 12, 12, 2, 7, 7, 7, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 12, 12, 2, 7, 7, 7, 2, 2, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 21, 15, 15, 15, 15, 15, 15, 15, 26, 7, 12, 10, 10, 21, 7, 7, 7, 7, 7, 7, 7, 7, 2, 7, 7, 7, 7, 7, 7, 2, 7, 7, 7, 7, 7, 2, 2, 12, 7, 10, 12, 10, 10, 10, 10, 10, 2, 12, 10, 10, 2, 10, 10, 12, 12, 2, 2, - 2, 2, 2, 2, 2, 10, 10, 2, 2, 2, 2, 2, 2, 2, 7, 2, + 2, 2, 2, 2, 2, 10, 10, 2, 2, 2, 2, 2, 2, 7, 7, 2, 2, 7, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 12, 12, 10, 10, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 12, 12, 7, 10, 10, @@ -1344,6 +1345,7 @@ _hb_ucd_u8[32480] = 7, 12, 7, 7, 12, 12, 12, 12, 12, 12, 12, 2, 2, 2, 2, 23, 7, 7, 7, 7, 7, 7, 6, 12, 12, 12, 12, 12, 12, 12, 12, 21, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 21, 21, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 7, 7, 2, 7, 2, 7, 7, 7, 7, 7, 2, 7, 7, 7, 7, 7, 7, 7, 7, 2, 7, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 12, 7, 7, 12, 12, 12, 12, 12, 12, 12, 12, 12, 7, 2, 2, @@ -1387,17 +1389,17 @@ _hb_ucd_u8[32480] = 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 22, 18, 2, 2, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 21, 21, 21, 14, 14, 14, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2, 2, 2, 2, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 7, 7, - 7, 7, 12, 12, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 7, 7, 12, 12, 12, 21, 21, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 7, 7, 12, 12, 12, 10, 2, 2, 2, 2, 2, 2, 2, 2, 2, 7, + 7, 7, 12, 12, 10, 21, 21, 2, 2, 2, 2, 2, 2, 2, 2, 2, 7, 7, 12, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 7, 7, 7, 2, 12, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 7, 7, 7, 7, 12, 12, 10, 12, 12, 12, 12, 12, 12, 12, 10, 10, 10, 10, 10, 10, 10, 10, 12, 10, 10, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 21, 21, 21, 6, 21, 21, 21, 23, 7, 12, 2, 2, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 2, 2, 2, 2, 2, 2, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 2, 2, 2, 2, 2, 2, - 21, 21, 21, 21, 21, 21, 17, 21, 21, 21, 21, 12, 12, 12, 1, 2, + 21, 21, 21, 21, 21, 21, 17, 21, 21, 21, 21, 12, 12, 12, 1, 12, 7, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2, 2, 2, 2, 7, 7, 7, 7, 7, 12, 12, 7, 7, 7, 7, 7, 7, 7, 7, 7, @@ -1419,12 +1421,12 @@ _hb_ucd_u8[32480] = 10, 10, 10, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 2, 2, 12, 21, 21, 21, 21, 21, 21, 21, 6, 21, 21, 21, 21, 21, 21, 2, 2, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 12, - 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 2, 12, 12, 12, 12, 10, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 12, 10, 12, 12, 12, 12, 12, 10, 12, 10, 10, 10, - 10, 10, 12, 10, 10, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2, + 10, 10, 12, 10, 10, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 21, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 26, 26, 26, 26, 26, 26, 26, 26, 26, 2, 2, 2, + 12, 12, 12, 12, 26, 26, 26, 26, 26, 26, 26, 26, 26, 21, 21, 2, 12, 12, 10, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 10, 12, 12, 12, 12, 10, 10, 12, 12, 10, 12, 12, 12, 7, 7, 7, 7, 7, 7, 7, 7, 12, 10, 12, 12, 10, 10, 10, 12, 10, 12, @@ -1443,7 +1445,6 @@ _hb_ucd_u8[32480] = 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 2, 12, 12, 12, 12, 12, 9, 5, 9, 5, 9, 5, 5, 5, 5, 5, 5, 5, 5, 5, 9, 5, 5, 5, 5, 5, 5, 5, 5, 5, 9, 9, 9, 9, 9, 9, 9, 9, 5, 5, 5, 5, 5, 5, 2, 2, 9, 9, 9, 9, 9, 9, 2, 2, @@ -1466,8 +1467,10 @@ _hb_ucd_u8[32480] = 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 25, 25, 25, 22, 18, 2, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 2, 2, 2, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 11, 11, 11, 12, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 26, 26, 9, 26, 26, 26, 26, 9, 26, 26, 5, 9, 9, 9, 5, 5, 9, 9, 9, 5, 26, 9, 26, 26, 25, 9, 9, 9, 9, 9, 26, 26, 26, 26, 26, 26, 9, 26, 9, 26, 9, 26, 9, 9, 9, 9, 26, 5, @@ -1509,8 +1512,6 @@ _hb_ucd_u8[32480] = 25, 25, 25, 25, 25, 26, 26, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 2, 2, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 2, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 2, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 9, 5, 9, 9, 9, 5, 5, 9, 5, 9, 5, 9, 5, 9, 9, 9, 9, 5, 9, 5, 5, 9, 5, 5, 5, 5, 5, 5, 6, 6, 9, 9, 9, 5, 9, 5, 5, 26, 26, 26, 26, 26, 26, 9, 5, 9, 5, 12, @@ -1525,7 +1526,7 @@ _hb_ucd_u8[32480] = 20, 19, 22, 18, 22, 18, 22, 18, 22, 18, 21, 21, 21, 21, 21, 6, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 17, 17, 21, 21, 21, 21, 17, 21, 22, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 26, 26, 21, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 26, 26, 21, 21, 21, 22, 18, 22, 18, 22, 18, 22, 18, 17, 2, 2, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 2, 26, 26, 26, 26, 26, 26, 26, 26, 26, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 26, 26, 26, 26, 26, 26, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -1558,8 +1559,9 @@ _hb_ucd_u8[32480] = 9, 5, 9, 5, 5, 5, 9, 5, 9, 5, 9, 5, 9, 5, 9, 5, 9, 5, 9, 5, 9, 5, 9, 5, 9, 5, 9, 9, 9, 9, 9, 5, 9, 9, 9, 9, 9, 5, 9, 5, 9, 5, 9, 5, 9, 5, 9, 5, - 2, 2, 9, 5, 9, 9, 9, 9, 5, 9, 5, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 9, 5, 7, 6, 6, 5, 7, 7, 7, 7, 7, + 9, 5, 9, 5, 9, 9, 9, 9, 5, 9, 5, 2, 2, 2, 2, 2, + 9, 5, 2, 5, 2, 5, 9, 5, 9, 5, 2, 2, 2, 2, 2, 2, + 2, 2, 6, 6, 6, 9, 5, 7, 6, 6, 5, 7, 7, 7, 7, 7, 7, 7, 12, 7, 7, 7, 12, 7, 7, 7, 7, 12, 7, 7, 7, 7, 7, 7, 7, 10, 10, 12, 12, 10, 26, 26, 26, 26, 12, 2, 2, 2, 15, 15, 15, 15, 15, 15, 26, 26, 23, 26, 2, 2, 2, 2, 2, 2, @@ -1601,16 +1603,18 @@ _hb_ucd_u8[32480] = 7, 7, 7, 7, 7, 7, 7, 2, 7, 7, 7, 7, 7, 2, 7, 2, 7, 7, 2, 7, 7, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 24, 24, 24, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 18, 22, 2, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 23, 26, 2, 2, + 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2, 2, 2, 2, 26, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 23, 26, 26, 26, 21, 21, 21, 21, 21, 21, 21, 22, 18, 21, 2, 2, 2, 2, 2, 2, 21, 17, 17, 16, 16, 22, 18, 22, 18, 22, 18, 22, 18, 22, 18, 22, 18, 22, 18, 22, 18, 21, 21, 22, 18, 21, 21, 21, 21, 16, 16, 16, 21, 21, 21, 2, 21, 21, 21, 21, 17, 22, 18, 22, 18, 22, 18, 21, 21, 21, 25, 17, 25, 25, 25, 2, 21, 23, 21, 21, 2, 2, 2, 2, + 7, 7, 7, 7, 7, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 1, 2, 21, 21, 21, 23, 21, 21, 21, 22, 18, 21, 25, 21, 17, 21, 21, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 22, 25, 18, 25, 22, @@ -1641,7 +1645,14 @@ _hb_ucd_u8[32480] = 9, 9, 9, 9, 9, 9, 9, 9, 5, 5, 5, 5, 5, 5, 5, 5, 9, 9, 9, 9, 2, 2, 2, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, + 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2, 2, 2, 2, 2, 7, 7, 7, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 21, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 2, 9, 9, 9, 9, + 9, 9, 9, 2, 9, 9, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 2, 5, 5, 5, 5, 5, 5, 5, 2, 5, 5, 2, 2, 2, + 6, 6, 6, 6, 6, 6, 2, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 2, 6, 6, 6, 6, 6, 6, 6, 6, 6, 2, 2, 2, 2, 2, 7, 7, 7, 7, 7, 7, 2, 2, 7, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 7, 7, 2, 2, 2, 7, 2, 2, 7, 7, 7, 7, 7, 7, 7, 2, 21, 15, 15, 15, 15, 15, 15, 15, 15, @@ -1675,14 +1686,15 @@ _hb_ucd_u8[32480] = 7, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 15, 15, 15, 15, 15, 15, 15, 7, 2, 2, 2, 2, 2, 2, 2, 2, 12, 15, 15, 15, 15, 21, 21, 21, 21, 21, 2, 2, 2, 2, 2, 2, + 7, 7, 12, 12, 12, 12, 21, 21, 21, 21, 2, 2, 2, 2, 2, 2, 7, 7, 7, 7, 7, 15, 15, 15, 15, 15, 15, 15, 2, 2, 2, 2, 10, 12, 10, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 21, 21, 21, 21, 21, 21, 21, 2, 2, 15, 15, 15, 15, 15, 15, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 12, + 12, 7, 7, 12, 12, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 12, 10, 10, 10, 12, 12, 12, 12, 10, 10, 12, 12, 21, 21, 1, 21, 21, - 21, 21, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, + 21, 21, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 12, 12, 12, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 12, 12, 12, 12, 12, 10, 12, 12, 12, 12, 12, 12, 12, 12, 2, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, @@ -1719,7 +1731,7 @@ _hb_ucd_u8[32480] = 12, 21, 21, 21, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 2, 2, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 12, 10, 12, 10, 10, - 12, 12, 12, 12, 12, 12, 10, 12, 7, 2, 2, 2, 2, 2, 2, 2, + 12, 12, 12, 12, 12, 12, 10, 12, 7, 21, 2, 2, 2, 2, 2, 2, 10, 10, 12, 12, 12, 12, 10, 12, 12, 12, 12, 12, 2, 2, 2, 2, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 15, 15, 21, 21, 21, 26, 12, 12, 12, 12, 12, 12, 12, 12, 10, 12, 12, 21, 2, 2, 2, 2, @@ -1756,6 +1768,7 @@ _hb_ucd_u8[32480] = 26, 26, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 21, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 2, 21, 21, 21, 21, 21, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 7, 21, 21, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 12, 12, 12, 12, 12, 21, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 12, 12, 12, 12, 12, 12, 12, 21, 21, 21, 21, 21, 26, 26, 26, 26, @@ -1771,16 +1784,18 @@ _hb_ucd_u8[32480] = 12, 12, 12, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 21, 6, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 10, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 6, 6, 6, 6, 2, 6, 6, 6, 6, 6, 6, 6, 2, 6, 6, 2, 7, 7, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 7, 7, 7, 7, 2, 2, 2, 2, 2, 2, 2, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 26, 12, 12, 21, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 2, 2, + 12, 12, 12, 12, 12, 12, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 26, 26, 26, 26, 26, 26, 26, 2, 2, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 10, 10, 12, 12, 12, 26, 26, 26, 10, 10, 10, 10, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 12, 12, 12, 12, 12, 12, 12, 12, 26, 26, 12, 12, 12, 12, 12, 12, 12, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 12, 12, 12, 12, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 2, 2, 2, 2, 2, 2, 2, 26, 26, 12, 12, 12, 26, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 15, 15, 15, 15, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 5, 5, 5, 5, 5, 5, @@ -1818,15 +1833,18 @@ _hb_ucd_u8[32480] = 26, 26, 26, 26, 26, 12, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 12, 26, 26, 21, 21, 21, 21, 21, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 12, 12, 12, 12, 12, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 12, 12, 12, 12, 12, 12, 12, 2, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 2, 2, 12, 12, 12, 12, 12, 12, 12, 2, 12, 12, 2, 12, 12, 12, 12, 12, 2, 2, 2, 2, 2, 12, 12, 12, 12, 12, 12, 12, 6, 6, 6, 6, 6, 6, 6, 2, 2, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 2, 2, 2, 2, 7, 26, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 12, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 2, 2, 2, 2, 2, 23, + 7, 7, 7, 7, 7, 7, 7, 2, 7, 7, 7, 7, 2, 7, 7, 2, 7, 7, 7, 7, 7, 2, 2, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 12, 12, 12, 12, 12, 12, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 5, 12, 12, 12, 12, 12, 12, 12, 6, 2, 2, 2, 2, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 26, 15, 15, 15, 23, 15, 15, 15, 15, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -1847,12 +1865,12 @@ _hb_ucd_u8[32480] = 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 2, 2, 2, 2, 2, 2, 2, 2, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 2, 2, 2, 2, 2, 2, 2, 26, 26, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 24, 24, 24, 24, 24, + 26, 26, 26, 26, 26, 26, 26, 26, 2, 2, 2, 2, 2, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 2, 2, 2, 2, 2, 2, 2, 2, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 2, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 2, 26, 26, 26, - 26, 26, 26, 26, 26, 2, 2, 2, 26, 26, 26, 2, 2, 2, 2, 2, + 26, 26, 26, 26, 26, 2, 2, 2, 26, 26, 26, 26, 26, 2, 2, 2, 26, 26, 26, 2, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -1891,9 +1909,9 @@ _hb_ucd_u8[32480] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 51, 0, 52, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 54, 55, 0, 0, 0, 0, 56, 0, 0, 57, 58, 0, - 59, 60, 61, 62, 63, 64, 65, 0, 66, 67, 0, 68, 69, 70, 71, 0, - 60, 0, 72, 73, 74, 75, 0, 0, 69, 0, 76, 77, 0, 0, 0, 0, + 0, 0, 0, 0, 54, 55, 0, 0, 0, 0, 56, 0, 0, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 0, 67, 68, 0, 69, 70, 71, 72, 0, + 61, 0, 73, 74, 75, 76, 0, 0, 70, 0, 77, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1903,7 +1921,7 @@ _hb_ucd_u8[32480] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 78, 79, 0, 0, 0, 0, 0, 0, 0, 0, 80, + 0, 0, 0, 0, 0, 79, 80, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1913,13 +1931,13 @@ _hb_ucd_u8[32480] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 82, 83, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 83, 84, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 85, 0, 79, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 86, 0, 80, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 15, 16, 17, 18, 19, 20, 0, 0, 0, @@ -1928,86 +1946,87 @@ _hb_ucd_u8[32480] = 28, 29, 0, 0, 0, 0, 30, 0, 0, 0, 31, 32, 33, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 35, 36, 0, 0, 26, 37, 38, 39, 0, 0, 0, 0, 0, 40, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 1, - 42, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 46, 0, 47, 48, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 47, 0, 0, - 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 46, 0, 47, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 50, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 47, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 54, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 42, 43, 1, + 44, 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 50, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, + 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 49, 52, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 49, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 56, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 58, 59, 0, 0, 0, 0, - 0, 0, 60, 61, 62, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 65, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 58, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 60, 61, 0, 0, 0, 0, + 0, 0, 62, 63, 64, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, - 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 67, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 68, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 71, 72, 0, 0, 0, 0, 0, 0, 0, 0, - 73, 0, 66, 74, 0, 0, 0, 0, 0, 0, 75, 76, 72, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 67, 0, 0, 0, - 0, 77, 78, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, - 80, 0, 79, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 82, - 83, 84, 85, 86, 0, 0, 0, 0, 0, 0, 0, 0, 87, 88, 89, 1, - 1, 1, 90, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 93, - 94, 95, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 71, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 1, 1, 1, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 71,100,101, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 86, 0,102, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, - 1, 1, 86, 0, 0, 0, 0, 0, 0,103, 0, 0, 0, 0,104, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,105, 0, 73, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,106,107,108, 0, 0, 0, - 0, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 47, 0, 0, 0, 0, 0,109, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,110,111, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, + 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 71, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 74, 75, 0, 0, 0, 0, 0, 0, 0, 0, + 76, 0, 68, 77, 0, 0, 0, 0, 0, 0, 78, 79, 80, 81, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 70, 0, 0, 0, + 0, 82, 83, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, + 85, 0, 84, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 87, + 88, 89, 90, 91, 0, 0, 0, 0, 0, 0, 0, 0, 92, 93, 94, 1, + 1, 1, 95, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 98, + 99,100,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 74, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 0, 0, 0, 0, 0,103, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,104, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 74,105,106, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 91, 0,107, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, + 1, 1, 91, 0, 0, 0, 0, 0, 0,108, 0, 0, 0, 0,109, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,110, 0, 76, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111,112,113, 0, 0, 0, + 0, 0,107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 49, 0, 0, 0, 0, 0,114, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,115,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 26,112, 0,113, 0, 0, 0, 0, 0,114, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 115, 0, 0, 0, 0, 0, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0,116, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,117,118, 72, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,102, 0, 0, 0, - 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 0, - 0, 0, 0, 0,112, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, - 0, 0,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73,120, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,121, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0,122, 0, 0, 0, 0, 0, 0, 0, 0, 0,123, 0, 47, 0, 0, - 26,124,124, 0, 0, 0, 0, 0, 0, 0, 0, 0,125, 0, 0, 49, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97,127, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0,104, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129,105, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 97, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,130, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,131, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,132, 0, 0, 0, 0, 0, 0, 0,133, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,134, 0, 0, 0, 0,135, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 136,137,138,139,140,141, 0, 0, 0,142, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143, 0, 0, 0, - 0, 0, 0, 0,133, 1, 1,144,145,112, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,146, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100,147, 0, 0, + 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 26,117, 0,118, 0, 0, 0, 0, 0,119, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 120, 0, 0, 0, 0, 0, 0, 0,105, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,121, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,122,123, 75, 0, + 0, 0, 0, 0,124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,107, 0, 0, 0, + 0, 0, 76,102, 0, 0, 0, 0, 0, 0, 0,125, 0, 0, 0, 0, + 0, 0, 0, 0,117, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, + 0, 0,110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76,126, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 0, 49, 0, 0, + 26,130,130, 0, 0, 0, 0, 0, 0, 0, 0, 0,131, 0, 0, 51, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,132, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,102,133, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,102, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,134, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,109, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,135,110, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0,102, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,136, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,137, 0, 0, 0, + 0, 0, 0, 0, 0, 0,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,138, 0, 0, 0, 0, 0, 0, 0,139, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,140, 0, 0, 0, 0,141, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 142,143,144,145,146,147, 0, 0, 0,148, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,149, 0, 0, 0, + 0, 0, 0, 0,139, 1, 1,150,151,117, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, + 0,105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,105,153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230,230,230,230, 230,230,230,230,230,230,230,230,230,232,220,220,220,220,232,216, 220,220,220,220,220,202,202,220,220,220,220,202,202,220,220,220, @@ -2028,7 +2047,8 @@ _hb_ucd_u8[32480] = 220,230,220,230,220,230,230, 0, 0, 0, 0, 0,230,230,220,230, 0, 0, 0, 0, 0, 0, 0, 0, 0,220, 0, 0,230,230, 0,230, 230,230,230,230,230,230,230,230, 0,230,230,230, 0,230,230,230, - 230,230, 0, 0, 0,220,220,220, 0, 0, 0, 0, 0, 0, 0,220, + 230,230, 0, 0, 0,220,220,220, 0, 0, 0, 0,230,220,220,220, + 230,230,230,230, 0, 0,230,230,230,230,230,220,220,220,220,220, 230,230,230,230,230,230, 0,220,230,230,220,230,230,220,230,230, 230,220,220,220, 27, 28, 29,230,230,230,220,230,230,220,220,230, 230,230,230,230, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, @@ -2042,32 +2062,34 @@ _hb_ucd_u8[32480] = 130,130, 0, 0,130, 0,230,230, 9, 0,230,230, 0, 0, 0, 0, 0, 0,220, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230,230,230, 0, 0, 0, 0, - 9, 0, 0, 0, 0, 0, 0, 0, 0,230, 0, 0, 0,228, 0, 0, - 0, 0, 0, 0, 0,222,230,220, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,230,220, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, - 0, 0, 0, 0,230,230,230,230,230, 0, 0,220,230,230,230,230, - 230,220,220,220,220,220,220,230,230,220, 0,220, 0, 0, 0,230, - 220,230,230,230,230,230,230,230, 0, 0, 0, 0, 0, 0, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0,230,230,230, 0, - 1,220,220,220,220,220,230,230,220,220,220,220,230, 0, 1, 1, - 1, 1, 1, 1, 1, 0, 0, 0, 0,220, 0, 0, 0, 0, 0, 0, - 230, 0, 0, 0,230,230, 0, 0, 0, 0, 0, 0,230,230,220,230, - 230,230,230,230,230,230,220,230,230,234,214,220,202,230,230,230, - 230,230,230,230,230,230,230,230,230,230,232,228,228,220, 0,230, - 233,220,230,220,230,230, 1, 1,230,230,230,230, 1, 1, 1,230, - 230, 0, 0, 0, 0,230, 0, 0, 0, 1, 1,230,220,230, 1, 1, - 220,220,220,220,230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 0, 0,218,228,232,222,224,224, 0, 8, 8, 0, - 0, 0, 0, 0, 0, 0, 0, 0,230,230,230,230,230,230,230,230, - 230,230, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0,220, - 220,220, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 0,230, 0,230,230,220, 0, 0,230,230, 0, 0, 0, - 0, 0,230,230, 0,230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 26, 0,230,230,230,230,230,230,230,220,220,220,220,220, - 220,220,230,230,230,230,230, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0,220, 0,230,230, 1,220, 0, 0, 0, 0, 9, 0, 0, 0, 0, - 0,230,220, 0, 0, 0, 0,230,230, 0, 0, 0, 0, 0, 0, 0, - 0, 0,220,220,230,230,230,220,230,220,220,220, 0, 9, 7, 0, + 9, 9, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0,230, 0, 0, 0,228, 0, 0, 0, 0, 0, 0, 0,222,230,220, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230,220, 0, 0, 0, + 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0,230,230,230,230, + 230, 0, 0,220,230,230,230,230,230,220,220,220,220,220,220,230, + 230,220, 0,220,220,230,230,220,220,230,230,230,230,230,220,230, + 230,230,230, 0, 0, 0, 0,230,220,230,230,230,230,230,230,230, + 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 0,230,230,230, 0, 1,220,220,220,220,220,230,230, + 220,220,220,220,230, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0,220, 0, 0, 0, 0, 0, 0,230, 0, 0, 0,230,230, 0, 0, + 0, 0, 0, 0,230,230,220,230,230,230,230,230,230,230,220,230, + 230,234,214,220,202,230,230,230,230,230,230,230,230,230,230,230, + 230,230,232,228,228,220,218,230,233,220,230,220,230,230, 1, 1, + 230,230,230,230, 1, 1, 1,230,230, 0, 0, 0, 0,230, 0, 0, + 0, 1, 1,230,220,230, 1, 1,220,220,220,220,230, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0,218,228, + 232,222,224,224, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 230,230,230,230,230,230,230,230,230,230, 0, 0, 0, 0, 0, 0, + 0, 0, 9, 0, 0, 0, 0,220,220,220, 0, 0, 0, 0, 0, 9, + 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0,230, 0,230,230, + 220, 0, 0,230,230, 0, 0, 0, 0, 0,230,230, 0,230, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0,230,230,230,230, + 230,230,230,220,220,220,220,220,220,220,230,230,230,230,230, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,220, 0,230,230, 1,220, 0, + 0, 0, 0, 9, 0, 0, 0, 0, 0,230,220, 0, 0, 0, 0,230, + 230, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,220,230,230,230,220, + 230,220,220,220, 0, 0,230,220,230,220, 0, 0, 0, 9, 7, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7, 0, 0, 7, 9, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0,230,230,230,230,230, 0, 0, 0, 0, 0, 9, 0, @@ -2135,7 +2157,7 @@ _hb_ucd_u8[32480] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 7, 1, 10, 1, 0, 0, 0, 1, 20, 20, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 34, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 1, 20, 20, 0, 0, 0, 0, 0, @@ -2155,114 +2177,114 @@ _hb_ucd_u8[32480] = 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 27, 28, 28, 29, 30, 31, 32, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 34, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, 58, 35, 35, 35, 35, 35, 59, 59, 60, 35, - 35, 35, 35, 35, 35, 35, 61, 62, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 63, 64, 35, 65, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 67, 66, 68, 69, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 70, 71, 35, 35, - 35, 35, 72, 35, 35, 35, 35, 35, 35, 35, 35, 35, 73, 74, 75, 76, - 77, 78, 35, 35, 79, 80, 35, 35, 81, 35, 82, 83, 84, 85, 17, 86, - 87, 88, 35, 35, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 27, 27, 28, 29, 30, 31, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 33, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 34, 34, 34, 34, 58, 59, 59, 60, 34, + 34, 34, 34, 34, 34, 34, 61, 62, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 63, 64, 34, 65, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 67, 66, 68, 69, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 70, 71, 72, 34, 34, + 34, 34, 73, 34, 34, 34, 34, 34, 34, 34, 34, 74, 75, 76, 77, 78, + 79, 80, 34, 81, 82, 83, 34, 84, 85, 34, 86, 87, 88, 89, 17, 90, + 91, 92, 34, 34, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 89, 25, 25, 25, 25, 25, 25, 25, 90, - 91, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 92, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 93, 35, 35, 35, 35, 35, 35, - 25, 94, 35, 35, 25, 25, 25, 25, 25, 25, 25, 25, 25, 95, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 25, 25, 25, 25, 25, 25, 25, 93, 25, 25, 25, 25, 25, 25, 25, 94, + 95, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 96, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 97, 34, 34, 34, 34, 34, 34, + 25, 98, 34, 34, 25, 25, 25, 25, 25, 25, 25, 25, 25, 99, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2289,7 +2311,7 @@ _hb_ucd_u8[32480] = 14, 2, 2, 2, 2, 14, 14, 14, 14, 14, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 0, 3, 2, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 0, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, @@ -2307,10 +2329,8 @@ _hb_ucd_u8[32480] = 90, 90, 90, 90, 90, 2, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 2, 2, 95, 2, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, - 37, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, + 37, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 2, 3, 3, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 1, 1, 1, 7, 7, 7, 7, 7, @@ -2359,9 +2379,9 @@ _hb_ucd_u8[32480] = 23, 23, 23, 2, 23, 23, 23, 2, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 2, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 2, 2, 2, 23, 23, 23, 23, 23, 23, 23, 23, 2, 23, 23, 23, 2, + 2, 2, 23, 23, 23, 23, 23, 23, 23, 23, 23, 2, 23, 23, 23, 2, 23, 23, 23, 23, 2, 2, 2, 2, 2, 2, 2, 23, 23, 2, 23, 23, - 23, 2, 2, 2, 2, 2, 23, 23, 23, 23, 2, 2, 23, 23, 23, 23, + 23, 2, 2, 23, 2, 2, 23, 23, 23, 23, 2, 2, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 2, 2, 2, 2, 2, 2, 2, 23, 23, 23, 23, 23, 23, 23, 23, 23, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 2, 16, 16, 16, 2, 16, 16, 16, 16, 16, 16, 16, 16, @@ -2369,7 +2389,7 @@ _hb_ucd_u8[32480] = 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 2, 16, 16, 16, 16, 16, 2, 2, 16, 16, 16, 16, 16, 16, 16, 16, 16, 2, 16, 16, 16, 2, 16, 16, 16, 16, 2, 2, 2, 2, 2, 2, 2, 16, 16, 2, 2, 2, - 2, 2, 2, 2, 16, 2, 16, 16, 16, 16, 2, 2, 16, 16, 16, 16, + 2, 2, 2, 16, 16, 2, 16, 16, 16, 16, 2, 2, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 2, 16, 16, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 2, 20, 20, 20, 2, 20, 20, 20, 20, 20, 20, 20, 20, @@ -2389,7 +2409,8 @@ _hb_ucd_u8[32480] = 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 2, 2, 2, 2, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 2, 2, 2, 2, 2, 18, 18, 2, 18, 2, 18, 18, 18, 18, + 24, 24, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 18, 18, 2, 18, 2, 18, 18, 18, 18, 18, 2, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 2, 18, 2, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, @@ -2424,8 +2445,8 @@ _hb_ucd_u8[32480] = 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 0, 0, 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 2, 2, 2, 2, 2, 2, 2, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2, 45, 45, 45, 45, 45, 45, 45, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 45, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 2, 2, 2, 2, 2, 2, @@ -2435,7 +2456,7 @@ _hb_ucd_u8[32480] = 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 2, 2, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 2, 2, 2, 2, 2, 2, 32, 32, 0, 0, 32, 0, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 2, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 2, 2, 2, 2, 2, 2, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 2, 2, 2, 2, 2, 2, 2, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, @@ -2458,11 +2479,11 @@ _hb_ucd_u8[32480] = 91, 91, 91, 91, 91, 2, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 2, 2, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 2, 2, 2, 2, 2, 2, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, - 91, 91, 91, 91, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, + 91, 91, 91, 91, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 2, 2, 2, 2, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 2, 2, 2, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, + 62, 62, 62, 2, 2, 2, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 2, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 2, 2, 2, 2, 2, 2, 2, 2, 93, 93, 93, 93, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, @@ -2480,8 +2501,7 @@ _hb_ucd_u8[32480] = 19, 19, 19, 9, 9, 9, 9, 9, 19, 19, 19, 19, 9, 9, 9, 9, 9, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 6, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 2, 2, 9, 9, + 19, 19, 19, 19, 19, 9, 9, 9, 9, 9, 9, 9, 2, 2, 9, 9, 9, 9, 9, 9, 2, 2, 9, 9, 9, 9, 9, 9, 9, 9, 2, 9, 2, 9, 2, 9, 2, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 2, 2, 9, 9, 9, 9, 9, 2, 9, 9, 9, 9, @@ -2492,7 +2512,9 @@ _hb_ucd_u8[32480] = 0, 0, 0, 0, 0, 0, 0, 19, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 2, 2, 2, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, + 19, 19, 19, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, @@ -2502,16 +2524,15 @@ _hb_ucd_u8[32480] = 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 2, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, + 56, 56, 56, 56, 56, 56, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 2, 2, 2, 2, 2, 55, 55, 55, 55, 55, 55, 55, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 2, 2, 2, 2, 2, 2, 2, 61, 61, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 61, 30, 30, 30, 30, 30, 30, 30, 2, 2, 2, 2, 2, 2, 2, 2, 2, 30, 30, 30, 30, 30, 30, 30, 2, 30, 30, - 30, 30, 30, 30, 30, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 30, 30, 30, 30, 30, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 2, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 2, 13, 13, 13, 13, 13, 13, 13, 13, 13, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 13, 13, 13, 13, 13, 13, 2, 2, 2, 2, @@ -2533,8 +2554,7 @@ _hb_ucd_u8[32480] = 2, 2, 2, 2, 2, 2, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, - 0, 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 2, 2, 2, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 0, 0, 0, 0, 0, 0, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 2, 2, 2, 39, 39, 39, 39, 39, 39, 39, 2, 2, 2, 2, 2, 2, 2, 2, 2, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, @@ -2544,8 +2564,9 @@ _hb_ucd_u8[32480] = 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, - 0, 19, 19, 19, 19, 19, 2, 2, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 19, 19, 19, 19, 19, + 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 2, 2, 2, 2, 2, 19, 19, 2, 19, 2, 19, 19, 19, 19, 19, + 2, 2, 2, 2, 2, 2, 2, 2, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2587,14 +2608,16 @@ _hb_ucd_u8[32480] = 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 2, 14, 14, 14, 14, 14, 2, 14, 2, 14, 14, 2, 14, 14, 2, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 0, 0, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, + 14, 14, 14, 14, 14, 14, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 3, 3, 3, 3, 0, 0, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, + 2, 2, 2, 2, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 6, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, - 0, 0, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 0, 0, 2, 2, 2, 2, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, @@ -2642,11 +2665,17 @@ _hb_ucd_u8[32480] = 106,106,106,106,106,106,106,106,106,106,106,106,106,106, 2, 2, 2, 2, 2, 2, 2, 2,104,104,104,104,104,104,104,104,104,104, 104,104,104,104,104,104,104,104,104,104, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2,104,110,110,110,110,110,110,110,110,110,110, + 2, 2, 2, 2, 2,104,161,161,161,161,161,161,161,161,161,161, + 161, 2,161,161,161,161,161,161,161, 2,161,161, 2,161,161,161, + 161,161,161,161,161,161,161,161, 2,161,161,161,161,161,161,161, + 161,161,161,161,161,161,161,161, 2,161,161,161,161,161,161,161, + 2,161,161, 2, 2, 2,110,110,110,110,110,110,110,110,110,110, 110,110,110,110,110,110,110,110,110,110,110,110,110, 2, 2, 2, 2, 2, 2, 2, 2, 2,110,110,110,110,110,110, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,110,110,110,110,110,110,110,110, 2, 2, - 2, 2, 2, 2, 2, 2, 47, 47, 47, 47, 47, 47, 2, 2, 47, 2, + 2, 2, 2, 2, 2, 2, 19, 19, 19, 19, 19, 19, 2, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 2, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 2, 2, 2, 2, 2, 47, 47, 47, 47, 47, 47, 2, 2, 47, 2, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 2, 47, 47, 2, 2, 2, 47, 2, 2, 47, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, @@ -2692,14 +2721,15 @@ _hb_ucd_u8[32480] = 130,130,130,130,130,130,144,144,144,144,144,144,144,144,144,144, 144,144,144,144,144,144,144,144,144,144,144,144,144,144, 2, 2, 2, 2, 2, 2, 2, 2,144,144,144,144,144,144,144,144,144,144, - 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 2,156,156,156,156,156,156,156,156,156,156, + 2, 2, 2, 2, 2, 2,156,156,156,156,156,156,156,156,156,156, 156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156, 2,156,156,156, 2, 2,156,156, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,147,147,147,147,147,147,147,147,147,147, 147,147,147,147,147,147,147,147,147,147,147,147,147,147, 2, 2, 2, 2, 2, 2, 2, 2,148,148,148,148,148,148,148,148,148,148, 148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148, + 2, 2, 2, 2, 2, 2,158,158,158,158,158,158,158,158,158,158, + 158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158, 2, 2, 2, 2, 2, 2,153,153,153,153,153,153,153,153,153,153, 153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153, 153,153, 2, 2, 2, 2,149,149,149,149,149,149,149,149,149,149, @@ -2707,9 +2737,9 @@ _hb_ucd_u8[32480] = 2, 2, 2, 2, 2, 2, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 2, 2, 2, 2, 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 2, 2, 2, 2, 2, 2, 2, 2, 2, 94, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 85, 2, 2, 2, 2, 2, 2, 2, 2, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 85, 2, 2,101,101,101,101,101,101,101,101,101,101, 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, 2, 2, 2, 2, 2, 2, 2,101,101,101,101,101,101,101,101,101,101, @@ -2752,12 +2782,12 @@ _hb_ucd_u8[32480] = 2, 2, 2, 2, 2, 2,114,114,114,114,114,114,114,114,114,114, 2, 2, 2, 2, 2, 2, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 2, 2, 2,102,102,102,102,102,102,102,102,102,102, - 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, 2, - 2, 2, 2, 2, 2, 2,102,102,102,102,102,102,102,102,102,102, + 102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, 2, 2, 2, 2, 2, 2,126,126,126,126,126,126,126,126,126,126, 126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, 126, 2, 2,126,126,126,126,126,126,126,126,126,126,126,126,126, - 126,126, 2, 2, 2, 2,142,142,142,142,142,142,142,142,142,142, + 126,126, 2, 2, 2, 2,126,126,126,126,126,126,126, 2, 2, 2, + 2, 2, 2, 2, 2, 2,142,142,142,142,142,142,142,142,142,142, 142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, 142,142, 2, 2, 2, 2,125,125,125,125,125,125,125,125,125,125, 125,125,125,125,125,125,125,125,125, 2, 2, 2, 2, 2, 2, 2, @@ -2805,6 +2835,8 @@ _hb_ucd_u8[32480] = 2, 2, 2, 2, 2, 2, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 2, 63, 63, 63, 63, 63, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 63, 63, 63, 63, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2,157,157,157,157,157,157,157,157,157,157, + 157,157,157,157,157,157,157,157,157, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 2, 80, 80, 80, 80, 80, 80, 80, 80, 80, 2, @@ -2814,7 +2846,10 @@ _hb_ucd_u8[32480] = 2, 2, 2, 2, 2, 2,115,115,115,115,115,115,115,115,115,115, 115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115, 115,115,115,115,115, 2,115,115,115,115,115,115,115,115,115,115, - 2, 2, 2, 2,115,115,103,103,103,103,103,103,103,103,103,103, + 2, 2, 2, 2,115,115,159,159,159,159,159,159,159,159,159,159, + 159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159, + 159,159,159,159,159, 2,159,159,159,159,159,159,159,159,159,159, + 2, 2, 2, 2, 2, 2,103,103,103,103,103,103,103,103,103,103, 103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103, 103,103,103,103, 2, 2,103,103,103,103,103,103, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,119,119,119,119,119,119,119,119,119,119, @@ -2827,16 +2862,17 @@ _hb_ucd_u8[32480] = 146, 2, 2, 2, 2, 2, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 2, 2, 2, 2, 99, 99, 99, 99, 99, 99, 99, 99, 99, 2, 2, - 2, 2, 2, 2, 2, 99,136,139, 0, 0,155, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 99,136,139, 13, 13,155, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 13, 13, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,136,136,136,136,136,136,136,136,136,136, 136,136,136,136,136,136,136,136,136,136,136,136,136,136, 2, 2, 2, 2, 2, 2, 2, 2,155,155,155,155,155,155,155,155,155,155, 155,155,155,155,155,155,155,155,155,155,155,155, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,136,136,136,136,136,136,136,136,136, 2, - 2, 2, 2, 2, 2, 2, 17, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 2, 15, 15, 15, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 17, 17, 17, 17, 2, 17, 17, 17, 17, 17, + 17, 17, 2, 17, 17, 2, 17, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 17, 17, 17, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 15, 15, 15, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 17, 17, 17, 17, 2, 2, 2, 2, 2, 2, 2, 2,139,139,139,139,139,139,139,139,139,139, 139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, @@ -2845,14 +2881,16 @@ _hb_ucd_u8[32480] = 105, 2, 2, 2, 2, 2,105,105,105,105,105,105,105,105,105,105, 105,105,105, 2, 2, 2,105,105,105,105,105,105,105,105,105, 2, 2, 2, 2, 2, 2, 2,105,105,105,105,105,105,105,105,105,105, - 2, 2,105,105,105,105, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, + 2, 2,105,105,105,105, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 2, 2, 2, 2, 2, 2, 9, 9, 9, 9, 9, 9, 2, 2, 2, 2, + 1, 1, 1, 1, 0, 0, 9, 9, 9, 9, 9, 9, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 2, 0, 2, 2, 0, 0, 2, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2868,24 +2906,28 @@ _hb_ucd_u8[32480] = 131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131, 131,131, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,131,131,131,131,131, 2,131,131,131,131,131,131,131,131,131, - 131,131,131,131,131,131, 56, 56, 56, 56, 56, 56, 56, 2, 56, 56, + 131,131,131,131,131,131, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 2, 56, 56, 56, 56, 56, 56, 56, 2, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 2, 2, 56, 56, 56, 56, 56, 56, 56, 2, 56, 56, 2, 56, 56, 56, 56, 56, 2, 2, 2, 2, 2,151,151,151,151,151,151,151,151,151,151, 151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151, 151,151,151, 2, 2, 2,151,151,151,151,151,151,151,151,151,151, 151,151,151,151, 2, 2,151,151,151,151,151,151,151,151,151,151, - 2, 2, 2, 2,151,151,152,152,152,152,152,152,152,152,152,152, + 2, 2, 2, 2,151,151,160,160,160,160,160,160,160,160,160,160, + 160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160, + 160,160,160,160,160, 2,152,152,152,152,152,152,152,152,152,152, 152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152, - 2, 2, 2, 2, 2,152,113,113,113,113,113,113,113,113,113,113, + 2, 2, 2, 2, 2,152, 30, 30, 30, 30, 30, 30, 30, 2, 30, 30, + 30, 30, 2, 30, 30, 2, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 2,113,113,113,113,113,113,113,113,113,113, 113,113,113,113,113,113,113,113,113,113,113, 2, 2,113,113,113, 113,113,113,113,113,113,113,113,113,113,113,113,113, 2, 2, 2, 2, 2, 2, 2, 2, 2,132,132,132,132,132,132,132,132,132,132, 132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132, 132,132, 2, 2, 2, 2,132,132,132,132,132,132,132,132,132,132, 2, 2, 2, 2,132,132, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 2, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, + 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 2, 3, 2, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 2, 3, 2, 3, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 3, 2, 3, @@ -2895,14 +2937,14 @@ _hb_ucd_u8[32480] = 3, 3, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 3, 3, 3, 2, 3, 3, 3, 3, 3, - 2, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, + 2, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, - 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, - 0, 2, 2, 2, 2, 2, 13, 13, 13, 13, 13, 2, 2, 2, 2, 2, + 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, + 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, + 0, 0, 0, 2, 2, 2, 13, 13, 13, 13, 13, 13, 13, 13, 13, 2, 2, 2, 2, 2, 2, 2, 13, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, @@ -3099,7 +3141,7 @@ _hb_ucd_u8[32480] = 0, 0, 0, 0, 0, 0, 72, 73, 74, 75, 76, 77, 78, 79, 80, 0, }; static const uint16_t -_hb_ucd_u16[11328] = +_hb_ucd_u16[11584] = { 0, 0, 1, 2, 3, 4, 5, 6, 0, 0, 7, 8, 9, 10, 11, 12, 13, 13, 13, 14, 15, 13, 13, 16, 17, 18, 19, 20, 21, 22, 13, 23, @@ -3109,14 +3151,14 @@ _hb_ucd_u16[11328] = 13, 13, 13, 42, 9, 43, 11, 11, 44, 45, 32, 46, 47, 48, 49, 50, 51, 52, 48, 48, 53, 32, 54, 55, 48, 48, 48, 48, 48, 56, 57, 58, 59, 60, 48, 32, 61, 48, 48, 48, 48, 48, 62, 63, 64, 48, 65, 66, - 48, 67, 68, 69, 48, 70, 71, 72, 72, 72, 48, 73, 74, 75, 76, 32, - 77, 48, 48, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, - 91, 84, 85, 92, 93, 94, 95, 96, 97, 98, 85, 99, 100, 101, 89, 102, - 103, 84, 85, 104, 105, 106, 89, 107, 108, 109, 110, 111, 112, 113, 95, 114, - 115, 116, 85, 117, 118, 119, 89, 120, 121, 116, 85, 122, 123, 124, 89, 125, - 126, 116, 48, 127, 128, 129, 89, 130, 131, 132, 48, 133, 134, 135, 95, 136, - 137, 48, 48, 138, 139, 140, 72, 72, 141, 48, 142, 143, 144, 145, 72, 72, - 146, 147, 148, 149, 150, 48, 151, 152, 153, 154, 32, 155, 156, 157, 72, 72, + 48, 67, 68, 69, 48, 70, 71, 48, 72, 73, 48, 48, 74, 32, 75, 32, + 76, 48, 48, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 83, 84, 91, 92, 93, 94, 95, 96, 97, 84, 98, 99, 100, 88, 101, + 102, 83, 84, 103, 104, 105, 88, 106, 107, 108, 109, 110, 111, 112, 94, 113, + 114, 115, 84, 116, 117, 118, 88, 119, 120, 115, 84, 121, 122, 123, 88, 124, + 125, 115, 48, 126, 127, 128, 88, 129, 130, 131, 48, 132, 133, 134, 94, 135, + 136, 48, 48, 137, 138, 139, 140, 140, 141, 48, 142, 143, 144, 145, 140, 140, + 146, 147, 148, 149, 150, 48, 151, 152, 153, 154, 32, 155, 156, 157, 140, 140, 48, 48, 158, 159, 160, 161, 162, 163, 164, 165, 9, 9, 166, 11, 11, 167, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 168, 169, 48, 48, 168, 48, 48, 170, 171, 172, 48, 48, @@ -3124,51 +3166,49 @@ _hb_ucd_u16[11328] = 178, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 179, 48, 180, 181, 48, 48, 48, 48, 182, 183, - 184, 185, 48, 186, 48, 187, 184, 188, 48, 48, 48, 189, 190, 191, 192, 193, + 48, 184, 48, 185, 48, 186, 187, 188, 48, 48, 48, 189, 190, 191, 192, 193, 194, 192, 48, 48, 195, 48, 48, 196, 197, 48, 198, 48, 48, 48, 48, 199, 48, 200, 201, 202, 203, 48, 204, 205, 48, 48, 206, 48, 207, 208, 209, 209, - 48, 210, 48, 48, 48, 211, 212, 213, 192, 192, 214, 215, 216, 72, 72, 72, + 48, 210, 48, 48, 48, 211, 212, 213, 192, 192, 214, 215, 216, 140, 140, 140, 217, 48, 48, 218, 219, 160, 220, 221, 222, 48, 223, 64, 48, 48, 224, 225, 48, 48, 226, 227, 228, 64, 48, 229, 230, 9, 9, 231, 232, 233, 234, 235, - 11, 11, 236, 27, 27, 27, 237, 238, 11, 239, 27, 27, 32, 32, 32, 240, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 241, 13, 13, 13, 13, 13, 13, - 242, 243, 242, 242, 243, 244, 242, 245, 246, 246, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 262, 72, 263, 264, 216, - 265, 266, 267, 268, 269, 270, 271, 271, 272, 273, 274, 209, 275, 276, 209, 277, - 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, - 279, 209, 280, 209, 209, 209, 209, 281, 209, 282, 278, 283, 209, 284, 285, 209, - 209, 209, 286, 72, 287, 72, 270, 270, 270, 288, 209, 209, 209, 209, 289, 270, - 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 290, 291, 209, 209, 292, - 209, 209, 209, 209, 209, 209, 293, 209, 209, 209, 209, 209, 209, 209, 209, 209, - 209, 209, 209, 209, 209, 209, 294, 295, 270, 296, 209, 209, 297, 278, 298, 278, + 11, 11, 236, 27, 27, 27, 237, 238, 11, 239, 27, 27, 32, 32, 32, 32, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 240, 13, 13, 13, 13, 13, 13, + 241, 242, 241, 241, 242, 243, 241, 244, 245, 245, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 272, 273, 274, 275, 209, 276, 277, 209, 278, + 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, + 280, 209, 281, 209, 209, 209, 209, 282, 209, 283, 279, 284, 209, 285, 286, 209, + 209, 209, 287, 140, 288, 140, 271, 271, 271, 289, 209, 209, 209, 209, 290, 271, + 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 291, 292, 209, 209, 293, + 209, 209, 209, 209, 209, 209, 294, 209, 209, 209, 209, 209, 209, 209, 209, 209, + 209, 209, 209, 209, 209, 209, 295, 296, 271, 297, 209, 209, 298, 279, 299, 279, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, - 278, 278, 278, 278, 278, 278, 278, 278, 299, 300, 278, 278, 278, 301, 278, 302, - 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, - 209, 209, 209, 278, 303, 209, 209, 304, 209, 305, 209, 209, 209, 209, 209, 209, - 9, 9, 306, 11, 11, 307, 308, 309, 13, 13, 13, 13, 13, 13, 310, 311, - 11, 11, 312, 48, 48, 48, 313, 314, 48, 315, 316, 316, 316, 316, 32, 32, - 317, 318, 319, 320, 321, 322, 72, 72, 209, 323, 209, 209, 209, 209, 209, 324, - 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 325, 72, 326, - 327, 328, 329, 330, 137, 48, 48, 48, 48, 331, 178, 48, 48, 48, 48, 332, - 333, 48, 48, 137, 48, 48, 48, 48, 200, 334, 48, 48, 209, 209, 324, 48, - 209, 335, 336, 209, 337, 338, 209, 209, 336, 209, 209, 338, 209, 209, 209, 209, + 279, 279, 279, 279, 279, 279, 279, 279, 300, 301, 279, 279, 279, 302, 279, 303, + 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, + 209, 209, 209, 279, 304, 209, 209, 305, 209, 306, 209, 209, 209, 209, 209, 209, + 9, 9, 9, 11, 11, 11, 307, 308, 13, 13, 13, 13, 13, 13, 309, 310, + 11, 11, 311, 48, 48, 48, 312, 313, 48, 314, 315, 315, 315, 315, 32, 32, + 316, 317, 318, 319, 320, 321, 140, 140, 209, 322, 209, 209, 209, 209, 209, 323, + 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 324, 140, 325, + 326, 327, 328, 329, 136, 48, 48, 48, 48, 330, 178, 48, 48, 48, 48, 331, + 332, 48, 48, 136, 48, 48, 48, 48, 200, 333, 48, 48, 209, 209, 323, 48, + 209, 334, 335, 209, 336, 337, 209, 209, 335, 209, 209, 337, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 209, 209, 209, 209, + 48, 338, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 151, - 48, 339, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 151, 209, 209, 209, 287, 48, 48, 229, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 151, 209, 209, 209, 286, 48, 48, 229, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 340, 48, 341, 72, 13, 13, 342, 343, 13, 344, 48, 48, 48, 48, 345, 346, - 31, 347, 348, 349, 13, 13, 13, 350, 351, 352, 353, 354, 355, 72, 72, 356, + 339, 48, 340, 140, 13, 13, 341, 342, 13, 343, 48, 48, 48, 48, 344, 345, + 31, 346, 347, 348, 13, 13, 13, 349, 350, 351, 352, 353, 354, 355, 140, 356, 357, 48, 358, 359, 48, 48, 48, 360, 361, 48, 48, 362, 363, 192, 32, 364, - 64, 48, 365, 48, 366, 367, 48, 151, 77, 48, 48, 368, 369, 370, 371, 372, + 64, 48, 365, 48, 366, 367, 48, 151, 76, 48, 48, 368, 369, 370, 371, 372, 48, 48, 373, 374, 375, 376, 48, 377, 48, 48, 48, 378, 379, 380, 381, 382, - 383, 384, 316, 11, 11, 385, 386, 11, 11, 11, 11, 11, 48, 48, 387, 192, + 383, 384, 315, 11, 11, 385, 386, 11, 11, 11, 11, 11, 48, 48, 387, 192, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 388, 48, 389, 48, 48, 206, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, @@ -3177,120 +3217,130 @@ _hb_ucd_u16[11328] = 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 204, 48, 48, 48, 48, 48, 48, 207, 72, 72, + 48, 48, 48, 48, 48, 48, 204, 48, 48, 48, 48, 48, 48, 207, 140, 140, 392, 393, 394, 395, 396, 48, 48, 48, 48, 48, 48, 397, 398, 399, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 400, 72, 48, 48, 48, 48, 401, 48, 48, 74, 72, 72, 402, - 32, 403, 32, 404, 405, 406, 407, 73, 48, 48, 48, 48, 48, 48, 48, 408, - 409, 2, 3, 4, 5, 410, 411, 412, 48, 413, 48, 200, 414, 415, 416, 417, - 418, 48, 172, 419, 204, 204, 72, 72, 48, 48, 48, 48, 48, 48, 48, 71, - 420, 270, 270, 421, 271, 271, 271, 422, 423, 424, 425, 72, 72, 209, 209, 426, - 72, 72, 72, 72, 72, 72, 72, 72, 48, 151, 48, 48, 48, 101, 427, 428, - 48, 48, 429, 48, 430, 48, 48, 431, 48, 432, 48, 48, 433, 434, 72, 72, - 9, 9, 435, 11, 11, 48, 48, 48, 48, 204, 192, 9, 9, 436, 11, 437, - 48, 48, 74, 48, 48, 48, 438, 72, 72, 72, 72, 72, 72, 72, 72, 72, + 48, 48, 48, 400, 209, 48, 48, 48, 48, 401, 48, 48, 402, 140, 140, 403, + 32, 404, 32, 405, 406, 407, 408, 409, 48, 48, 48, 48, 48, 48, 48, 410, + 411, 2, 3, 4, 5, 412, 413, 414, 48, 415, 48, 200, 416, 417, 418, 419, + 420, 48, 172, 421, 204, 204, 140, 140, 48, 48, 48, 48, 48, 48, 48, 71, + 422, 271, 271, 423, 272, 272, 272, 424, 425, 426, 427, 140, 140, 209, 209, 428, + 140, 140, 140, 140, 140, 140, 140, 140, 48, 151, 48, 48, 48, 100, 429, 430, + 48, 48, 431, 48, 432, 48, 48, 433, 48, 434, 48, 48, 435, 436, 140, 140, + 9, 9, 437, 11, 11, 48, 48, 48, 48, 204, 192, 9, 9, 438, 11, 439, + 48, 48, 440, 48, 48, 48, 441, 442, 442, 443, 444, 445, 140, 140, 140, 140, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 315, 48, 199, 74, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 439, 48, 48, 440, 48, 441, 48, 442, 48, 200, 443, 72, 72, 72, 48, 444, - 48, 445, 48, 446, 72, 72, 72, 72, 48, 48, 48, 447, 270, 448, 270, 270, - 449, 450, 48, 451, 452, 453, 48, 454, 48, 455, 72, 72, 456, 48, 457, 458, - 48, 48, 48, 459, 48, 460, 48, 461, 48, 462, 463, 72, 72, 72, 72, 72, - 48, 48, 48, 48, 196, 72, 72, 72, 9, 9, 9, 464, 11, 11, 11, 465, - 48, 48, 466, 192, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 72, 72, 72, 72, 72, 72, 270, 467, 48, 48, 468, 469, 72, 72, 72, 72, - 48, 455, 470, 48, 62, 471, 72, 72, 72, 72, 72, 48, 472, 72, 48, 315, - 473, 48, 48, 474, 475, 448, 476, 477, 222, 48, 48, 478, 479, 48, 196, 192, - 480, 48, 481, 482, 483, 48, 48, 484, 222, 48, 48, 485, 486, 487, 488, 489, - 48, 98, 490, 491, 72, 72, 72, 72, 492, 493, 494, 48, 48, 495, 496, 192, - 497, 84, 85, 498, 499, 500, 501, 502, 72, 72, 72, 72, 72, 72, 72, 72, - 48, 48, 48, 503, 504, 505, 469, 72, 48, 48, 48, 506, 507, 192, 72, 72, - 72, 72, 72, 72, 72, 72, 72, 72, 48, 48, 508, 509, 510, 511, 72, 72, - 48, 48, 48, 512, 513, 192, 514, 72, 48, 48, 515, 516, 192, 72, 72, 72, - 48, 173, 517, 518, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 48, 48, 490, 519, 72, 72, 72, 72, 72, 72, 9, 9, 11, 11, 148, 520, - 521, 522, 48, 523, 524, 192, 72, 72, 72, 72, 525, 48, 48, 526, 527, 72, - 528, 48, 48, 529, 530, 531, 48, 48, 532, 533, 534, 72, 48, 48, 48, 196, - 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 85, 48, 508, 535, 536, 148, 175, 537, 48, 538, 539, 540, 72, 72, 72, 72, - 541, 48, 48, 542, 543, 192, 544, 48, 545, 546, 192, 72, 72, 72, 72, 72, - 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 48, 547, - 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 101, 270, 548, 549, 550, + 48, 48, 48, 314, 48, 199, 440, 140, 446, 27, 27, 447, 140, 140, 140, 140, + 448, 48, 48, 449, 48, 450, 48, 451, 48, 200, 452, 140, 140, 140, 48, 453, + 48, 454, 48, 455, 140, 140, 140, 140, 48, 48, 48, 456, 271, 457, 271, 271, + 458, 459, 48, 460, 461, 462, 48, 463, 48, 464, 140, 140, 465, 48, 466, 467, + 48, 48, 48, 468, 48, 469, 48, 470, 48, 471, 472, 140, 140, 140, 140, 140, + 48, 48, 48, 48, 196, 140, 140, 140, 9, 9, 9, 473, 11, 11, 11, 474, + 48, 48, 475, 192, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 271, 476, 48, 48, 477, 478, 140, 140, 140, 140, + 48, 464, 479, 48, 62, 480, 140, 48, 481, 140, 140, 48, 482, 140, 48, 314, + 483, 48, 48, 484, 485, 457, 486, 487, 222, 48, 48, 488, 489, 48, 196, 192, + 490, 48, 491, 492, 493, 48, 48, 494, 222, 48, 48, 495, 496, 497, 498, 499, + 48, 97, 500, 501, 140, 140, 140, 140, 502, 503, 504, 48, 48, 505, 506, 192, + 507, 83, 84, 508, 509, 510, 511, 512, 140, 140, 140, 140, 140, 140, 140, 140, + 48, 48, 48, 513, 514, 515, 478, 140, 48, 48, 48, 516, 517, 192, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 48, 48, 518, 519, 520, 521, 140, 140, + 48, 48, 48, 522, 523, 192, 524, 140, 48, 48, 525, 526, 192, 140, 140, 140, + 48, 173, 527, 528, 314, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 48, 48, 500, 529, 140, 140, 140, 140, 140, 140, 9, 9, 11, 11, 148, 530, + 531, 532, 48, 533, 534, 192, 140, 140, 140, 140, 535, 48, 48, 536, 537, 140, + 538, 48, 48, 539, 540, 541, 48, 48, 542, 543, 544, 48, 48, 48, 48, 196, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 84, 48, 518, 545, 546, 148, 175, 547, 48, 548, 549, 550, 140, 140, 140, 140, + 551, 48, 48, 552, 553, 192, 554, 48, 555, 556, 192, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 48, 557, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 100, 271, 558, 559, 560, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 207, 72, 72, 72, 72, 72, 72, - 271, 271, 271, 271, 271, 271, 551, 552, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 388, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 48, 48, 200, 553, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 48, 48, 48, 48, 315, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 48, 48, 48, 196, 48, 200, 370, 72, 72, 72, 72, 72, 72, 48, 204, 554, - 48, 48, 48, 555, 556, 557, 558, 559, 48, 72, 72, 72, 72, 72, 72, 72, - 72, 72, 72, 72, 9, 9, 11, 11, 270, 560, 72, 72, 72, 72, 72, 72, - 48, 48, 48, 48, 561, 562, 563, 563, 564, 565, 72, 72, 72, 72, 566, 567, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 207, 140, 140, 140, 140, 140, 140, + 272, 272, 272, 272, 272, 272, 561, 562, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 388, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 48, 48, 48, 48, 48, 48, 563, + 48, 48, 200, 564, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 48, 48, 48, 48, 314, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 48, 48, 48, 196, 48, 200, 370, 48, 48, 48, 48, 200, 192, 48, 204, 565, + 48, 48, 48, 566, 567, 568, 569, 570, 48, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 9, 9, 11, 11, 271, 571, 140, 140, 140, 140, 140, 140, + 48, 48, 48, 48, 572, 573, 574, 574, 575, 576, 140, 140, 140, 140, 577, 578, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 74, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 199, 72, 72, - 196, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 440, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 199, 140, 140, + 196, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 579, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 200, 72, 72, 72, 568, 569, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 580, 140, 140, 580, 581, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 206, - 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 48, 48, 48, 48, 48, 48, 71, 151, 196, 570, 571, 72, 72, 72, 72, 72, - 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 325, - 209, 209, 572, 209, 209, 209, 573, 574, 575, 209, 576, 209, 209, 209, 577, 72, - 209, 209, 209, 209, 578, 72, 72, 72, 72, 72, 72, 72, 72, 72, 270, 579, - 209, 209, 209, 209, 209, 286, 270, 452, 72, 72, 72, 72, 72, 72, 72, 72, - 9, 580, 11, 581, 582, 583, 242, 9, 584, 585, 586, 587, 588, 9, 580, 11, - 589, 590, 11, 591, 592, 593, 594, 9, 595, 11, 9, 580, 11, 581, 582, 11, - 242, 9, 584, 594, 9, 595, 11, 9, 580, 11, 596, 9, 597, 598, 599, 600, - 11, 601, 9, 602, 603, 604, 605, 11, 606, 9, 607, 11, 608, 609, 609, 609, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 48, 48, 48, 48, 48, 48, 71, 151, 196, 582, 583, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 32, 32, 584, 32, 585, 209, 209, 209, 209, 209, 209, 209, 323, 140, 140, 140, + 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 324, + 209, 209, 586, 209, 209, 209, 587, 588, 589, 209, 590, 209, 209, 209, 288, 140, + 209, 209, 209, 209, 591, 140, 140, 140, 140, 140, 140, 140, 140, 140, 271, 592, + 209, 209, 209, 209, 209, 287, 271, 461, 140, 140, 140, 140, 140, 140, 140, 140, + 9, 593, 11, 594, 595, 596, 241, 9, 597, 598, 599, 600, 601, 9, 593, 11, + 602, 603, 11, 604, 605, 606, 607, 9, 608, 11, 9, 593, 11, 594, 595, 11, + 241, 9, 597, 607, 9, 608, 11, 9, 593, 11, 609, 9, 610, 611, 612, 613, + 11, 614, 9, 615, 616, 617, 618, 11, 619, 9, 620, 11, 621, 622, 622, 622, + 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, + 32, 32, 32, 623, 32, 32, 624, 625, 626, 627, 45, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 628, 629, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 630, 631, 632, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 48, 48, 151, 633, 634, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 48, 635, 140, 48, 48, 636, 637, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 638, 200, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 639, 585, 140, 140, + 9, 9, 597, 11, 640, 370, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 498, 271, 271, 641, 642, 140, 140, 140, 140, + 498, 271, 643, 644, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 645, 48, 646, 647, 648, 649, 650, 651, 652, 206, 653, 206, 140, 140, 140, 654, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 209, 209, 325, 209, 209, 209, 209, 209, 209, 323, 334, 655, 655, 655, 209, 324, + 656, 209, 209, 209, 209, 209, 209, 209, 209, 209, 657, 140, 140, 140, 658, 209, + 659, 209, 209, 325, 660, 661, 324, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 662, + 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 663, 426, 426, + 209, 209, 209, 209, 209, 209, 209, 323, 209, 209, 209, 209, 209, 660, 325, 427, + 325, 209, 209, 209, 664, 176, 209, 209, 664, 209, 657, 661, 140, 140, 140, 140, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, - 32, 32, 32, 610, 32, 32, 611, 612, 613, 614, 45, 72, 72, 72, 72, 72, - 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 615, 616, 617, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 48, 48, 151, 618, 619, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 48, 48, 620, 621, - 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 622, 623, 72, 72, - 9, 9, 584, 11, 624, 370, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 72, 72, 72, 72, 72, 72, 72, 488, 270, 270, 625, 626, 72, 72, 72, 72, - 488, 270, 627, 628, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 629, 48, 630, 631, 632, 633, 634, 635, 636, 206, 637, 206, 72, 72, 72, 638, - 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 209, 209, 326, 209, 209, 209, 209, 209, 209, 324, 335, 639, 639, 639, 209, 325, - 640, 209, 209, 209, 209, 209, 209, 209, 209, 209, 641, 72, 72, 72, 642, 209, - 643, 209, 209, 326, 577, 644, 325, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 645, - 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 646, 424, 424, - 209, 209, 209, 209, 209, 209, 209, 324, 209, 209, 209, 209, 209, 577, 326, 72, - 326, 209, 209, 209, 646, 176, 209, 209, 646, 209, 641, 644, 72, 72, 72, 72, - 209, 209, 209, 209, 209, 209, 209, 647, 209, 209, 209, 209, 648, 209, 209, 209, - 209, 209, 209, 209, 209, 324, 641, 649, 286, 209, 577, 286, 643, 286, 72, 72, - 209, 209, 209, 209, 209, 209, 209, 209, 209, 650, 209, 209, 287, 72, 72, 192, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 204, 72, 72, + 209, 209, 209, 209, 209, 323, 657, 665, 287, 209, 426, 288, 324, 176, 664, 287, + 209, 209, 209, 209, 209, 209, 209, 209, 209, 666, 209, 209, 288, 140, 140, 192, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 140, 140, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 205, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 196, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 204, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 469, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 478, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 101, 72, - 48, 204, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 100, 140, + 48, 204, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 71, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 651, 72, 652, 652, 652, 652, 652, 652, 72, 72, 72, 72, 72, 72, 72, 72, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 72, + 48, 48, 48, 48, 71, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 667, 140, 668, 668, 668, 668, 668, 668, 140, 140, 140, 140, 140, 140, 140, 140, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 140, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, - 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 653, + 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 669, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, - 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 654, + 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 670, 0, 0, 0, 0, 1, 2, 1, 2, 0, 0, 3, 3, 4, 5, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 0, 0, 7, 0, @@ -3299,191 +3349,199 @@ _hb_ucd_u16[11328] = 14, 14, 14, 16, 17, 18, 17, 17, 19, 20, 21, 21, 22, 21, 23, 24, 25, 26, 27, 27, 28, 29, 27, 30, 27, 27, 27, 27, 27, 31, 27, 27, 32, 33, 33, 33, 34, 27, 27, 27, 35, 35, 35, 36, 37, 37, 37, 38, - 39, 39, 40, 41, 42, 43, 44, 45, 45, 45, 27, 46, 47, 48, 49, 27, - 50, 50, 50, 50, 50, 51, 52, 50, 53, 54, 55, 56, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, - 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, - 109, 110, 111, 111, 112, 113, 114, 111, 115, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 124, 125, 124, 126, 45, 45, 127, 128, 129, 130, 131, 132, 45, 45, - 133, 133, 133, 133, 134, 133, 135, 136, 133, 134, 133, 137, 137, 138, 45, 45, - 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 141, 140, 140, 142, - 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, - 144, 144, 144, 144, 145, 146, 144, 144, 145, 144, 144, 147, 148, 149, 144, 144, - 144, 148, 144, 144, 144, 150, 144, 151, 144, 152, 153, 153, 153, 153, 153, 154, - 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, 156, 157, 158, 158, 158, 158, 159, 160, - 161, 162, 163, 164, 165, 166, 167, 168, 169, 169, 169, 169, 169, 170, 171, 171, - 172, 173, 174, 174, 174, 174, 174, 175, 174, 174, 176, 155, 155, 155, 155, 177, - 178, 179, 180, 180, 181, 182, 183, 184, 185, 185, 186, 185, 187, 188, 169, 169, - 189, 190, 191, 191, 191, 192, 191, 193, 194, 194, 195, 8, 196, 45, 45, 45, - 197, 197, 197, 197, 198, 197, 197, 199, 200, 200, 200, 200, 201, 201, 201, 202, - 203, 203, 203, 204, 205, 206, 206, 206, 207, 140, 140, 208, 209, 210, 211, 212, - 4, 4, 213, 4, 4, 214, 215, 216, 4, 4, 4, 217, 8, 8, 8, 218, + 39, 39, 40, 41, 42, 43, 44, 27, 45, 46, 27, 27, 27, 27, 47, 27, + 48, 48, 48, 48, 48, 49, 50, 48, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 109, 110, 111, 112, 109, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 122, 123, 122, 124, 125, 125, 126, 127, 128, 129, 130, 131, 125, 125, + 132, 132, 132, 132, 133, 132, 134, 135, 132, 133, 132, 136, 136, 137, 125, 125, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 140, 139, 139, 141, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 143, 143, 143, 143, 144, 145, 143, 143, 144, 143, 143, 146, 147, 148, 143, 143, + 143, 147, 143, 143, 143, 149, 143, 150, 143, 151, 152, 152, 152, 152, 152, 153, + 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, + 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, + 154, 154, 154, 154, 154, 154, 154, 154, 155, 156, 157, 157, 157, 157, 158, 159, + 160, 161, 162, 163, 164, 165, 166, 167, 168, 168, 168, 168, 168, 169, 170, 170, + 171, 172, 173, 173, 173, 173, 173, 174, 173, 173, 175, 154, 154, 154, 154, 176, + 177, 178, 179, 179, 180, 181, 182, 183, 184, 184, 185, 184, 186, 187, 168, 168, + 188, 189, 190, 190, 190, 191, 190, 192, 193, 193, 194, 8, 195, 125, 125, 125, + 196, 196, 196, 196, 197, 196, 196, 198, 199, 199, 199, 199, 200, 200, 200, 201, + 202, 202, 202, 203, 204, 205, 205, 205, 206, 139, 139, 207, 208, 209, 210, 211, + 4, 4, 212, 4, 4, 213, 214, 215, 4, 4, 4, 216, 8, 8, 8, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 11, 219, 11, 11, 219, 220, 11, 221, 11, 11, 11, 222, 222, 223, 11, 224, - 225, 0, 0, 0, 0, 0, 226, 227, 228, 229, 0, 0, 45, 8, 8, 196, + 11, 217, 11, 11, 217, 218, 11, 219, 11, 11, 11, 220, 220, 221, 11, 222, + 223, 0, 0, 0, 0, 0, 224, 225, 226, 227, 0, 0, 228, 8, 8, 229, 0, 0, 230, 231, 232, 0, 4, 4, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 234, 45, 235, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 234, 125, 235, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 0, 238, 0, 0, 0, 0, 0, 0, - 239, 239, 240, 239, 239, 240, 4, 4, 241, 241, 241, 241, 241, 241, 241, 242, - 140, 140, 141, 243, 243, 243, 244, 245, 144, 246, 247, 247, 247, 247, 14, 14, - 0, 0, 0, 0, 0, 248, 45, 45, 249, 250, 249, 249, 249, 249, 249, 251, - 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 252, 45, 253, - 254, 0, 255, 256, 257, 258, 258, 258, 258, 259, 260, 261, 261, 261, 261, 262, - 263, 264, 264, 265, 143, 143, 143, 143, 266, 0, 264, 264, 0, 0, 267, 261, - 143, 266, 0, 0, 0, 0, 143, 268, 0, 0, 0, 0, 0, 261, 261, 269, - 261, 261, 261, 261, 261, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, - 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, - 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, - 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 0, 0, 0, 0, - 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, - 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 271, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 273, 272, 272, 272, 274, 275, 275, 275, - 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, - 276, 276, 277, 45, 14, 14, 14, 14, 14, 14, 278, 278, 278, 278, 278, 279, - 0, 0, 280, 4, 4, 4, 4, 4, 281, 4, 4, 4, 282, 45, 45, 283, - 284, 284, 285, 286, 287, 287, 287, 288, 289, 289, 289, 289, 290, 291, 50, 50, - 292, 292, 293, 294, 294, 295, 143, 296, 297, 297, 297, 297, 298, 299, 139, 300, - 301, 301, 301, 302, 303, 304, 139, 139, 305, 305, 305, 305, 306, 307, 308, 309, - 310, 311, 247, 4, 4, 312, 313, 153, 153, 153, 153, 153, 308, 308, 314, 315, - 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 316, 143, 317, 143, 143, 318, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, - 249, 249, 249, 249, 249, 249, 319, 249, 249, 249, 249, 249, 249, 320, 45, 45, - 321, 322, 21, 323, 324, 27, 27, 27, 27, 27, 27, 27, 325, 48, 27, 27, + 239, 239, 239, 239, 239, 239, 4, 4, 240, 240, 240, 240, 240, 240, 240, 241, + 139, 139, 140, 242, 242, 242, 243, 244, 143, 245, 246, 246, 246, 246, 14, 14, + 0, 0, 0, 0, 0, 247, 125, 125, 248, 249, 248, 248, 248, 248, 248, 250, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 251, 125, 252, + 253, 0, 254, 255, 256, 257, 257, 257, 257, 258, 259, 260, 260, 260, 260, 261, + 262, 263, 263, 264, 142, 142, 142, 142, 265, 0, 263, 263, 0, 0, 266, 260, + 142, 265, 0, 0, 0, 0, 142, 267, 0, 0, 0, 0, 0, 260, 260, 268, + 260, 260, 260, 260, 260, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 0, 0, 0, 0, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 271, 270, 270, 270, 272, 273, 273, 273, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 275, 125, 14, 14, 14, 14, 14, 14, 276, 276, 276, 276, 276, 277, + 0, 0, 278, 4, 4, 4, 4, 4, 279, 4, 4, 4, 280, 281, 125, 282, + 283, 283, 284, 285, 286, 286, 286, 287, 288, 288, 288, 288, 289, 290, 48, 48, + 291, 291, 292, 293, 293, 294, 142, 295, 296, 296, 296, 296, 297, 298, 138, 299, + 300, 300, 300, 301, 302, 303, 138, 138, 304, 304, 304, 304, 305, 306, 307, 308, + 309, 310, 246, 4, 4, 311, 312, 152, 152, 152, 152, 152, 307, 307, 313, 314, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 315, 142, 316, 142, 142, 317, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 318, 248, 248, 248, 248, 248, 248, 319, 125, 125, + 320, 321, 21, 322, 323, 27, 27, 27, 27, 27, 27, 27, 324, 325, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 326, 45, 27, 27, 27, 27, 327, 27, 27, 47, 45, 45, 328, - 8, 286, 329, 0, 0, 330, 331, 46, 27, 27, 27, 27, 27, 27, 27, 332, - 333, 0, 1, 2, 1, 2, 334, 260, 261, 335, 143, 266, 336, 337, 338, 339, - 340, 341, 342, 343, 344, 344, 45, 45, 341, 341, 341, 341, 341, 341, 341, 345, - 346, 0, 0, 347, 11, 11, 11, 11, 348, 349, 350, 45, 45, 0, 0, 351, - 45, 45, 45, 45, 45, 45, 45, 45, 352, 353, 354, 354, 354, 355, 356, 253, - 357, 357, 358, 359, 360, 361, 361, 362, 363, 364, 365, 365, 366, 367, 45, 45, - 368, 368, 368, 368, 368, 369, 369, 369, 370, 371, 372, 373, 373, 374, 373, 375, - 376, 376, 377, 378, 378, 378, 379, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, - 380, 380, 380, 381, 380, 382, 383, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 384, 385, 385, 386, 387, 388, 389, 389, 390, 391, 392, 45, 45, 45, 393, 394, - 395, 396, 397, 398, 45, 45, 45, 45, 399, 399, 400, 401, 400, 402, 400, 400, - 403, 404, 405, 406, 407, 407, 408, 408, 409, 409, 45, 45, 410, 410, 411, 412, - 413, 413, 413, 414, 415, 416, 417, 418, 419, 420, 421, 45, 45, 45, 45, 45, - 422, 422, 422, 422, 423, 45, 45, 45, 424, 424, 424, 425, 424, 424, 424, 426, - 427, 427, 428, 429, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 27, 430, 431, 431, 432, 433, 45, 45, 45, 45, - 434, 434, 435, 436, 436, 437, 45, 45, 45, 45, 45, 438, 439, 45, 440, 441, - 442, 442, 442, 442, 443, 444, 442, 445, 446, 446, 446, 446, 447, 448, 449, 450, - 451, 451, 451, 452, 453, 454, 454, 455, 456, 456, 456, 456, 456, 456, 457, 458, - 459, 460, 459, 461, 45, 45, 45, 45, 462, 463, 464, 465, 465, 465, 466, 467, - 468, 469, 470, 471, 472, 473, 474, 475, 45, 45, 45, 45, 45, 45, 45, 45, - 476, 476, 476, 476, 476, 477, 478, 45, 479, 479, 479, 479, 480, 481, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 482, 482, 482, 483, 482, 484, 45, 45, - 485, 485, 485, 485, 486, 487, 488, 45, 489, 489, 489, 490, 491, 45, 45, 45, - 492, 493, 494, 492, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 495, 495, 495, 496, 45, 45, 45, 45, 45, 45, 497, 497, 497, 497, 497, 498, - 499, 500, 501, 502, 503, 504, 45, 45, 45, 45, 505, 506, 506, 505, 507, 45, - 508, 508, 508, 508, 509, 510, 510, 510, 510, 510, 511, 45, 512, 512, 512, 513, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 514, 515, 515, 516, 517, 515, 518, 519, 519, 520, 521, 522, 45, 45, 45, 45, - 523, 524, 524, 525, 526, 527, 528, 529, 530, 531, 532, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 533, 534, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 535, 536, 536, 536, 537, - 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, - 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, - 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, - 538, 538, 538, 538, 538, 538, 538, 538, 538, 539, 45, 45, 45, 45, 45, 45, - 538, 538, 538, 538, 538, 538, 540, 541, 538, 538, 538, 538, 538, 538, 538, 538, - 538, 538, 538, 538, 542, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, - 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, - 543, 543, 544, 545, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 27, 27, 27, 326, 27, 27, 27, 27, 27, 327, 27, 27, 328, 125, 125, 27, + 8, 285, 329, 0, 0, 330, 331, 332, 27, 27, 27, 27, 27, 27, 27, 333, + 334, 0, 1, 2, 1, 2, 335, 259, 260, 336, 142, 265, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 345, 125, 125, 342, 342, 342, 342, 342, 342, 342, 346, + 347, 0, 0, 348, 11, 11, 11, 11, 349, 350, 351, 125, 125, 0, 0, 352, + 125, 125, 125, 125, 125, 125, 125, 125, 353, 354, 355, 355, 355, 356, 357, 252, + 358, 358, 359, 360, 361, 362, 362, 363, 364, 365, 366, 366, 367, 368, 125, 125, + 369, 369, 369, 369, 369, 370, 370, 370, 371, 372, 373, 374, 374, 375, 374, 376, + 377, 377, 378, 379, 379, 379, 380, 381, 381, 382, 383, 384, 125, 125, 125, 125, + 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, + 385, 385, 385, 386, 385, 387, 388, 125, 389, 4, 4, 390, 125, 125, 125, 125, + 391, 392, 392, 393, 394, 395, 396, 396, 397, 398, 399, 125, 125, 125, 400, 401, + 402, 403, 404, 405, 125, 125, 125, 125, 406, 406, 407, 408, 407, 409, 407, 407, + 410, 411, 412, 413, 414, 414, 415, 415, 416, 416, 125, 125, 417, 417, 418, 419, + 420, 420, 420, 421, 422, 423, 424, 425, 426, 427, 428, 125, 125, 125, 125, 125, + 429, 429, 429, 429, 430, 125, 125, 125, 431, 431, 431, 432, 431, 431, 431, 433, + 434, 434, 435, 436, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 27, 45, 437, 437, 438, 439, 125, 125, 125, 125, + 440, 440, 441, 442, 442, 443, 125, 444, 445, 125, 125, 446, 447, 125, 448, 449, + 450, 450, 450, 450, 451, 452, 450, 453, 454, 454, 454, 454, 455, 456, 457, 458, + 459, 459, 459, 460, 461, 462, 462, 463, 464, 464, 464, 464, 464, 464, 465, 466, + 467, 468, 467, 469, 125, 125, 125, 125, 470, 471, 472, 473, 473, 473, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 125, 125, 125, 125, 125, 125, 125, 125, + 484, 484, 484, 484, 484, 485, 486, 125, 487, 487, 487, 487, 488, 489, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 490, 490, 490, 491, 490, 492, 125, 125, + 493, 493, 493, 493, 494, 495, 496, 125, 497, 497, 497, 498, 498, 125, 125, 125, + 499, 500, 501, 499, 502, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 503, 503, 503, 504, 125, 125, 125, 125, 125, 125, 505, 505, 505, 505, 505, 506, + 507, 508, 509, 510, 511, 512, 125, 125, 125, 125, 513, 514, 514, 513, 515, 125, + 516, 516, 516, 516, 517, 518, 518, 518, 518, 518, 519, 154, 520, 520, 520, 521, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 522, 523, 523, 524, 525, 523, 526, 527, 527, 528, 529, 530, 125, 125, 125, 125, + 531, 532, 532, 533, 534, 535, 536, 537, 538, 539, 540, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 541, 542, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 543, 544, 544, 544, 545, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, - 546, 546, 546, 546, 547, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, - 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, - 278, 278, 278, 548, 549, 550, 551, 45, 45, 45, 45, 45, 45, 552, 553, 554, - 555, 555, 555, 555, 556, 557, 558, 559, 555, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 560, 560, 560, 560, 560, 561, 45, 45, 45, 45, 45, 45, - 562, 562, 562, 562, 563, 562, 562, 562, 564, 562, 45, 45, 45, 45, 565, 566, - 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, - 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, - 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, - 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 568, - 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, - 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, - 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 570, 45, 45, - 571, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 572, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, - 258, 573, 45, 45, 45, 574, 575, 576, 576, 576, 576, 576, 576, 576, 576, 576, - 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 577, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 578, 578, 578, 578, 578, 578, 579, 580, 581, 582, 267, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 583, - 0, 0, 584, 0, 0, 0, 585, 586, 587, 0, 588, 0, 0, 0, 589, 45, - 11, 11, 11, 11, 590, 45, 45, 45, 45, 45, 45, 45, 45, 45, 0, 267, - 0, 0, 0, 0, 0, 234, 0, 589, 45, 45, 45, 45, 45, 45, 45, 45, - 0, 0, 0, 0, 0, 226, 0, 0, 0, 591, 592, 593, 594, 0, 0, 0, - 595, 596, 0, 597, 598, 599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 600, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 601, 0, 0, 0, - 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, - 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, - 602, 602, 602, 602, 602, 602, 602, 602, 603, 604, 605, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 606, 607, 608, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 609, 609, 610, 611, 612, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 613, 613, 613, 614, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 616, 617, 45, 45, - 618, 618, 618, 618, 619, 620, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 333, 0, 0, 0, 621, 45, 45, 45, 45, - 333, 0, 0, 622, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 623, 27, 624, 625, 626, 627, 628, 629, 630, 631, 632, 631, 45, 45, 45, 325, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 0, 0, 253, 0, 0, 0, 0, 0, 0, 267, 228, 333, 333, 333, 0, 583, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 622, 45, 45, 45, 633, 0, - 634, 0, 0, 253, 589, 635, 583, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 636, 349, 349, - 0, 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, 0, 0, 589, 253, 45, - 253, 0, 0, 0, 636, 286, 0, 0, 636, 0, 622, 635, 45, 45, 45, 45, - 0, 0, 0, 0, 0, 0, 0, 637, 0, 0, 0, 0, 638, 0, 0, 0, - 0, 0, 0, 0, 0, 267, 622, 639, 234, 0, 589, 234, 248, 234, 45, 45, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, 0, 0, 235, 45, 45, 286, - 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 319, 45, 45, - 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, - 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, - 249, 249, 249, 640, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, - 249, 319, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, - 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, - 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 566, 249, 249, 249, 249, 249, - 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, - 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, - 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 641, 45, - 249, 319, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, - 249, 249, 249, 249, 642, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 643, 45, 0, 0, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, + 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, + 546, 546, 546, 546, 546, 546, 546, 546, 546, 547, 125, 125, 125, 125, 125, 125, + 546, 546, 546, 546, 546, 546, 548, 549, 546, 546, 546, 546, 546, 546, 546, 546, + 546, 546, 546, 546, 550, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 551, 551, 551, 551, 551, 551, 552, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 554, 555, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, + 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, + 556, 556, 556, 556, 557, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, + 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, + 276, 276, 276, 558, 559, 560, 561, 562, 562, 562, 562, 563, 564, 565, 566, 567, + 568, 568, 568, 568, 569, 570, 571, 572, 568, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 573, 573, 573, 573, 573, 574, 125, 125, 125, 125, 125, 125, + 575, 575, 575, 575, 576, 575, 575, 575, 577, 575, 125, 125, 125, 125, 578, 579, + 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, + 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, + 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, + 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 581, + 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 583, 125, 125, + 584, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 585, + 586, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, + 257, 257, 587, 125, 125, 588, 589, 590, 590, 590, 590, 590, 590, 590, 590, 590, + 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 591, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 592, 592, 592, 592, 592, 592, 593, 594, 595, 596, 266, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 8, 8, 597, 8, 598, 0, 0, 0, 0, 0, 0, 0, 266, 125, 125, 125, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 599, + 0, 0, 600, 0, 0, 0, 601, 602, 603, 0, 604, 0, 0, 0, 235, 125, + 11, 11, 11, 11, 605, 125, 125, 125, 125, 125, 125, 125, 125, 125, 0, 266, + 0, 0, 0, 0, 0, 234, 0, 606, 125, 125, 125, 125, 125, 125, 125, 125, + 0, 0, 0, 0, 0, 224, 0, 0, 0, 607, 608, 609, 610, 0, 0, 0, + 611, 612, 0, 613, 614, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 617, 0, 0, 0, + 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, + 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, + 618, 618, 618, 618, 618, 618, 618, 618, 619, 620, 621, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 4, 622, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 623, 624, 625, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 626, 626, 627, 628, 629, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 630, 631, 125, 632, 632, 632, 633, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 634, 635, + 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 637, 638, 125, 125, + 639, 639, 639, 639, 640, 641, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 334, 0, 0, 0, 642, 125, 125, 125, 125, + 334, 0, 0, 247, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 643, 27, 644, 645, 646, 647, 648, 649, 650, 651, 652, 651, 125, 125, 125, 653, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 0, 0, 252, 0, 0, 0, 0, 0, 0, 266, 226, 334, 334, 334, 0, 599, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 125, 125, 125, 654, 0, + 655, 0, 0, 252, 606, 656, 599, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 657, 350, 350, + 0, 0, 0, 0, 0, 0, 0, 266, 0, 0, 0, 0, 0, 606, 252, 228, + 252, 0, 0, 0, 658, 285, 0, 0, 658, 0, 247, 656, 125, 125, 125, 125, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 266, 247, 659, 234, 0, 350, 235, 599, 285, 658, 234, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, 0, 0, 235, 125, 125, 285, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 125, 125, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 660, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 318, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 579, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 661, 125, + 248, 318, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 662, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 663, 125, 0, 0, 0, 0, 0, 0, 125, 125, 125, 125, 125, 125, 125, 125, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3836,7 +3894,7 @@ _hb_ucd_gc (unsigned u) static inline uint_fast8_t _hb_ucd_ccc (unsigned u) { - return u<125259u?_hb_ucd_u8[15060+(((_hb_ucd_u8[13636+(((_hb_ucd_u8[12656+(u>>3>>4)])<<4)+((u>>3)&15u))])<<3)+((u)&7u))]:0; + return u<125259u?_hb_ucd_u8[15332+(((_hb_ucd_u8[13892+(((_hb_ucd_u8[12912+(u>>3>>4)])<<4)+((u>>3)&15u))])<<3)+((u)&7u))]:0; } static inline unsigned _hb_ucd_b4 (const uint8_t* a, unsigned i) @@ -3846,59 +3904,59 @@ _hb_ucd_b4 (const uint8_t* a, unsigned i) static inline int_fast16_t _hb_ucd_bmg (unsigned u) { - return u<65380u?_hb_ucd_i16[((_hb_ucd_u8[16372+(((_hb_ucd_b4(16244+_hb_ucd_u8,u>>2>>6))<<6)+((u>>2)&63u))])<<2)+((u)&3u)]:0; + return u<65380u?_hb_ucd_i16[((_hb_ucd_u8[16692+(((_hb_ucd_b4(16564+_hb_ucd_u8,u>>2>>6))<<6)+((u>>2)&63u))])<<2)+((u)&3u)]:0; } static inline uint_fast8_t _hb_ucd_sc (unsigned u) { - return u<918000u?_hb_ucd_u8[19126+(((_hb_ucd_u16[3040+(((_hb_ucd_u8[17332+(u>>4>>5)])<<5)+((u>>4)&31u))])<<4)+((u)&15u))]:2; + return u<918000u?_hb_ucd_u8[19446+(((_hb_ucd_u16[3168+(((_hb_ucd_u8[17652+(u>>4>>5)])<<5)+((u>>4)&31u))])<<4)+((u)&15u))]:2; } static inline uint_fast16_t _hb_ucd_dm (unsigned u) { - return u<195102u?_hb_ucd_u16[6144+(((_hb_ucd_u8[29430+(u>>6)])<<6)+((u)&63u))]:0; + return u<195102u?_hb_ucd_u16[6400+(((_hb_ucd_u8[30070+(u>>6)])<<6)+((u)&63u))]:0; } #elif !defined(HB_NO_UCD_UNASSIGNED) static const uint8_t -_hb_ucd_u8[17508] = +_hb_ucd_u8[17936] = { 0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 9, 10, 11, 7, 7, 7, 7, 12, 13, 14, 14, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 21, 23, 21, 21, 21, 21, 24, 7, 7, - 25, 26, 21, 21, 21, 21, 27, 28, 21, 21, 29, 30, 31, 32, 33, 34, + 7, 7, 7, 7, 9, 10, 7, 7, 7, 7, 11, 12, 13, 13, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 22, 22, 22, 22, 24, 7, 7, + 25, 26, 22, 22, 22, 27, 28, 29, 22, 30, 31, 32, 33, 34, 35, 36, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 35, 7, 36, 37, 7, 38, 7, 7, 7, 39, 21, 40, - 7, 7, 41, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 42, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 43, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 44, + 7, 7, 7, 7, 37, 7, 38, 39, 7, 40, 7, 7, 7, 41, 22, 42, + 7, 7, 43, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 44, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 45, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 46, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 34, 35, 36, 37, 38, 39, 34, 34, 34, 40, 41, 42, 43, @@ -3908,42 +3966,44 @@ _hb_ucd_u8[17508] = 84, 85, 86, 87, 88, 89, 69, 69, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 90, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 91, - 92, 34, 34, 34, 34, 34, 34, 34, 34, 93, 34, 34, 94, 95, 96, 97, - 98, 99,100,101,102,103,104,105, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,106, + 91, 34, 34, 34, 34, 34, 34, 34, 34, 92, 34, 34, 93, 94, 95, 96, + 97, 98, 99,100,101,102,103,104, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,105, + 106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106, 107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107, - 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108, - 108,108, 34, 34,109,110,111,112, 34, 34,113,114,115,116,117,118, - 119,120,121,122,123,124,125,126,127,128,129,123, 34, 34,130,123, - 131,132,133,134,135,136,137,138,139,140,141,123,142,143,144,145, - 146,147,148,149,150,151,152,123,153,154,123,155,156,157,158,123, - 159,160,161,162,163,164,123,123,165,166,167,168,123,169,123,170, - 34, 34, 34, 34, 34, 34, 34,171,172, 34,173,123,123,123,123,123, - 123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123, - 34, 34, 34, 34, 34, 34, 34, 34,174,123,123,123,123,123,123,123, - 123,123,123,123,123,123,123,123, 34, 34, 34, 34,175,123,123,123, - 34, 34, 34, 34,176,177,178,179,123,123,123,123,180,181,182,183, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,184, - 34, 34, 34, 34, 34, 34, 34, 34, 34,185,186,123,123,123,123,123, - 34, 34,187, 34, 34,188,123,123,123,123,123,123,123,123,123,123, - 123,123,123,123,123,123,123,123,189,190,123,123,123,123,123,123, - 69,191,192,193,194,195,196,123,197,198,199,200,201,202,203,204, - 69, 69, 69, 69,205,206,123,123,123,123,123,123,123,123,123,123, - 207,123,208,123,123,209,123,123,123,123,123,123,123,123,123,123, - 34,210,211,123,123,123,123,123,212,213,214,123,215,216,123,123, - 217,218,219,220,221,123, 69,222, 69, 69, 69, 69, 69,223,224,225, - 226,227,228,229,230,231, 69,232,123,123,123,123,123,123,123,123, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,233, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,234, 34, - 235, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,236, 34, 34, - 34, 34, 34, 34, 34, 34, 34,237,123,123,123,123,123,123,123,123, - 34, 34, 34, 34,238,123,123,123,123,123,123,123,123,123,123,123, - 34, 34, 34, 34, 34, 34,239,123,123,123,123,123,123,123,123,123, - 240,123,241,242,123,123,123,123,123,123,123,123,123,123,123,123, - 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,243, - 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,244, + 107,107, 34, 34,108,109,110,111, 34, 34,112,113,114,115,116,117, + 118,119,120,121,122,123,124,125,126,127,128,129, 34, 34,130,131, + 132,133,134,135,136,137,138,139,140,141,142,122,143,144,145,146, + 147,148,149,150,151,152,153,122,154,155,122,156,157,158,159,122, + 160,161,162,163,164,165,122,122,166,167,168,169,122,170,122,171, + 34, 34, 34, 34, 34, 34, 34,172,173, 34,174,122,122,122,122,122, + 122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,175, + 34, 34, 34, 34, 34, 34, 34, 34,176,122,122,122,122,122,122,122, + 122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122, + 122,122,122,122,122,122,122,122, 34, 34, 34, 34,177,122,122,122, + 34, 34, 34, 34,178,179,180,181,122,122,122,122,182,183,184,185, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,186, + 34, 34, 34, 34, 34, 34, 34, 34, 34,187,188,122,122,122,122,122, + 122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,189, + 34, 34,190, 34, 34,191,122,122,122,122,122,122,122,122,122,122, + 122,122,122,122,122,122,122,122,192,193,122,122,122,122,122,122, + 122,122,122,122,122,122,122,122,122,122,122,122,122,122,194,195, + 69,196,197,198,199,200,201,122,202,203,204,205,206,207,208,209, + 69, 69, 69, 69,210,211,122,122,122,122,122,122,122,122,212,122, + 213,122,214,122,122,215,122,122,122,122,122,122,122,122,122,216, + 34,217,218,122,122,122,122,122,219,220,221,122,222,223,122,122, + 224,225,226,227,228,122, 69,229, 69, 69, 69, 69, 69,230,231,232, + 233,234, 69, 69,235,236, 69,237,122,122,122,122,122,122,122,122, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,238, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,239, 34, + 240, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,241, 34, 34, + 34, 34, 34, 34, 34, 34, 34,242,122,122,122,122,122,122,122,122, + 34, 34, 34, 34,243,122,122,122,122,122,122,122,122,122,122,122, + 34, 34, 34, 34, 34, 34,244,122,122,122,122,122,122,122,122,122, + 245,122,246,247,122,122,122,122,122,122,122,122,122,122,122,122, + 107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,248, + 107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,249, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 2, 4, 5, 6, 2, 7, 7, 7, 7, 7, 2, 8, 9, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 13, 14, 15, 16, 16, 16, 16, 16, 16, 16, @@ -3980,298 +4040,306 @@ _hb_ucd_u8[17508] = 43, 43, 40, 21, 2, 81, 57, 20, 36, 36, 36, 43, 43, 75, 43, 43, 43, 43, 75, 43, 75, 43, 43, 44, 2, 2, 2, 2, 2, 2, 2, 64, 36, 36, 36, 36, 70, 43, 44, 64, 36, 36, 36, 36, 36, 61, 44, 44, - 44, 44, 44, 44, 44, 44, 44, 44, 36, 36, 61, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 44, 44, 44, 44, 44, 57, 43, 43, 43, 43, 43, 43, - 43, 82, 43, 43, 43, 43, 43, 43, 43, 83, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 83, 71, 84, 85, 43, 43, 43, 83, 84, 85, 84, - 70, 43, 43, 43, 36, 36, 36, 36, 36, 43, 2, 7, 7, 7, 7, 7, - 86, 36, 36, 36, 36, 36, 36, 36, 70, 84, 62, 36, 36, 36, 61, 62, - 61, 62, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 61, 36, 36, 36, - 61, 61, 44, 36, 36, 44, 71, 84, 85, 43, 80, 87, 88, 87, 85, 61, - 44, 44, 44, 87, 44, 44, 36, 62, 36, 43, 44, 7, 7, 7, 7, 7, - 36, 20, 27, 27, 27, 56, 63, 80, 57, 83, 62, 36, 36, 61, 44, 62, - 61, 36, 62, 61, 36, 44, 80, 84, 85, 80, 44, 57, 80, 57, 43, 44, - 57, 44, 44, 44, 62, 36, 61, 61, 44, 44, 44, 7, 7, 7, 7, 7, - 43, 36, 70, 64, 44, 44, 44, 44, 57, 83, 62, 36, 36, 36, 36, 62, - 36, 62, 36, 36, 36, 36, 36, 36, 61, 36, 62, 36, 36, 44, 71, 84, - 85, 43, 43, 57, 83, 87, 85, 44, 61, 44, 44, 44, 44, 44, 44, 44, - 66, 44, 44, 44, 62, 43, 43, 43, 57, 84, 62, 36, 36, 36, 61, 62, - 61, 36, 62, 36, 36, 44, 71, 85, 85, 43, 80, 87, 88, 87, 85, 44, - 44, 44, 57, 83, 44, 44, 36, 62, 78, 27, 27, 27, 44, 44, 44, 44, - 44, 71, 62, 36, 36, 61, 44, 36, 61, 36, 36, 44, 62, 61, 61, 36, - 44, 62, 61, 44, 36, 61, 44, 36, 36, 36, 36, 36, 36, 44, 44, 84, - 83, 88, 44, 84, 88, 84, 85, 44, 61, 44, 44, 87, 44, 44, 44, 44, - 27, 89, 67, 67, 56, 90, 44, 44, 83, 84, 71, 36, 36, 36, 61, 36, - 61, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 44, 62, 43, - 83, 84, 88, 43, 80, 43, 43, 44, 44, 44, 57, 80, 36, 61, 44, 44, - 44, 44, 44, 91, 27, 27, 27, 89, 70, 84, 72, 36, 36, 36, 61, 36, - 36, 36, 62, 36, 36, 44, 71, 85, 84, 84, 88, 83, 88, 84, 43, 44, - 44, 44, 87, 88, 44, 44, 44, 61, 62, 61, 44, 44, 44, 44, 44, 44, - 43, 84, 36, 36, 36, 36, 61, 36, 36, 36, 36, 36, 36, 70, 71, 84, - 85, 43, 80, 84, 88, 84, 85, 77, 44, 44, 36, 92, 27, 27, 27, 93, - 27, 27, 27, 27, 89, 36, 36, 36, 57, 84, 62, 36, 36, 36, 36, 36, - 36, 36, 36, 61, 44, 36, 36, 36, 36, 62, 36, 36, 36, 36, 62, 44, - 36, 36, 36, 61, 44, 80, 44, 87, 84, 43, 80, 80, 84, 84, 84, 84, - 44, 84, 64, 44, 44, 44, 44, 44, 62, 36, 36, 36, 36, 36, 36, 36, - 70, 36, 43, 43, 43, 80, 44, 94, 36, 36, 36, 75, 43, 43, 43, 60, - 7, 7, 7, 7, 7, 2, 44, 44, 62, 61, 61, 36, 36, 61, 36, 36, + 36, 36, 36, 36, 82, 36, 36, 61, 65, 44, 44, 44, 43, 43, 43, 43, + 36, 36, 36, 36, 83, 43, 43, 43, 43, 84, 43, 43, 43, 43, 43, 43, + 43, 85, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 85, 71, 86, + 87, 43, 43, 43, 85, 86, 87, 86, 70, 43, 43, 43, 36, 36, 36, 36, + 36, 43, 2, 7, 7, 7, 7, 7, 88, 36, 36, 36, 36, 36, 36, 36, + 70, 86, 62, 36, 36, 36, 61, 62, 61, 62, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 61, 36, 36, 36, 61, 61, 44, 36, 36, 44, 71, 86, + 87, 43, 80, 89, 90, 89, 87, 61, 44, 44, 44, 89, 44, 44, 36, 62, + 36, 43, 44, 7, 7, 7, 7, 7, 36, 20, 27, 27, 27, 56, 63, 80, + 57, 85, 62, 36, 36, 61, 44, 62, 61, 36, 62, 61, 36, 44, 80, 86, + 87, 80, 44, 57, 80, 57, 43, 44, 57, 44, 44, 44, 62, 36, 61, 61, + 44, 44, 44, 7, 7, 7, 7, 7, 43, 36, 70, 64, 44, 44, 44, 44, + 57, 85, 62, 36, 36, 36, 36, 62, 36, 62, 36, 36, 36, 36, 36, 36, + 61, 36, 62, 36, 36, 44, 71, 86, 87, 43, 43, 57, 85, 89, 87, 44, + 61, 44, 44, 44, 44, 44, 44, 44, 66, 44, 44, 44, 62, 43, 43, 43, + 57, 86, 62, 36, 36, 36, 61, 62, 61, 36, 62, 36, 36, 44, 71, 87, + 87, 43, 80, 89, 90, 89, 87, 44, 44, 44, 57, 85, 44, 44, 36, 62, + 78, 27, 27, 27, 44, 44, 44, 44, 44, 71, 62, 36, 36, 61, 44, 36, + 61, 36, 36, 44, 62, 61, 61, 36, 44, 62, 61, 44, 36, 61, 44, 36, + 36, 36, 36, 36, 36, 44, 44, 86, 85, 90, 44, 86, 90, 86, 87, 44, + 61, 44, 44, 89, 44, 44, 44, 44, 27, 91, 67, 67, 56, 92, 44, 44, + 85, 86, 71, 36, 36, 36, 61, 36, 61, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 44, 71, 43, 85, 86, 90, 43, 80, 43, 43, 44, + 44, 44, 57, 80, 36, 61, 62, 44, 44, 44, 44, 93, 27, 27, 27, 91, + 70, 86, 72, 36, 36, 36, 61, 36, 36, 36, 62, 36, 36, 44, 71, 87, + 86, 86, 90, 85, 90, 86, 43, 44, 44, 44, 89, 90, 44, 44, 62, 61, + 62, 61, 44, 44, 44, 44, 44, 44, 43, 86, 36, 36, 36, 36, 61, 36, + 36, 36, 36, 36, 36, 70, 71, 86, 87, 43, 80, 86, 90, 86, 87, 77, + 44, 44, 36, 94, 27, 27, 27, 95, 27, 27, 27, 27, 91, 36, 36, 36, + 57, 86, 62, 36, 36, 36, 36, 36, 36, 36, 36, 61, 44, 36, 36, 36, + 36, 62, 36, 36, 36, 36, 62, 44, 36, 36, 36, 61, 44, 80, 44, 89, + 86, 43, 80, 80, 86, 86, 86, 86, 44, 86, 64, 44, 44, 44, 44, 44, + 62, 36, 36, 36, 36, 36, 36, 36, 70, 36, 43, 43, 43, 80, 44, 96, + 36, 36, 36, 75, 43, 43, 43, 60, 7, 7, 7, 7, 7, 2, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, 62, 61, 61, 36, 36, 61, 36, 36, 36, 36, 62, 62, 36, 36, 36, 36, 70, 36, 43, 43, 43, 43, 71, 44, 36, 36, 61, 81, 43, 43, 43, 44, 7, 7, 7, 7, 7, 44, 36, 36, - 77, 67, 2, 2, 2, 2, 2, 2, 2, 95, 95, 67, 43, 67, 67, 67, - 7, 7, 7, 7, 7, 27, 27, 27, 27, 27, 50, 50, 50, 4, 4, 84, + 77, 67, 2, 2, 2, 2, 2, 2, 2, 97, 97, 67, 43, 67, 67, 67, + 7, 7, 7, 7, 7, 27, 27, 27, 27, 27, 50, 50, 50, 4, 4, 86, 36, 36, 36, 36, 62, 36, 36, 36, 36, 36, 36, 36, 36, 36, 61, 44, - 57, 43, 43, 43, 43, 43, 43, 83, 43, 43, 60, 43, 36, 36, 70, 43, + 57, 43, 43, 43, 43, 43, 43, 85, 43, 43, 60, 43, 36, 36, 70, 43, 43, 43, 43, 43, 57, 43, 43, 43, 43, 43, 43, 43, 43, 43, 80, 67, - 67, 67, 67, 76, 67, 67, 90, 67, 2, 2, 95, 67, 21, 64, 44, 44, - 36, 36, 36, 36, 36, 92, 85, 43, 83, 43, 43, 43, 85, 83, 85, 71, - 7, 7, 7, 7, 7, 2, 2, 2, 36, 36, 36, 84, 43, 36, 36, 43, - 71, 84, 96, 92, 84, 84, 84, 36, 70, 43, 71, 36, 36, 36, 36, 36, - 36, 83, 85, 83, 84, 84, 85, 92, 7, 7, 7, 7, 7, 84, 85, 67, + 67, 67, 67, 76, 67, 67, 92, 67, 2, 2, 97, 67, 21, 64, 44, 44, + 36, 36, 36, 36, 36, 94, 87, 43, 85, 43, 43, 43, 87, 85, 87, 71, + 7, 7, 7, 7, 7, 2, 2, 2, 36, 36, 36, 86, 43, 36, 36, 43, + 71, 86, 98, 94, 86, 86, 86, 36, 70, 43, 71, 36, 36, 36, 36, 36, + 36, 85, 87, 85, 86, 86, 87, 94, 7, 7, 7, 7, 7, 86, 87, 67, 11, 11, 11, 48, 44, 44, 48, 44, 16, 16, 16, 16, 16, 53, 45, 16, 36, 36, 36, 36, 61, 36, 36, 44, 36, 36, 36, 61, 61, 36, 36, 44, 61, 36, 36, 44, 36, 36, 36, 61, 61, 36, 36, 44, 36, 36, 36, 36, 36, 36, 36, 61, 36, 36, 36, 36, 36, 36, 36, 36, 36, 61, 57, 43, - 2, 2, 2, 2, 97, 27, 27, 27, 27, 27, 27, 27, 27, 27, 98, 44, + 2, 2, 2, 2, 99, 27, 27, 27, 27, 27, 27, 27, 27, 27,100, 44, 67, 67, 67, 67, 67, 44, 44, 44, 11, 11, 11, 44, 16, 16, 16, 44, - 99, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 77, 72, - 100, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,101,102, 44, - 36, 36, 36, 36, 36, 63, 2,103,104, 36, 36, 36, 61, 44, 44, 44, - 36, 36, 36, 36, 36, 36, 61, 36, 36, 43, 80, 44, 44, 44, 44, 44, - 36, 43, 60, 64, 44, 44, 44, 44, 36, 43, 44, 44, 44, 44, 44, 44, - 61, 43, 44, 44, 44, 44, 44, 44, 36, 36, 43, 85, 43, 43, 43, 84, - 84, 84, 84, 83, 85, 43, 43, 43, 43, 43, 2, 86, 2, 66, 70, 44, + 101, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 77, 72, + 102, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,103,104, 44, + 36, 36, 36, 36, 36, 63, 2,105,106, 36, 36, 36, 61, 44, 44, 44, + 36, 43, 85, 44, 44, 44, 44, 62, 36, 43,107, 64, 44, 44, 44, 44, + 36, 43, 44, 44, 44, 44, 44, 44, 36, 36, 36, 36, 36, 36, 61, 36, + 61, 43, 44, 44, 44, 44, 44, 44, 36, 36, 43, 87, 43, 43, 43, 86, + 86, 86, 86, 85, 87, 43, 43, 43, 43, 43, 2, 88, 2, 66, 70, 44, 7, 7, 7, 7, 7, 44, 44, 44, 27, 27, 27, 27, 27, 44, 44, 44, - 2, 2, 2,105, 2, 59, 43, 68, 36,106, 36, 36, 36, 36, 36, 36, + 2, 2, 2,108, 2, 59, 43, 84, 36, 83, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 61, 44, 44, 44, 36, 36, 70, 71, 36, 36, 36, 36, 36, 36, 36, 36, 70, 61, 44, 44, 36, 36, 36, 44, 44, 44, 44, 44, - 36, 36, 36, 36, 36, 36, 36, 61, 43, 83, 84, 85, 83, 84, 44, 44, - 84, 83, 84, 84, 85, 43, 44, 44, 90, 44, 2, 7, 7, 7, 7, 7, + 36, 36, 36, 36, 36, 36, 36, 61, 43, 85, 86, 87, 85, 86, 44, 44, + 86, 85, 86, 86, 87, 43, 44, 44, 92, 44, 2, 7, 7, 7, 7, 7, 36, 36, 36, 36, 36, 36, 36, 44, 36, 36, 61, 44, 44, 44, 44, 44, 36, 36, 36, 36, 36, 36, 44, 44, 36, 36, 36, 36, 36, 44, 44, 44, - 7, 7, 7, 7, 7, 98, 44, 67, 67, 67, 67, 67, 67, 67, 67, 67, - 36, 36, 36, 70, 83, 85, 44, 2, 36, 36, 92, 83, 43, 43, 43, 80, - 83, 83, 85, 43, 43, 43, 83, 84, 84, 85, 43, 43, 43, 43, 80, 57, - 2, 2, 2, 86, 2, 2, 2, 44, 43, 43, 43, 43, 43, 43, 43,107, - 80, 44, 44, 44, 44, 44, 44, 44, 43, 43, 96, 36, 36, 36, 36, 36, - 36, 36, 83, 43, 43, 83, 83, 84, 84, 83, 96, 36, 36, 36, 44, 44, - 95, 67, 67, 67, 67, 50, 43, 43, 43, 43, 67, 67, 67, 67, 90, 44, - 43, 96, 36, 36, 36, 36, 36, 36, 92, 43, 43, 84, 43, 85, 43, 36, - 36, 36, 36, 83, 43, 84, 85, 85, 43, 84, 44, 44, 44, 44, 2, 2, - 36, 36, 84, 84, 84, 84, 43, 43, 43, 43, 84, 43, 44, 91, 2, 2, + 7, 7, 7, 7, 7,100, 44, 67, 67, 67, 67, 67, 67, 67, 67, 67, + 36, 36, 36, 70, 85, 87, 44, 2, 36, 36, 94, 85, 43, 43, 43, 80, + 85, 85, 87, 43, 43, 43, 85, 86, 86, 87, 43, 43, 43, 43, 80, 57, + 2, 2, 2, 88, 2, 2, 2, 44, 43, 43, 43, 43, 43, 43, 43,109, + 43, 43, 43, 43, 43, 43, 43, 80, 43, 43, 98, 36, 36, 36, 36, 36, + 36, 36, 85, 43, 43, 85, 85, 86, 86, 85, 98, 36, 36, 36, 61, 44, + 97, 67, 67, 67, 67, 50, 43, 43, 43, 43, 67, 67, 67, 67, 21, 64, + 43, 98, 36, 36, 36, 36, 36, 36, 94, 43, 43, 86, 43, 87, 43, 36, + 36, 36, 36, 85, 43, 86, 87, 87, 43, 86, 44, 44, 44, 44, 2, 2, + 36, 36, 86, 86, 86, 86, 43, 43, 43, 43, 86, 43, 44, 93, 2, 2, 7, 7, 7, 7, 7, 44, 62, 36, 36, 36, 36, 36, 40, 40, 40, 2, - 16, 16, 16, 16,108, 44, 44, 44, 11, 11, 11, 11, 11, 47, 48, 11, + 16, 16, 16, 16,110, 44, 44, 44, 11, 11, 11, 11, 11, 47, 48, 11, 2, 2, 2, 2, 44, 44, 44, 44, 43, 60, 43, 43, 43, 43, 43, 43, - 83, 43, 43, 43, 71, 36, 70, 36, 36, 36, 71, 92, 43, 61, 44, 44, + 85, 43, 43, 43, 71, 36, 70, 36, 36, 36, 71, 94, 43, 61, 44, 44, 16, 16, 16, 16, 16, 16, 40, 40, 40, 40, 40, 40, 40, 45, 16, 16, - 16, 16, 16, 16, 45, 16, 16, 16, 16, 16, 16, 16, 16,109, 40, 40, - 43, 43, 43, 43, 43, 57, 43, 43, 32, 32, 32, 16, 16, 16, 16, 32, - 16, 16, 16, 16, 11, 11, 11, 11, 16, 16, 16, 44, 11, 11, 11, 44, - 16, 16, 16, 16, 48, 48, 48, 48, 16, 16, 16, 16, 16, 16, 16, 44, - 16, 16, 16, 16,110,110,110,110, 16, 16,108, 16, 11, 11,111,112, - 41, 16,108, 16, 11, 11,111, 41, 16, 16, 44, 16, 11, 11,113, 41, - 16, 16, 16, 16, 11, 11,114, 41, 44, 16,108, 16, 11, 11,111,115, - 116,116,116,116,116,117, 65, 65,118,118,118, 2,119,120,119,120, - 2, 2, 2, 2,121, 65, 65,122, 2, 2, 2, 2,123,124, 2,125, - 126, 2,127,128, 2, 2, 2, 2, 2, 9,126, 2, 2, 2, 2,129, - 65, 65, 68, 65, 65, 65, 65, 65,130, 44, 27, 27, 27, 8,127,131, - 27, 27, 27, 27, 27, 8,127,102, 40, 40, 40, 40, 40, 40, 81, 44, - 20, 20, 20, 20, 20, 20, 20, 20, 43, 43, 43, 43, 43, 43,132, 51, - 107, 51,107, 43, 43, 43, 43, 43, 67,133, 67,134, 67, 34, 11, 16, - 11, 32,134, 67, 49, 11, 11, 67, 67, 67,133,133,133, 11, 11,135, - 11, 11, 35, 36, 39, 67, 16, 11, 8, 8, 49, 16, 16, 26, 67,136, - 27, 27, 27, 27, 27, 27, 27, 27,103,103,103,103,103,103,103,103, - 103,137,138,103,139, 67, 44, 44, 8, 8,140, 67, 67, 8, 67, 67, - 140, 26, 67,140, 67, 67, 67,140, 67, 67, 67, 67, 67, 67, 67, 8, - 67,140,140, 67, 67, 67, 67, 67, 67, 67, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 67, 67, 67, 67, 4, 4, 67, 67, - 8, 67, 67, 67,141,142, 67, 67, 67, 67, 67, 67, 67, 67,140, 67, - 67, 67, 67, 67, 67, 26, 8, 8, 8, 8, 67, 67, 67, 67, 67, 67, - 67, 67, 67, 67, 67, 67, 8, 8, 8, 67, 67, 67, 67, 67, 67, 67, - 67, 67, 67, 90, 44, 44, 44, 44, 67, 67, 67, 67, 67, 90, 44, 44, - 27, 27, 27, 27, 27, 27, 67, 67, 67, 67, 67, 67, 67, 27, 27, 27, - 67, 67, 67, 26, 67, 67, 67, 67, 26, 67, 67, 67, 67, 67, 67, 67, - 67, 67, 67, 67, 8, 8, 8, 8, 67, 67, 67, 67, 67, 67, 67, 26, - 67, 67, 67, 67, 4, 4, 4, 4, 4, 4, 4, 27, 27, 27, 27, 27, - 27, 27, 67, 67, 67, 67, 67, 67, 8, 8,127,143, 8, 8, 8, 8, - 8, 8, 8, 4, 4, 4, 4, 4, 8,127,144,144,144,144,144,144, - 144,144,144,144,143, 8, 8, 8, 8, 8, 8, 8, 4, 4, 8, 8, - 8, 8, 8, 8, 8, 8, 4, 8, 8, 8,140, 26, 8, 8,140, 67, - 67, 67, 44, 67, 67, 67, 67, 67, 67, 67, 67, 55, 67, 67, 67, 67, - 11, 11, 11, 11, 11, 11, 11, 47, 16, 16, 16, 16, 16, 16, 16,108, - 32, 11, 32, 34, 34, 34, 34, 11, 32, 32, 34, 16, 16, 16, 40, 11, - 32, 32,136, 67, 67,134, 34,145, 43, 32, 44, 44, 91, 2, 97, 2, - 16, 16, 16,146, 44, 44,146, 44, 36, 36, 36, 36, 44, 44, 44, 52, - 64, 44, 44, 44, 44, 44, 44, 57, 36, 36, 36, 61, 44, 44, 44, 44, - 36, 36, 36, 61, 36, 36, 36, 61, 2,119,119, 2,123,124,119, 2, - 2, 2, 2, 6, 2,105,119, 2,119, 4, 4, 4, 4, 2, 2, 86, - 2, 2, 2, 2, 2,118, 2, 2,105,147, 2, 2, 2, 2, 2, 2, - 67, 64, 44, 44, 44, 44, 44, 44, 67, 67, 67, 67, 67, 55, 67, 67, - 67, 67, 44, 44, 44, 44, 44, 44, 67, 67, 67, 44, 44, 44, 44, 44, - 67, 67, 67, 67, 67, 67, 44, 44, 1, 2,148,149, 4, 4, 4, 4, - 4, 67, 4, 4, 4, 4,150,151,152,103,103,103,103, 43, 43, 84, - 153, 40, 40, 67,103,154, 63, 67, 36, 36, 36, 61, 57,155,156, 69, - 36, 36, 36, 36, 36, 63, 40, 69, 44, 44, 62, 36, 36, 36, 36, 36, - 67, 27, 27, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 90, - 27, 27, 27, 27, 27, 67, 67, 67, 67, 67, 67, 67, 27, 27, 27, 27, - 157, 27, 27, 27, 27, 27, 27, 27, 36, 36,106, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36,158, 2, 7, 7, 7, 7, 7, 36, 44, 44, - 32, 32, 32, 32, 32, 32, 32, 70, 51,159, 43, 43, 43, 43, 43, 86, - 32, 32, 32, 32, 32, 32, 40, 43, 36, 36, 36,103,103,103,103,103, - 43, 2, 2, 2, 44, 44, 44, 44, 41, 41, 41,156, 40, 40, 40, 40, - 41, 32, 32, 32, 32, 32, 32, 32, 16, 32, 32, 32, 32, 32, 32, 32, - 45, 16, 16, 16, 34, 34, 34, 32, 32, 32, 32, 32, 42,160, 34, 35, - 32, 32, 16, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 11, 11, 32, - 11, 11, 32, 32, 32, 32, 32, 32, 44, 32, 11, 11, 34,108, 44, 44, - 44, 44, 48, 35, 40, 35, 36, 36, 36, 71, 36, 71, 36, 70, 36, 36, - 36, 92, 85, 83, 67, 67, 80, 44, 27, 27, 27, 67,161, 44, 44, 44, - 36, 36, 2, 2, 44, 44, 44, 44, 84, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 84, 84, 84, 84, 84, 84, 84, 84, 43, 44, 44, 44, 44, 2, + 16, 16, 16, 16, 45, 16, 16, 16, 16, 16, 16, 16, 16,111, 40, 40, + 32, 32, 32, 16, 16, 16, 16, 32, 16, 16, 16, 16, 11, 11, 11, 11, + 16, 16, 16, 44, 11, 11, 11, 44, 16, 16, 16, 16, 48, 48, 48, 48, + 16, 16, 16, 16, 16, 16, 16, 44, 16, 16, 16, 16,112,112,112,112, + 16, 16,110, 16, 11, 11,113,114, 41, 16,110, 16, 11, 11,113, 41, + 16, 16, 44, 16, 11, 11,115, 41, 16, 16, 16, 16, 11, 11,116, 41, + 44, 16,110, 16, 11, 11,113,117,118,118,118,118,118,119, 65, 65, + 120,120,120, 2,121,122,121,122, 2, 2, 2, 2,123, 65, 65,124, + 2, 2, 2, 2,125,126, 2,127,128, 2,129,130, 2, 2, 2, 2, + 2, 9,128, 2, 2, 2, 2,131, 65, 65,132, 65, 65, 65, 65, 65, + 133, 44, 27, 27, 27, 8,129,134, 27, 27, 27, 27, 27, 8,129,104, + 40, 40, 40, 40, 40, 40, 81, 44, 20, 20, 20, 20, 20, 20, 20, 20, + 135, 44, 44, 44, 44, 44, 44, 44, 43, 43, 43, 43, 43, 43,136, 51, + 109, 51,109, 43, 43, 43, 43, 43, 80, 44, 44, 44, 44, 44, 44, 44, + 67,137, 67,138, 67, 34, 11, 16, 11, 32,138, 67, 49, 11, 11, 67, + 67, 67,137,137,137, 11, 11,139, 11, 11, 35, 36, 39, 67, 16, 11, + 8, 8, 49, 16, 16, 26, 67,140, 27, 27, 27, 27, 27, 27, 27, 27, + 105,105,105,105,105,105,105,105,105,141,142,105,143, 67, 44, 44, + 8, 8,144, 67, 67, 8, 67, 67,144, 26, 67,144, 67, 67, 67,144, + 67, 67, 67, 67, 67, 67, 67, 8, 67,144,144, 67, 67, 67, 67, 67, + 67, 67, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 67, 67, 67, 67, 4, 4, 67, 67, 8, 67, 67, 67,145,146, 67, 67, + 67, 67, 67, 67, 67, 67,144, 67, 67, 67, 67, 67, 67, 26, 8, 8, + 8, 8, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 8, 8, + 8, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 92, 44, 44, 44, 44, + 67, 67, 67, 67, 67, 92, 44, 44, 27, 27, 27, 27, 27, 27, 67, 67, + 67, 67, 67, 67, 67, 27, 27, 27, 67, 67, 67, 26, 67, 67, 67, 67, + 26, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 8, 8, 8, 8, + 67, 67, 67, 67, 67, 67, 67, 26, 67, 67, 67, 67, 4, 4, 4, 4, + 4, 4, 4, 27, 27, 27, 27, 27, 27, 27, 67, 67, 67, 67, 67, 67, + 8, 8,129,147, 8, 8, 8, 8, 8, 8, 8, 4, 4, 4, 4, 4, + 8,129,148,148,148,148,148,148,148,148,148,148,147, 8, 8, 8, + 8, 8, 8, 8, 4, 4, 8, 8, 8, 8, 8, 8, 8, 8, 4, 8, + 8, 8,144, 26, 8, 8,144, 67, 67, 67, 44, 67, 67, 67, 67, 67, + 67, 67, 67, 55, 67, 67, 67, 67, 32, 11, 32, 34, 34, 34, 34, 11, + 32, 32, 34, 16, 16, 16, 40, 11, 32, 32,140, 67, 67,138, 34,149, + 43, 32, 44, 44, 93, 2, 99, 2, 16, 16, 16,150, 44, 44,150, 44, + 36, 36, 36, 36, 44, 44, 44, 52, 64, 44, 44, 44, 44, 44, 44, 57, + 36, 36, 36, 61, 44, 44, 44, 44, 36, 36, 36, 61, 36, 36, 36, 61, + 2,121,121, 2,125,126,121, 2, 2, 2, 2, 6, 2,108,121, 2, + 121, 4, 4, 4, 4, 2, 2, 88, 2, 2, 2, 2, 2,120, 2, 2, + 108,151, 2, 2, 2, 2, 2, 2, 67, 2,152,148,148,148,153, 44, + 67, 67, 67, 67, 67, 55, 67, 67, 67, 67, 44, 44, 44, 44, 44, 44, + 67, 67, 67, 44, 44, 44, 44, 44, 67, 67, 67, 67, 67, 67, 44, 44, + 1, 2,154,155, 4, 4, 4, 4, 4, 67, 4, 4, 4, 4,156,157, + 158,105,105,105,105, 43, 43, 86,159, 40, 40, 67,105,160, 63, 67, + 36, 36, 36, 61, 57,161,162, 69, 36, 36, 36, 36, 36, 63, 40, 69, + 44, 44, 62, 36, 36, 36, 36, 36, 67, 27, 27, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 92, 27, 27, 27, 27, 27, 67, 67, 67, + 67, 67, 67, 67, 27, 27, 27, 27,163, 27, 27, 27, 27, 27, 27, 27, + 36, 36, 83, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,164, 2, + 7, 7, 7, 7, 7, 36, 44, 44, 32, 32, 32, 32, 32, 32, 32, 70, + 51,165, 43, 43, 43, 43, 43, 88, 32, 32, 32, 32, 32, 32, 40, 43, + 36, 36, 36,105,105,105,105,105, 43, 2, 2, 2, 44, 44, 44, 44, + 41, 41, 41,162, 40, 40, 40, 40, 41, 32, 32, 32, 32, 32, 32, 32, + 16, 32, 32, 32, 32, 32, 32, 32, 45, 16, 16, 16, 34, 34, 34, 32, + 32, 32, 32, 32, 42,166, 34, 35, 32, 32, 16, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 11, 11, 32, 11, 11, 32, 32, 32, 32, 32, 32, + 32, 32, 11, 11, 34,110, 44, 44, 32,150,150, 32, 32, 44, 44, 44, + 44, 40,167, 35, 40, 35, 36, 36, 36, 71, 36, 71, 36, 70, 36, 36, + 36, 94, 87, 85, 67, 67, 80, 44, 27, 27, 27, 67,168, 44, 44, 44, + 36, 36, 2, 2, 44, 44, 44, 44, 86, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 86, 86, 86, 86, 86, 86, 86, 86, 43, 44, 44, 44, 44, 2, 43, 36, 36, 36, 2, 72, 72, 70, 36, 36, 36, 43, 43, 43, 43, 2, - 36, 36, 36, 70, 43, 43, 43, 43, 43, 84, 44, 44, 44, 44, 44, 91, - 36, 70, 84, 43, 43, 84, 43, 84,162, 2, 2, 2, 2, 2, 2, 52, + 36, 36, 36, 70, 43, 43, 43, 43, 43, 86, 44, 44, 44, 44, 44, 93, + 36, 70, 86, 43, 43, 86, 43, 86,107, 2, 2, 2, 2, 2, 2, 52, 7, 7, 7, 7, 7, 44, 44, 2, 36, 36, 70, 69, 36, 36, 36, 36, - 7, 7, 7, 7, 7, 36, 36, 61, 36, 36, 36, 36, 70, 43, 43, 83, - 85, 83, 85, 80, 44, 44, 44, 44, 36, 70, 36, 36, 36, 36, 83, 44, - 7, 7, 7, 7, 7, 44, 2, 2, 69, 36, 36, 77, 67, 92, 83, 36, + 7, 7, 7, 7, 7, 36, 36, 61, 36, 36, 36, 36, 70, 43, 43, 85, + 87, 85, 87, 80, 44, 44, 44, 44, 36, 70, 36, 36, 36, 36, 85, 44, + 7, 7, 7, 7, 7, 44, 2, 2, 69, 36, 36, 77, 67, 94, 85, 36, 71, 43, 71, 70, 71, 36, 36, 43, 70, 61, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 44, 44, 62,106, 2, 36, 36, 36, 36, 36, 92, 43, 84, - 2,106,163, 80, 44, 44, 44, 44, 62, 36, 36, 61, 62, 36, 36, 61, - 62, 36, 36, 61, 44, 44, 44, 44, 16, 16, 16, 16, 16,112, 40, 40, - 16, 16, 16, 16,109, 41, 44, 44, 36, 92, 85, 84, 83,162, 85, 44, + 44, 44, 44, 44, 44, 62, 83, 2, 36, 36, 36, 36, 36, 94, 43, 86, + 2, 83,169, 80, 44, 44, 44, 44, 62, 36, 36, 61, 62, 36, 36, 61, + 62, 36, 36, 61, 44, 44, 44, 44, 16, 16, 16, 16, 16,114, 40, 40, + 16, 16, 16, 16,111, 41, 44, 44, 36, 94, 87, 86, 85,107, 87, 44, 36, 36, 44, 44, 44, 44, 44, 44, 36, 36, 36, 61, 44, 62, 36, 36, - 164,164,164,164,164,164,164,164,165,165,165,165,165,165,165,165, - 16, 16, 16,108, 44, 44, 44, 44, 44,146, 16, 16, 44, 44, 62, 71, - 36, 36, 36, 36,166, 36, 36, 36, 36, 36, 36, 61, 36, 36, 61, 61, + 170,170,170,170,170,170,170,170,171,171,171,171,171,171,171,171, + 16, 16, 16,110, 44, 44, 44, 44, 44,150, 16, 16, 44, 44, 62, 71, + 36, 36, 36, 36,172, 36, 36, 36, 36, 36, 36, 61, 36, 36, 61, 61, 36, 62, 61, 36, 36, 36, 36, 36, 36, 41, 41, 41, 41, 41, 41, 41, - 41, 44, 44, 44, 44, 44, 44, 44, 44, 62, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36,144, 44, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36,161, 44, 2, 2, 2,167,128, 44, 44, 44, - 6,168,169,144,144,144,144,144,144,144,128,167,128, 2,125,170, - 2, 64, 2, 2,150,144,144,128, 2,171, 8,172, 66, 2, 44, 44, - 36, 36, 36, 36, 36, 36, 61, 79, 91, 2, 3, 2, 4, 5, 6, 2, - 16, 16, 16, 16, 16, 17, 18,127,128, 4, 2, 36, 36, 36, 36, 36, + 41,117, 44, 44, 44, 44, 44, 44, 44, 62, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36,148, 44, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 44, 44, 44, 55, 36, 36, 36, 36, 36, 36,168, 67, + 2, 2, 2,152,130, 44, 44, 44, 6,173,174,148,148,148,148,148, + 148,148,130,152,130, 2,127,175, 2, 64, 2, 2,156,148,148,130, + 2,176, 8,177, 66, 2, 44, 44, 36, 36, 61, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 61, 79, 93, 2, 3, 2, 4, 5, 6, 2, + 16, 16, 16, 16, 16, 17, 18,129,130, 4, 2, 36, 36, 36, 36, 36, 69, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 40, 44, 36, 36, 36, 44, 36, 36, 36, 44, 36, 36, 36, 44, 36, 61, 44, - 20,173, 56,174, 26, 8,140, 90, 44, 44, 44, 44, 79, 65, 67, 44, + 20,178, 56,135, 26, 8,144, 92, 44, 44, 44, 44, 79, 65, 67, 44, 36, 36, 36, 36, 36, 36, 62, 36, 36, 36, 36, 36, 36, 61, 36, 62, - 2, 64, 44,175, 27, 27, 27, 27, 27, 27, 44, 55, 67, 67, 67, 67, - 103,103,139, 27, 89, 67, 67, 67, 67, 67, 67, 67, 67, 27, 67, 90, - 67, 67, 67, 67, 67, 67, 90, 44, 90, 44, 44, 44, 44, 44, 44, 44, - 67, 67, 67, 67, 67, 67, 50, 44,176, 27, 27, 27, 27, 27, 27, 27, + 2, 64, 44,179, 27, 27, 27, 27, 27, 27, 44, 55, 67, 67, 67, 67, + 105,105,143, 27, 91, 67, 67, 67, 67, 67, 67, 67, 67, 27, 67, 92, + 67, 67, 67, 67, 67, 67, 92, 44, 92, 44, 44, 44, 44, 44, 44, 44, + 67, 67, 67, 67, 67, 67, 50, 44,180, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 44, 44, 27, 27, 44, 44, 44, 44, 62, 36, - 149, 36, 36, 36, 36,177, 44, 44, 36, 36, 36, 43, 43, 80, 44, 44, - 36, 36, 36, 36, 36, 36, 36, 91, 36, 36, 44, 44, 36, 36, 36, 36, - 178,103,103, 44, 44, 44, 44, 44, 11, 11, 11, 11, 16, 16, 16, 16, + 155, 36, 36, 36, 36,181, 44, 44, 36, 36, 36, 43, 43, 80, 44, 44, + 36, 36, 36, 36, 36, 36, 36, 93, 36, 36, 44, 44, 36, 36, 36, 36, + 182,105,105, 44, 44, 44, 44, 44, 11, 11, 11, 11, 16, 16, 16, 16, 11, 11, 44, 44, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 44, 44, - 36, 36, 44, 44, 44, 44, 44, 91, 36, 36, 36, 44, 61, 36, 36, 36, - 36, 36, 36, 62, 61, 44, 61, 62, 36, 36, 36, 91, 27, 27, 27, 27, - 36, 36, 36, 77,157, 27, 27, 27, 44, 44, 44,175, 27, 27, 27, 27, - 36, 61, 36, 44, 44,175, 27, 27, 36, 36, 36, 27, 27, 27, 44, 91, - 36, 36, 36, 36, 36, 44, 44, 91, 36, 36, 36, 36, 44, 44, 27, 36, - 44, 27, 27, 27, 27, 27, 27, 27, 70, 43, 57, 80, 44, 44, 43, 43, - 36, 36, 62, 36, 62, 36, 36, 36, 36, 36, 36, 44, 43, 80, 44, 57, - 27, 27, 27, 27, 98, 44, 44, 44, 2, 2, 2, 2, 64, 44, 44, 44, - 36, 36, 36, 36, 36, 36,179, 30, 36, 36, 36, 36, 36, 36,179, 27, - 36, 36, 36, 36, 78, 36, 36, 36, 36, 36, 70, 80, 44,175, 27, 27, - 2, 2, 2, 64, 44, 44, 44, 44, 36, 36, 36, 44, 91, 2, 2, 2, - 36, 36, 36, 44, 27, 27, 27, 27, 36, 61, 44, 44, 27, 27, 27, 27, - 36, 44, 44, 44, 91, 2, 64, 44, 44, 44, 44, 44,175, 27, 27, 27, - 11, 47, 44, 44, 44, 44, 44, 44, 16,108, 44, 44, 44, 27, 27, 27, - 36, 36, 43, 43, 44, 44, 44, 44, 27, 27, 27, 27, 27, 27, 27, 98, - 36, 36, 36, 36, 36, 57,180, 44, 36, 44, 44, 44, 44, 44, 44, 44, - 27, 27, 27, 93, 44, 44, 44, 44,176, 27, 30, 2, 2, 44, 44, 44, - 36, 36,179, 27, 27, 27, 44, 44, 85, 96, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 44, 44, 44, 44, 36, 36, 44, 44, 44, 44, 44, 93, + 11, 11, 11, 11, 11, 47, 11, 11, 11, 47, 11,150, 16, 16, 16, 16, + 16,150, 16, 16, 16, 16, 16, 16, 16,150, 16, 16, 16,150,110, 44, + 40, 40, 40, 52, 40, 40, 40, 40, 81, 40, 40, 40, 40, 81, 44, 44, + 36, 36, 36, 44, 61, 36, 36, 36, 36, 36, 36, 62, 61, 44, 61, 62, + 36, 36, 36, 93, 27, 27, 27, 27, 36, 36, 36, 77,163, 27, 27, 27, + 44, 44, 44,179, 27, 27, 27, 27, 36, 61, 36, 44, 44,179, 27, 27, + 36, 36, 36, 27, 27, 27, 44, 93, 36, 36, 36, 36, 36, 44, 44, 93, + 36, 36, 36, 36, 44, 44, 27, 36, 44, 27, 27, 27, 27, 27, 27, 27, + 70, 43, 57, 80, 44, 44, 43, 43, 36, 36, 62, 36, 62, 36, 36, 36, + 36, 36, 36, 44, 43, 80, 44, 57, 27, 27, 27, 27,100, 44, 44, 44, + 2, 2, 2, 2, 64, 44, 44, 44, 36, 36, 36, 36, 36, 36,183, 30, + 36, 36, 36, 36, 36, 36,183, 27, 36, 36, 36, 36, 78, 36, 36, 36, + 36, 36, 70, 80, 44,179, 27, 27, 2, 2, 2, 64, 44, 44, 44, 44, + 36, 36, 36, 44, 93, 2, 2, 2, 36, 36, 36, 44, 27, 27, 27, 27, + 36, 61, 44, 44, 27, 27, 27, 27, 36, 44, 44, 44, 93, 2, 64, 44, + 44, 44, 44, 44,179, 27, 27, 27, 11, 47, 44, 44, 44, 44, 44, 44, + 16,110, 44, 44, 44, 27, 27, 27, 36, 36, 43, 43, 44, 44, 44, 44, + 27, 27, 27, 27, 27, 27, 27,100, 36, 36, 36, 36, 36, 57,184, 44, + 36, 44, 44, 44, 44, 44, 44, 44, 27, 27, 27, 95, 44, 44, 44, 44, + 180, 27, 30, 2, 2, 44, 44, 44, 36, 43, 43, 2, 2, 44, 44, 44, + 36, 36,183, 27, 27, 27, 44, 44, 87, 98, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 43, 43, 43, 43, 43, 43, 43, 60, 2, 2, 2, 44, - 27, 27, 27, 7, 7, 7, 7, 7, 44, 44, 44, 44, 44, 44, 44, 57, - 84, 85, 43, 83, 85, 60,181, 2, 2, 44, 44, 44, 44, 44, 79, 44, - 43, 71, 36, 36, 36, 36, 36, 36, 36, 36, 36, 70, 43, 43, 85, 43, - 43, 43, 80, 7, 7, 7, 7, 7, 2, 2, 92, 96, 44, 44, 44, 44, - 36, 70, 2, 61, 44, 44, 44, 44, 36, 92, 84, 43, 43, 43, 43, 83, - 96, 36, 63, 2, 59, 43, 60, 85, 7, 7, 7, 7, 7, 63, 63, 2, - 175, 27, 27, 27, 27, 27, 27, 27, 27, 27, 98, 44, 44, 44, 44, 44, - 36, 36, 36, 36, 36, 36, 84, 85, 43, 84, 83, 43, 2, 2, 2, 80, + 27, 27, 27, 7, 7, 7, 7, 7, 71, 70, 71, 44, 44, 44, 44, 57, + 86, 87, 43, 85, 87, 60,185, 2, 2, 80, 44, 44, 44, 44, 79, 44, + 43, 71, 36, 36, 36, 36, 36, 36, 36, 36, 36, 70, 43, 43, 87, 43, + 43, 43, 80, 7, 7, 7, 7, 7, 2, 2, 94, 98, 44, 44, 44, 44, + 36, 70, 2, 61, 44, 44, 44, 44, 36, 94, 86, 43, 43, 43, 43, 85, + 98, 36, 63, 2, 59, 43, 60, 87, 7, 7, 7, 7, 7, 63, 63, 2, + 179, 27, 27, 27, 27, 27, 27, 27, 27, 27,100, 44, 44, 44, 44, 44, + 36, 36, 36, 36, 36, 36, 86, 87, 43, 86, 85, 43, 2, 2, 2, 80, 36, 36, 36, 61, 61, 36, 36, 62, 36, 36, 36, 36, 36, 36, 36, 62, 36, 36, 36, 36, 63, 44, 44, 44, 36, 36, 36, 36, 36, 36, 36, 70, - 84, 85, 43, 43, 43, 80, 44, 44, 43, 84, 62, 36, 36, 36, 61, 62, - 61, 36, 62, 36, 36, 57, 71, 84, 83, 84, 88, 87, 88, 87, 84, 44, - 61, 44, 44, 87, 44, 44, 62, 36, 36, 84, 44, 43, 43, 43, 80, 44, - 43, 43, 80, 44, 44, 44, 44, 44, 36, 36, 92, 84, 43, 43, 43, 43, - 84, 43, 83, 71, 36, 63, 2, 2, 7, 7, 7, 7, 7, 2, 91, 71, - 84, 85, 43, 43, 83, 83, 84, 85, 83, 43, 36, 72, 44, 44, 44, 44, - 36, 36, 36, 36, 36, 36, 36, 92, 84, 43, 43, 44, 84, 84, 43, 85, + 86, 87, 43, 43, 43, 80, 44, 44, 43, 86, 62, 36, 36, 36, 61, 62, + 61, 36, 62, 36, 36, 57, 71, 86, 85, 86, 90, 89, 90, 89, 86, 44, + 61, 44, 44, 89, 44, 44, 62, 36, 36, 86, 44, 43, 43, 43, 80, 44, + 43, 43, 80, 44, 44, 44, 44, 44, 36, 36, 94, 86, 43, 43, 43, 43, + 86, 43, 85, 71, 36, 63, 2, 2, 7, 7, 7, 7, 7, 2, 93, 71, + 86, 87, 43, 43, 85, 85, 86, 87, 85, 43, 36, 72, 44, 44, 44, 44, + 36, 36, 36, 36, 36, 36, 36, 94, 86, 43, 43, 44, 86, 86, 43, 87, 60, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 36, 36, 43, 44, - 84, 85, 43, 43, 43, 83, 85, 85, 60, 2, 61, 44, 44, 44, 44, 44, - 2, 2, 2, 2, 2, 2, 64, 44, 36, 36, 36, 36, 36, 70, 85, 84, - 43, 43, 43, 85, 61, 44, 44, 44, 84, 43, 43, 85, 43, 43, 44, 44, - 7, 7, 7, 7, 7, 27, 2, 95, 43, 43, 43, 43, 85, 60, 44, 44, - 27, 98, 44, 44, 44, 44, 44, 62, 36, 36, 36, 61, 62, 44, 36, 36, - 36, 36, 62, 61, 36, 36, 36, 36, 84, 84, 84, 87, 88, 57, 83, 71, - 96, 85, 2, 64, 44, 44, 44, 44, 36, 36, 36, 36, 44, 36, 36, 36, - 92, 84, 43, 43, 44, 43, 84, 84, 71, 72, 88, 44, 44, 44, 44, 44, - 70, 43, 43, 43, 43, 71, 36, 36, 36, 70, 43, 43, 83, 70, 43, 60, - 2, 2, 2, 59, 44, 44, 44, 44, 70, 43, 43, 83, 85, 43, 36, 36, - 36, 36, 36, 36, 36, 43, 43, 43, 43, 43, 43, 83, 43, 2, 72, 2, - 2, 64, 44, 44, 44, 44, 44, 44, 43, 43, 43, 80, 43, 43, 43, 85, + 86, 87, 43, 43, 43, 85, 87, 87, 60, 2, 61, 44, 44, 44, 44, 44, + 2, 2, 2, 2, 2, 2, 64, 44, 36, 36, 36, 36, 36, 70, 87, 86, + 43, 43, 43, 87, 63, 44, 44, 44, 86, 43, 43, 87, 43, 43, 44, 44, + 7, 7, 7, 7, 7, 27, 2, 97, 43, 43, 43, 43, 87, 60, 44, 44, + 27,100, 44, 44, 44, 44, 44, 62, 36, 36, 36, 61, 62, 44, 36, 36, + 36, 36, 62, 61, 36, 36, 36, 36, 86, 86, 86, 89, 90, 57, 85, 71, + 98, 87, 2, 64, 44, 44, 44, 44, 36, 36, 36, 36, 44, 36, 36, 36, + 94, 86, 43, 43, 44, 43, 86, 86, 71, 72, 90, 44, 44, 44, 44, 44, + 70, 43, 43, 43, 43, 71, 36, 36, 36, 70, 43, 43, 85, 70, 43, 60, + 2, 2, 2, 59, 44, 44, 44, 44, 70, 43, 43, 85, 87, 43, 36, 36, + 36, 36, 36, 36, 36, 43, 43, 43, 43, 43, 43, 85, 43, 2, 72, 2, + 2, 64, 44, 44, 44, 44, 44, 44, 43, 43, 43, 80, 43, 43, 43, 87, 63, 2, 2, 44, 44, 44, 44, 44, 2, 36, 36, 36, 36, 36, 36, 36, - 44, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 87, 43, 43, 43, - 83, 43, 85, 80, 44, 44, 44, 44, 36, 36, 36, 61, 36, 62, 36, 36, + 44, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 89, 43, 43, 43, + 85, 43, 87, 80, 44, 44, 44, 44, 36, 36, 36, 61, 36, 62, 36, 36, 70, 43, 43, 80, 44, 80, 43, 57, 43, 43, 43, 70, 44, 44, 44, 44, - 36, 36, 36, 62, 61, 36, 36, 36, 36, 36, 36, 36, 36, 84, 84, 88, - 43, 87, 85, 85, 61, 44, 44, 44, 36, 70, 83,162, 64, 44, 44, 44, - 27, 27, 89, 67, 67, 67, 56, 20,161, 67, 67, 67, 67, 67, 67, 67, - 67, 44, 44, 44, 44, 44, 44, 91,103,103,103,103,103,103,103,177, - 2, 2, 64, 44, 44, 44, 44, 44, 65, 65, 65, 65, 68, 44, 44, 44, - 43, 43, 60, 44, 44, 44, 44, 44, 43, 43, 43, 60, 2, 2, 67, 67, - 40, 40, 95, 44, 44, 44, 44, 44, 7, 7, 7, 7, 7,175, 27, 27, - 27, 62, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 44, 44, 62, 36, - 27, 27, 27, 30, 2, 64, 44, 44, 36, 36, 36, 36, 36, 61, 44, 57, - 92, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 44, 44, 44, 57, 43, 74, 40, 40, 40, 40, 40, 40, - 40, 86, 80, 44, 44, 44, 44, 44, 84, 44, 44, 44, 44, 44, 44, 44, + 36, 36, 36, 62, 61, 36, 36, 36, 36, 36, 36, 36, 36, 86, 86, 90, + 43, 89, 87, 87, 61, 44, 44, 44, 36, 70, 85,107, 64, 44, 44, 44, + 27, 27, 91, 67, 67, 67, 56, 20,168, 67, 67, 67, 67, 67, 67, 67, + 67, 44, 44, 44, 44, 44, 44, 93,105,105,105,105,105,105,105,181, + 2, 2, 64, 44, 44, 44, 44, 44, 63, 64, 44, 44, 44, 44, 44, 44, + 65, 65, 65, 65,132, 44, 44, 44, 43, 43, 60, 44, 44, 44, 44, 44, + 43, 43, 43, 60, 2, 2, 67, 67, 40, 40, 97, 44, 44, 44, 44, 44, + 7, 7, 7, 7, 7,179, 27, 27, 27, 62, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 44, 44, 62, 36, 27, 27, 27, 30, 2, 64, 44, 44, + 36, 36, 36, 36, 36, 61, 44, 57, 94, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 44, 44, 44, 57, + 43, 74, 40, 40, 40, 40, 40, 40, 40, 88, 80, 44, 44, 44, 44, 44, + 86, 44, 44, 44, 44, 44, 44, 44, 40, 40, 52, 40, 40, 40, 52, 81, 36, 61, 44, 44, 44, 44, 44, 44, 44, 44, 36, 36, 44, 44, 44, 44, 36, 36, 36, 36, 36, 44, 50, 60, 65, 65, 44, 44, 44, 44, 44, 44, - 67, 67, 67, 90, 55, 67, 67, 67, 67, 67,182, 85, 43, 67,182, 84, - 84,183, 65, 65, 65, 82, 43, 43, 43, 76, 50, 43, 43, 43, 67, 67, - 67, 67, 67, 67, 67, 43, 43, 67, 67, 67, 67, 67, 90, 44, 44, 44, - 67, 43, 76, 44, 44, 44, 44, 44, 27, 27, 44, 44, 44, 44, 44, 44, - 11, 11, 11, 11, 11, 16, 16, 16, 16, 16, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 16, 16, 16,108, 16, 16, 16, 16, 16, - 11, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 47, 11, - 44, 47, 48, 47, 48, 11, 47, 11, 11, 11, 11, 16, 16,146,146, 16, - 16, 16,146, 16, 16, 16, 16, 16, 16, 16, 11, 48, 11, 47, 48, 11, - 11, 11, 47, 11, 11, 11, 47, 16, 16, 16, 16, 16, 11, 48, 11, 47, - 11, 11, 47, 47, 44, 11, 11, 11, 47, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 11, 11, 11, 11, 11, 16, 16, 16, 16, 16, - 16, 16, 16, 44, 11, 11, 11, 11, 31, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 33, 16, 16, 16, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 31, 16, 16, 16, 16, 33, 16, 16, 16, 11, 11, - 11, 11, 31, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 33, - 16, 16, 16, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 31, - 16, 16, 16, 16, 33, 16, 16, 16, 11, 11, 11, 11, 31, 16, 16, 16, - 16, 33, 16, 16, 16, 32, 44, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 43, 43, 43, 76, 67, 50, 43, 43, 43, 43, 43, 43, 43, 43, 76, 67, - 67, 67, 50, 67, 67, 67, 67, 67, 67, 67, 76, 21, 2, 2, 44, 44, - 44, 44, 44, 44, 44, 57, 43, 43, 43, 43, 43, 80, 43, 43, 43, 43, - 43, 43, 43, 43, 80, 57, 43, 43, 43, 57, 80, 43, 43, 80, 44, 44, - 43, 43, 43, 74, 40, 40, 40, 44, 7, 7, 7, 7, 7, 44, 44, 77, - 36, 36, 36, 36, 36, 36, 43, 43, 7, 7, 7, 7, 7, 44, 44, 94, - 36, 36, 61,175, 27, 27, 27, 27, 43, 43, 43, 80, 44, 44, 44, 44, - 16, 16, 43, 43, 43, 74, 44, 44, 27, 27, 27, 27, 27, 27,157, 27, - 184, 27, 98, 44, 44, 44, 44, 44, 27, 27, 27, 27, 27, 27, 27,157, + 43, 43, 43, 43, 43, 43, 43, 44, 43, 43, 43, 80, 44, 44, 44, 44, + 67, 67, 67, 92, 55, 67, 67, 67, 67, 67,186, 87, 43, 67,186, 86, + 86,187, 65, 65, 65, 84, 43, 43, 43, 76, 50, 43, 43, 43, 67, 67, + 67, 67, 67, 67, 67, 43, 43, 67, 67, 43, 76, 44, 44, 44, 44, 44, + 27, 27, 44, 44, 44, 44, 44, 44, 11, 11, 11, 11, 11, 16, 16, 16, + 16, 16, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 16, + 16, 16,110, 16, 16, 16, 16, 16, 11, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 47, 11, 44, 47, 48, 47, 48, 11, 47, 11, + 11, 11, 11, 16, 16,150,150, 16, 16, 16,150, 16, 16, 16, 16, 16, + 16, 16, 11, 48, 11, 47, 48, 11, 11, 11, 47, 11, 11, 11, 47, 16, + 16, 16, 16, 16, 11, 48, 11, 47, 11, 11, 47, 47, 44, 11, 11, 11, + 47, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 11, 11, + 11, 11, 11, 16, 16, 16, 16, 16, 16, 16, 16, 44, 11, 11, 11, 11, + 31, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 33, 16, 16, + 16, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 31, 16, 16, + 16, 16, 33, 16, 16, 16, 11, 11, 11, 11, 31, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 33, 16, 16, 16, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 31, 16, 16, 16, 16, 33, 16, 16, 16, + 11, 11, 11, 11, 31, 16, 16, 16, 16, 33, 16, 16, 16, 32, 44, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 43, 43, 43, 76, 67, 50, 43, 43, + 43, 43, 43, 43, 43, 43, 76, 67, 67, 67, 50, 67, 67, 67, 67, 67, + 67, 67, 76, 21, 2, 2, 44, 44, 44, 44, 44, 44, 44, 57, 43, 43, + 16, 16, 16, 16, 16, 39, 16, 16, 16, 16, 16, 16, 16, 16, 16,110, + 43, 43, 43, 80, 43, 43, 43, 43, 43, 43, 43, 43, 80, 57, 43, 43, + 43, 57, 80, 43, 43, 80, 44, 44, 43, 43, 43, 74, 40, 40, 40, 44, + 7, 7, 7, 7, 7, 44, 44, 77, 36, 36, 36, 36, 36, 36, 36, 80, + 36, 36, 36, 36, 36, 36, 43, 43, 7, 7, 7, 7, 7, 44, 44, 96, + 36, 36, 36, 61, 36, 36, 62, 61, 36, 36, 61,179, 27, 27, 27, 27, + 16, 16, 43, 43, 43, 74, 44, 44, 27, 27, 27, 27, 27, 27,163, 27, + 188, 27,100, 44, 44, 44, 44, 44, 27, 27, 27, 27, 27, 27, 27,163, 27, 27, 27, 27, 27, 27, 27, 44, 36, 36, 62, 36, 36, 36, 36, 36, 62, 61, 61, 62, 62, 36, 36, 36, 36, 61, 36, 36, 62, 62, 44, 44, 44, 61, 44, 62, 62, 62, 62, 36, 62, 61, 61, 62, 62, 62, 62, 62, 62, 61, 61, 62, 36, 61, 36, 36, 36, 61, 36, 36, 62, 36, 61, 61, 36, 36, 36, 36, 36, 62, 36, 36, 62, 36, 62, 36, 36, 62, 36, 36, 8, 44, 44, 44, 44, 44, 44, 44, 55, 67, 67, 67, 67, 67, 67, 67, - 27, 27, 27, 27, 27, 27, 89, 67, 67, 67, 67, 67, 67, 67, 67, 44, - 44, 44, 44, 67, 67, 67, 67, 67, 67, 90, 44, 44, 44, 44, 44, 44, - 67, 44, 44, 44, 44, 44, 44, 44, 67, 67, 67, 67, 67, 25, 41, 41, - 67, 67, 67, 67, 44, 44, 44, 44, 67, 67, 67, 67, 90, 67, 67, 67, - 67, 67, 67, 67, 67, 67, 55, 67, 67, 67, 90, 44, 67, 90, 44, 44, - 67, 90, 67, 67, 67, 67, 67, 67, 79, 44, 44, 44, 44, 44, 44, 44, - 65, 65, 65, 65, 65, 65, 65, 65,165,165,165,165,165,165,165, 44, - 165,165,165,165,165,165,165, 0, 0, 0, 29, 21, 21, 21, 23, 21, + 27, 27, 27, 27, 27, 27, 91, 67, 67, 67, 67, 67, 67, 67, 67, 44, + 44, 44, 44, 67, 67, 67, 67, 67, 67, 92, 44, 44, 44, 44, 44, 44, + 67, 67, 67, 67, 92, 44, 44, 44, 67, 44, 44, 44, 44, 44, 44, 44, + 67, 67, 67, 67, 67, 25, 41, 41, 67, 67, 67, 67, 44, 44, 55, 67, + 67, 67, 67, 67, 44, 44, 44, 44, 67, 67, 92, 44, 67, 67, 92, 44, + 67, 92, 67, 67, 67, 67, 67, 67, 79, 44, 44, 44, 44, 44, 44, 44, + 65, 65, 65, 65, 65, 65, 65, 65,171,171,171,171,171,171,171, 44, + 171,171,171,171,171,171,171, 0, 0, 0, 29, 21, 21, 21, 23, 21, 22, 18, 21, 25, 21, 17, 13, 13, 25, 25, 25, 21, 21, 9, 9, 9, 9, 22, 21, 18, 24, 16, 24, 5, 5, 5, 5, 22, 25, 18, 25, 0, 23, 23, 26, 21, 24, 26, 7, 20, 25, 1, 26, 24, 26, 25, 15, 15, @@ -4280,2075 +4348,629 @@ _hb_ucd_u8[17508] = 2, 2, 6, 5, 9, 21, 9, 2, 2, 9, 25, 9, 26, 12, 11, 11, 2, 6, 5, 21, 17, 2, 2, 26, 26, 23, 2, 12, 17, 12, 21, 12, 12, 21, 7, 2, 2, 7, 7, 21, 21, 2, 1, 1, 21, 23, 26, 26, - 1, 2, 6, 7, 7, 12, 12, 7, 21, 7, 12, 1, 12, 6, 6, 12, - 12, 26, 7, 26, 26, 7, 2, 1, 12, 2, 6, 2, 1, 12, 12, 10, - 10, 10, 10, 12, 21, 6, 2, 10, 10, 2, 15, 26, 26, 2, 2, 21, - 7, 10, 15, 7, 2, 23, 21, 26, 10, 7, 21, 15, 15, 2, 17, 7, - 29, 7, 7, 22, 18, 2, 14, 14, 14, 7, 17, 21, 7, 6, 11, 12, - 5, 2, 5, 6, 8, 8, 8, 24, 5, 24, 2, 24, 9, 24, 24, 2, - 29, 29, 29, 1, 17, 17, 20, 19, 22, 20, 27, 28, 1, 29, 21, 20, - 19, 21, 21, 16, 16, 21, 25, 22, 18, 21, 21, 29, 15, 6, 18, 6, - 12, 11, 9, 26, 26, 9, 26, 5, 5, 26, 14, 9, 5, 14, 14, 15, - 25, 26, 26, 22, 18, 26, 18, 25, 18, 22, 5, 12, 2, 5, 22, 21, - 26, 6, 7, 14, 17, 22, 18, 18, 26, 14, 17, 6, 14, 6, 12, 24, - 24, 6, 26, 15, 6, 21, 11, 21, 24, 9, 23, 26, 10, 21, 6, 10, - 4, 4, 3, 3, 7, 25, 21, 22, 17, 16, 16, 22, 16, 16, 25, 17, - 25, 2, 25, 24, 23, 2, 2, 15, 12, 15, 14, 2, 21, 14, 7, 15, - 12, 17, 21, 1, 26, 10, 10, 1, 23, 15, 0, 1, 2, 3, 4, 5, - 6, 7, 8, 9, 0, 10, 11, 12, 13, 0, 14, 0, 0, 0, 0, 0, - 15, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, 19, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 20, 0, 21, 22, 23, 0, 0, 0, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, - 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 39, 40, 0, 0, 41, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 6, 7, 8, 0, - 9, 0, 10, 11, 0, 0, 12, 13, 14, 15, 16, 0, 0, 0, 0, 17, - 18, 19, 20, 0, 0, 0, 21, 22, 0, 23, 24, 0, 0, 23, 25, 26, - 0, 23, 25, 0, 0, 23, 25, 0, 0, 23, 25, 0, 0, 0, 25, 0, - 0, 0, 27, 0, 0, 23, 25, 0, 0, 28, 25, 0, 0, 0, 29, 0, - 0, 30, 31, 0, 0, 32, 33, 0, 34, 35, 0, 36, 37, 0, 38, 0, - 0, 39, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 42, 42, 0, 0, 0, 0, 43, 0, - 0, 0, 0, 0, 0, 44, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, - 46, 0, 0, 47, 0, 48, 49, 0, 0, 50, 51, 52, 0, 53, 0, 54, - 0, 55, 0, 0, 0, 0, 56, 57, 0, 0, 0, 0, 0, 0, 58, 59, - 0, 0, 0, 0, 0, 0, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 63, 0, 0, 0, 64, - 0, 65, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 67, 68, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, - 70, 71, 0, 0, 0, 0, 51, 72, 0, 73, 74, 0, 0, 75, 76, 0, - 0, 0, 0, 0, 0, 77, 78, 79, 0, 0, 0, 0, 0, 0, 0, 25, - 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, - 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, - 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 83, 0, 0, 0, 0, - 84, 85, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, - 0, 0, 70, 63, 0, 90, 0, 0, 91, 92, 0, 75, 0, 0, 93, 0, - 0, 94, 0, 0, 0, 0, 0, 95, 0, 96, 25, 97, 0, 0, 0, 0, - 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 63,100, 0, - 0, 63, 0, 0, 0,101, 0, 0, 0,102, 0, 0, 0, 0, 0, 0, - 0, 90, 0, 0, 0, 0, 0, 0, 0,103,104, 0, 0, 0, 0, 76, - 0, 42,105, 0,106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 63, 0, 0, 0, 0, 0, 0, 0, 0,107, 0,108, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,109, 0,110, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,111, - 0, 0, 0, 0,112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,113,114,115, 0, 0, - 0, 0,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 117,118, 0, 0, 0, 0, 0, 0, 0,110, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,120, 0, 0, 0,121, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 3, 4, - 5, 6, 7, 4, 4, 8, 9, 10, 1, 11, 12, 13, 14, 15, 16, 17, - 18, 1, 1, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 20, 21, 22, 1, 23, 4, 21, 24, 25, 26, 27, 28, - 29, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 31, 0, - 0, 0, 32, 33, 34, 35, 1, 36, 0, 0, 0, 0, 37, 0, 0, 0, - 0, 0, 0, 0, 0, 38, 1, 39, 14, 39, 40, 41, 0, 0, 0, 0, - 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 43, 36, 44, 45, - 21, 45, 46, 0, 0, 0, 0, 0, 0, 0, 19, 1, 21, 0, 0, 47, - 0, 0, 0, 0, 0, 38, 48, 1, 1, 49, 49, 50, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 52, 1, 1, 1, - 53, 21, 43, 54, 55, 21, 35, 1, 0, 0, 0, 0, 0, 0, 0, 56, - 0, 0, 0, 57, 58, 59, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 57, 0, 61, 0, 0, - 0, 0, 0, 0, 0, 0, 62, 63, 0, 0, 64, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 66, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 70, 71, 0, - 0, 0, 0, 0, 72, 73, 74, 75, 76, 77, 0, 0, 0, 0, 0, 0, - 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 80, 0, + 1, 21, 6, 7, 7, 12, 12, 7, 21, 7, 12, 1, 12, 6, 6, 12, + 12, 26, 7, 26, 26, 7, 2, 1, 12, 2, 6, 2, 24, 7, 7, 6, + 1, 12, 12, 10, 10, 10, 10, 12, 21, 6, 2, 10, 10, 2, 15, 26, + 26, 2, 2, 21, 7, 10, 15, 7, 2, 23, 21, 26, 10, 7, 21, 15, + 15, 2, 17, 7, 29, 7, 7, 22, 18, 2, 14, 14, 14, 7, 10, 21, + 17, 21, 11, 12, 5, 2, 5, 6, 8, 8, 8, 24, 5, 24, 2, 24, + 9, 24, 24, 2, 29, 29, 29, 1, 17, 17, 20, 19, 22, 20, 27, 28, + 1, 29, 21, 20, 19, 21, 21, 16, 16, 21, 25, 22, 18, 21, 21, 29, + 1, 2, 15, 6, 18, 6, 23, 2, 12, 11, 9, 26, 26, 9, 26, 5, + 5, 26, 14, 9, 5, 14, 14, 15, 25, 26, 26, 22, 18, 26, 18, 25, + 18, 22, 5, 12, 2, 5, 22, 21, 21, 22, 18, 17, 26, 6, 7, 14, + 17, 22, 18, 18, 26, 14, 17, 6, 14, 6, 12, 24, 24, 6, 26, 15, + 6, 21, 11, 21, 24, 9, 6, 9, 23, 26, 6, 10, 4, 4, 3, 3, + 7, 25, 17, 16, 16, 22, 16, 16, 25, 17, 25, 2, 25, 24, 2, 15, + 12, 15, 14, 2, 21, 14, 7, 15, 12, 17, 21, 1, 26, 10, 10, 1, + 23, 15, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 10, 11, 12, + 13, 0, 14, 0, 0, 0, 0, 0, 15, 0, 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, + 0, 21, 22, 23, 0, 0, 0, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 34, 0, 35, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, + 0, 0, 39, 40, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, + 0, 0, 0, 0, 6, 7, 8, 0, 9, 0, 10, 11, 0, 0, 12, 13, + 14, 15, 16, 0, 0, 0, 0, 17, 18, 19, 20, 0, 21, 0, 22, 23, + 0, 24, 25, 0, 0, 24, 26, 27, 0, 24, 26, 0, 0, 24, 26, 0, + 0, 24, 26, 0, 0, 0, 26, 0, 0, 24, 28, 0, 0, 24, 26, 0, + 0, 29, 26, 0, 0, 0, 30, 0, 0, 31, 32, 0, 0, 33, 34, 0, + 35, 36, 0, 37, 38, 0, 39, 0, 0, 40, 0, 0, 41, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 43, 44, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 46, 0, 0, + 0, 47, 0, 0, 0, 0, 0, 0, 48, 0, 0, 49, 0, 50, 51, 0, + 0, 52, 53, 54, 0, 55, 0, 56, 0, 57, 0, 0, 0, 0, 58, 59, + 0, 0, 0, 0, 0, 0, 60, 61, 0, 0, 0, 0, 0, 0, 62, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, + 0, 0, 0, 65, 0, 0, 0, 66, 0, 67, 0, 0, 68, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 70, 0, 0, 71, + 0, 0, 0, 0, 0, 0, 0, 0, 72, 73, 0, 0, 0, 0, 53, 74, + 0, 75, 76, 0, 0, 77, 78, 0, 0, 0, 0, 0, 0, 79, 80, 81, + 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, + 82, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 85, + 0, 0, 0, 86, 0, 0, 0, 0, 87, 88, 0, 0, 0, 0, 0, 89, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, + 0, 0, 92, 0, 93, 0, 0, 0, 0, 0, 72, 94, 0, 95, 0, 0, + 96, 97, 0, 77, 0, 0, 98, 0, 0, 99, 0, 0, 0, 0, 0,100, + 0,101, 26,102, 0, 0, 0, 0, 0, 0,103, 0, 0, 0,104, 0, + 0, 0, 0, 0, 0, 65,105, 0, 0, 65, 0, 0, 0,106, 0, 0, + 0,107, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, + 0,108,109, 0, 0, 0, 0, 78, 0, 44,110, 0,111, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, + 0, 0,112, 0,113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,114, + 0,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,116, 0, 0, 0, 0,117, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,118,119,120, 0, 0, 0, 0,121, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,122,123, 0, 0, 0, 0, 0, 0, + 0,115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,124, 0,125, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,126, 0, + 0, 0,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 4, 4, 8, 9, 10, + 1, 11, 12, 13, 14, 15, 16, 17, 18, 1, 1, 1, 0, 0, 0, 0, + 19, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 1, + 23, 4, 21, 24, 25, 26, 27, 28, 29, 30, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 31, 0, 0, 0, 32, 33, 34, 35, 1, 36, + 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 38, 1, 39, + 14, 39, 40, 41, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, + 0, 0, 0, 0, 43, 36, 44, 45, 21, 45, 46, 0, 0, 0, 0, 0, + 0, 0, 19, 1, 21, 0, 0, 47, 0, 0, 0, 0, 0, 38, 48, 1, + 1, 49, 49, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, + 0, 0, 0, 0, 0, 0, 52, 1, 0, 0, 38, 14, 4, 1, 1, 1, + 53, 21, 43, 52, 54, 21, 35, 1, 0, 0, 0, 0, 0, 0, 0, 55, + 0, 0, 0, 56, 57, 58, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 56, 0, 60, 0, 0, + 0, 0, 0, 0, 0, 0, 61, 62, 0, 0, 63, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 65, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 67, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 69, 70, 0, + 0, 0, 0, 0, 71, 72, 73, 74, 75, 76, 0, 0, 0, 0, 0, 0, + 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 79, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, - 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 64, 0, 0, 81, - 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, - 0, 0, 0, 0, 0, 19, 84, 0, 63, 0, 0, 0, 0, 49, 1, 85, - 0, 0, 0, 0, 1, 54, 15, 86, 84, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 56, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, - 0, 0, 19, 10, 1, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, - 0, 88, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, - 0, 0, 0, 0, 89, 9, 12, 4, 90, 8, 91, 47, 0, 59, 50, 0, - 21, 1, 21, 92, 93, 1, 1, 1, 1, 1, 1, 1, 1, 94, 95, 96, - 0, 0, 0, 0, 97, 1, 98, 59, 81, 99,100, 4, 59, 0, 0, 0, - 0, 0, 0, 19, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, - 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,101,102, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,103, 0, 0, 0, 0, 19, 0, 1, 1, 50, - 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 50, 0, 0, 0, - 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, - 1, 1, 1, 1, 50, 0, 0, 0, 0, 0, 52, 69, 0, 0, 0, 0, - 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, - 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,105, 59, 38, - 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, - 0, 0, 0, 0, 0, 0, 0,106, 1, 14, 4, 12, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 38, 89, 0, - 0, 0, 0,107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,108, 62, - 0,109, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 19, 59, 0, 0, 0, 0, 0,110, 14, 54, 84, 0, 0, 0, - 0, 0, 0, 0, 0, 0,111, 0, 89, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 62, 63, 0, 0, 63, 0, 88, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,111, 0, 0, 0, 0,112, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 79, 56, 0, 38, 1, 59, 1, 59, 0, 0, - 64, 88, 0, 0, 0, 0, 0, 60,113, 0, 0, 0, 0, 0, 0, 0, - 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,113, 0, 0, - 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, - 79, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 57, 0, 88,114, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 8, 91, 0, 0, - 0, 0, 0, 0, 1, 89, 0, 0, 0, 0, 0, 0,115, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,116, 0,117,118,119,120, 0, 52, 4, - 121, 49, 23, 0, 0, 0, 0, 0, 0, 0, 38, 50, 0, 0, 0, 0, - 38, 59, 0, 0, 0, 0, 0, 0, 1, 89, 1, 1, 1, 1, 39, 1, - 48,104, 89, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 4,121, 0, 0, 0, 1,122, 0, 0, 0, 0, 0, - 0, 0, 0, 0,230,230,230,230,230,232,220,220,220,220,232,216, - 220,220,220,220,220,202,202,220,220,220,220,202,202,220,220,220, - 1, 1, 1, 1, 1,220,220,220,220,230,230,230,230,240,230,220, - 220,220,230,230,230,220,220, 0,230,230,230,220,220,220,220,230, - 232,220,220,230,233,234,234,233,234,234,233,230, 0, 0, 0,230, - 0,220,230,230,230,230,220,230,230,230,222,220,230,230,220,220, - 230,222,228,230, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, - 21, 22, 0, 23, 0, 24, 25, 0,230,220, 0, 18, 30, 31, 32, 0, - 0, 0, 0, 27, 28, 29, 30, 31, 32, 33, 34,230,230,220,220,230, - 220,230,230,220, 35, 0, 0, 0, 0, 0,230,230,230, 0, 0,230, - 230, 0,220,230,230,220, 0, 0, 0, 36, 0, 0,230,220,230,230, - 220,220,230,220,220,230,220,230,220,230,230, 0, 0,220, 0, 0, - 230,230, 0,230, 0,230,230,230,230,230, 0, 0, 0,220,220,220, - 0, 0, 0,220,230,230, 0,220,230,220,220,220, 27, 28, 29,230, - 7, 0, 0, 0, 0, 9, 0, 0, 0,230,220,230,230, 0, 0, 0, - 0, 0,230, 0, 0, 84, 91, 0, 0, 0, 0, 9, 9, 0, 0, 0, - 0, 0, 9, 0,103,103, 9, 0,107,107,107,107,118,118, 9, 0, - 122,122,122,122,220,220, 0, 0, 0,220, 0,220, 0,216, 0, 0, - 0,129,130, 0,132, 0, 0, 0, 0, 0,130,130,130,130, 0, 0, - 130, 0,230,230, 9, 0,230,230, 0, 0,220, 0, 0, 0, 0, 7, - 0, 9, 9, 0, 0,230, 0, 0, 0,228, 0, 0, 0,222,230,220, - 220, 0, 0, 0,230, 0, 0,220,230,220, 0,220, 0, 0, 9, 9, - 0, 0, 7, 0,230,230,230, 0,230, 0, 1, 1, 1, 0, 0, 0, - 230,234,214,220,202,230,230,230,230,230,232,228,228,220, 0,230, - 233,220,230,220,230,230, 1, 1, 1, 1, 1,230, 0, 1, 1,230, - 220,230, 1, 1, 0, 0,218,228,232,222,224,224, 0, 8, 8, 0, - 230, 0,230,230,220, 0, 0,230, 0, 0, 26, 0, 0,220, 0,230, - 230, 1,220, 0, 0,230,220, 0, 0, 0,220,220, 0, 9, 7, 0, - 0, 7, 9, 0, 0, 0, 9, 7, 9, 9, 0, 0, 6, 6, 0, 0, - 0, 0, 1, 0, 0,216,216, 1, 1, 1, 0, 0, 0,226,216,216, - 216,216,216, 0,220,220,220, 0,230,230, 7, 0, 16, 17, 17, 17, - 17, 17, 17, 33, 17, 17, 17, 19, 17, 17, 17, 17, 20,101, 17,113, - 129,169, 17, 27, 28, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, + 0, 0, 0, 0, 63, 0, 0, 81, 0, 0, 82, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 19, 84, 0, + 62, 0, 0, 0, 0, 49, 1, 85, 0, 0, 0, 0, 1, 52, 15, 86, + 36, 10, 21, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, + 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 19, 10, 1, 0, 0, 0, + 0, 0, 88, 0, 0, 0, 0, 0, 0, 89, 0, 0, 88, 0, 0, 0, + 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 87, 9, 12, 4, + 90, 8, 91, 47, 0, 58, 50, 0, 21, 1, 21, 92, 93, 1, 1, 1, + 1, 1, 1, 1, 1, 94, 95, 96, 0, 0, 0, 0, 97, 1, 98, 58, + 81, 99,100, 4, 58, 0, 0, 0, 0, 0, 0, 19, 50, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 61, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 0,101,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,103, 0, + 0, 0, 0, 19, 0, 1, 1, 50, 0, 0, 0, 0, 0, 0, 0, 38, + 0, 0, 0, 0, 50, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 62, 0, 0, 0, 0, 1, 1, 1, 1, 50, 0, 0, 0, + 0, 0,104, 68, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, + 0, 0, 0, 0, 78, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,105,106, 58, 38, 81, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0,107, + 1, 14, 4, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, + 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 87, 0, + 0, 0, 0,108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,109, 61, + 0,110, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 19, 58, 0, 0, 0, 0, 0,111, 14, 52, 84, 0, 0, 0, + 112, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 61, + 0, 0, 0, 0, 0, 0,113, 0, 87, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 61, 62, 0, 0, 62, 0, 89, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,113, 0, 0, 0, 0,114, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 78, 55, 0, 38, 1, 58, 1, 58, 0, 0, + 63, 89, 0, 0, 0, 0, 0, 59,115, 0, 0, 0, 0, 0, 0, 0, + 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,115, 0, 0, + 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, + 78, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 56, 0, 89, 80, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 8, 91, 0, 0, + 0, 0, 0, 0, 1, 87, 0, 0, 0, 0, 0, 0,116, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,117, 0,118,119,120,121, 0,104, 4, + 122, 49, 23, 0, 0, 0, 0, 0, 0, 0, 38, 50, 0, 0, 0, 0, + 38, 58, 0, 0, 0, 0, 0, 0, 1, 87, 1, 1, 1, 1, 39, 1, + 48,105, 87, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4,122, 0, 0, + 0, 1,123, 0, 0, 0, 0, 0, 0, 0, 0, 0,230,230,230,230, + 230,232,220,220,220,220,232,216,220,220,220,220,220,202,202,220, + 220,220,220,202,202,220,220,220, 1, 1, 1, 1, 1,220,220,220, + 220,230,230,230,230,240,230,220,220,220,230,230,230,220,220, 0, + 230,230,230,220,220,220,220,230,232,220,220,230,233,234,234,233, + 234,234,233,230, 0, 0, 0,230, 0,220,230,230,230,230,220,230, + 230,230,222,220,230,230,220,220,230,222,228,230, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 0, 23, 0, 24, 25, 0, + 230,220, 0, 18, 30, 31, 32, 0, 0, 0, 0, 27, 28, 29, 30, 31, + 32, 33, 34,230,230,220,220,230,220,230,230,220, 35, 0, 0, 0, + 0, 0,230,230,230, 0, 0,230,230, 0,220,230,230,220, 0, 0, + 0, 36, 0, 0,230,220,230,230,220,220,230,220,220,230,220,230, + 220,230,230, 0, 0,220, 0, 0,230,230, 0,230, 0,230,230,230, + 230,230, 0, 0, 0,220,220,220,230,220,220,220,230,230, 0,220, + 27, 28, 29,230, 7, 0, 0, 0, 0, 9, 0, 0, 0,230,220,230, + 230, 0, 0, 0, 0, 0,230, 0, 0, 84, 91, 0, 0, 0, 0, 9, + 9, 0, 0, 0, 0, 0, 9, 0,103,103, 9, 0,107,107,107,107, + 118,118, 9, 0,122,122,122,122,220,220, 0, 0, 0,220, 0,220, + 0,216, 0, 0, 0,129,130, 0,132, 0, 0, 0, 0, 0,130,130, + 130,130, 0, 0,130, 0,230,230, 9, 0,230,230, 0, 0,220, 0, + 0, 0, 0, 7, 0, 9, 9, 0, 9, 9, 0, 0, 0,230, 0, 0, + 0,228, 0, 0, 0,222,230,220,220, 0, 0, 0,230, 0, 0,220, + 230,220, 0,220,230,230,230, 0, 0, 0, 9, 9, 0, 0, 7, 0, + 230, 0, 1, 1, 1, 0, 0, 0,230,234,214,220,202,230,230,230, + 230,230,232,228,228,220,218,230,233,220,230,220,230,230, 1, 1, + 1, 1, 1,230, 0, 1, 1,230,220,230, 1, 1, 0, 0,218,228, + 232,222,224,224, 0, 8, 8, 0, 0, 0, 0,220,230, 0,230,230, + 220, 0, 0,230, 0, 0, 26, 0, 0,220, 0,230,230, 1,220, 0, + 0,230,220, 0, 0, 0,220,220, 0, 0,230,220, 0, 9, 7, 0, + 0, 7, 9, 0, 0, 0, 9, 7, 6, 6, 0, 0, 0, 0, 1, 0, + 0,216,216, 1, 1, 1, 0, 0, 0,226,216,216,216,216,216, 0, + 220,220,220, 0,230,230, 7, 0, 16, 17, 17, 17, 17, 17, 17, 33, + 17, 17, 17, 19, 17, 17, 17, 17, 20,101, 17,113,129,169, 17, 27, + 28, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,237, 0, 1, 2, 2, - 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 6, 7, 8, - 9, 0, 0, 0, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 21, 22, 0, 0, 0, 0, - 23, 24, 25, 26, 0, 27, 0, 28, 29, 30, 31, 32, 0, 0, 0, 0, - 0, 0, 0, 33, 34, 35, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 1, 2, 39, 40, - 0, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 5, 0, - 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, - 0, 0, 8, 9, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 10, - 0, 0, 0, 0, 0, 0, 11, 12, 0, 13, 0, 14, 15, 16, 0, 0, - 0, 0, 0, 1, 17, 18, 0, 19, 7, 1, 0, 0, 0, 20, 20, 7, - 20, 20, 20, 20, 20, 20, 20, 8, 21, 0, 22, 0, 7, 23, 24, 0, - 20, 20, 25, 0, 0, 0, 26, 27, 1, 7, 20, 20, 20, 20, 20, 1, - 28, 29, 30, 31, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 10, 0, - 0, 0, 0, 0, 0, 0, 20, 20, 20, 1, 0, 0, 8, 21, 32, 4, - 0, 10, 0, 33, 7, 20, 20, 20, 0, 0, 0, 0, 8, 34, 34, 35, - 36, 34, 37, 0, 38, 1, 20, 20, 0, 0, 39, 0, 1, 1, 0, 8, - 21, 1, 20, 0, 0, 0, 1, 0, 0, 40, 1, 1, 0, 0, 8, 21, - 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 26, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 21, 7, 20, 41, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 21, 0, 42, 43, 44, 0, 45, 0, 8, 21, 0, 0, 0, 0, 0, - 0, 0, 0, 46, 7, 1, 10, 1, 0, 0, 0, 1, 20, 20, 1, 0, - 0, 0, 0, 0, 0, 0, 20, 20, 1, 20, 20, 0, 0, 0, 0, 0, - 0, 0, 26, 21, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, - 4, 5, 6, 7, 7, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 9, - 10, 11, 12, 12, 12, 12, 13, 14, 14, 14, 14, 15, 16, 17, 18, 19, - 20, 14, 21, 14, 22, 14, 14, 14, 14, 23, 24, 24, 25, 26, 14, 14, - 14, 14, 27, 28, 14, 14, 29, 30, 31, 32, 33, 34, 7, 7, 7, 7, + 17, 17, 17, 17, 17, 17, 17,237, 0, 1, 2, 2, 0, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 5, 0, 0, 0, 0, 6, 7, 8, 9, 0, 0, 0, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 20, 0, 0, 21, 22, 0, 0, 0, 0, 23, 24, 25, 26, + 0, 27, 0, 28, 29, 30, 31, 32, 0, 0, 0, 0, 0, 0, 0, 33, + 34, 35, 36, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 38, 39, 0, 0, 0, 0, 1, 2, 40, 41, 0, 1, 2, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, + 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 5, 0, 0, 0, 6, 0, + 0, 0, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 0, 0, 8, 9, + 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, + 0, 0, 11, 12, 0, 13, 0, 14, 15, 16, 0, 0, 0, 0, 0, 1, + 17, 18, 0, 19, 7, 1, 0, 0, 0, 20, 20, 7, 20, 20, 20, 20, + 20, 20, 20, 8, 21, 0, 22, 0, 7, 23, 24, 0, 20, 20, 25, 0, + 0, 0, 26, 27, 1, 7, 20, 20, 20, 20, 20, 1, 28, 29, 30, 31, + 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, + 0, 0, 20, 20, 20, 1, 0, 0, 8, 21, 32, 4, 0, 10, 0, 33, + 7, 20, 20, 20, 0, 0, 0, 0, 8, 34, 34, 35, 36, 34, 37, 0, + 38, 1, 20, 20, 0, 0, 39, 0, 1, 1, 0, 8, 21, 1, 20, 0, + 0, 0, 1, 0, 0, 40, 1, 1, 0, 0, 8, 21, 0, 1, 0, 1, + 0, 1, 0, 0, 0, 0, 26, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 21, 7, 20, 41, 34, 34, 34, 34, 34, 34, 34, 34, 34, 21, 0, 42, + 43, 44, 0, 45, 0, 8, 21, 0, 0, 0, 0, 0, 0, 0, 0, 46, + 7, 1, 10, 1, 0, 0, 0, 1, 20, 20, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 26, 34, 9, 0, 0, 20, 20, 1, 20, 20, 0, + 0, 0, 0, 0, 0, 0, 26, 21, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3, 47, 48, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 9, 10, 11, 11, 11, 11, 12, 13, 13, 13, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 13, 22, 13, 13, 13, 13, 23, 24, 24, + 25, 26, 13, 13, 13, 27, 28, 29, 13, 30, 31, 32, 33, 34, 35, 36, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 35, 7, 36, 37, 7, 38, 7, 7, 7, 39, 14, 40, 7, 7, 41, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 42, 0, 0, 1, - 2, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 32, 33, 34, 35, 36, 37, 37, 37, 37, 37, 38, 39, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 2, 2, 53, 54, 55, 56, - 57, 58, 59, 59, 59, 59, 60, 59, 59, 59, 59, 59, 59, 59, 61, 61, - 59, 59, 59, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, - 74, 75, 76, 77, 78, 59, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 7, 7, 7, 7, 37, 7, 38, 39, 7, 40, 7, 7, 7, 41, 13, 42, + 7, 7, 43, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 44, 0, 0, 1, 2, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 32, 33, 34, 35, 36, 37, 37, 37, 37, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 2, 2, + 53, 54, 55, 56, 57, 58, 59, 59, 59, 59, 60, 59, 59, 59, 59, 59, + 59, 59, 61, 61, 59, 59, 59, 59, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 59, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, - 70, 70, 70, 70, 70, 70, 70, 70, 70, 79, 70, 70, 70, 70, 70, 70, - 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 80, 81, 81, - 81, 81, 81, 81, 81, 81, 81, 82, 83, 83, 84, 85, 86, 87, 88, 89, - 90, 91, 92, 93, 94, 95, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 79, 70, 70, + 70, 70, 80, 80, 80, 80, 80, 80, 80, 80, 80, 81, 82, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 96, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 70, 70, 98, 99,100,101,102,102,103,104,105,106,107,108,109,110, - 111,112, 97,113,114,115,116,117,118, 97,119,119,120, 97,121,122, - 123,124,125,126,127,128,129,130,131, 97,132,133,134,135,136,137, - 138,139,140,141,142, 97,143,144, 97,145,146,147,148, 97,149,150, - 151,152,153,154, 97, 97,155,156,157,158, 97,159, 97,160,161,161, - 161,161,161,161,161,162,163,161,164, 97, 97, 97, 97, 97,165,165, - 165,165,165,165,165,165,166, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97,167,167,167,167,168, 97, 97, 97,169,169, - 169,169,170,171,172,173, 97, 97, 97, 97,174,175,176,177,178,178, - 178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178, - 178,178,178,178,178,178,178,178,178,178,178,178,178,179,178,178, - 178,178,178,178,180,180,180,181,182, 97, 97, 97, 97, 97,183,184, - 185,186,186,187, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97,188,189, 97, 97, 97, 97, 97, 97, 59,190, - 191,192,193,194,195, 97,196,197,198, 59, 59,199, 59,200,201,201, - 201,201,201,202, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,203, 97, - 204, 97, 97,205, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,206,207, - 208, 97, 97, 97, 97, 97,209,210,211, 97,212,213, 97, 97,214,215, - 59,216,217, 97, 59, 59, 59, 59, 59, 59, 59,218,219,220,221,222, - 223,224,225,226, 59,227, 97, 97, 97, 97, 97, 97, 97, 97, 70, 70, - 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,228, 70, 70, 70, 70, - 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,229, 70,230, 70, + 32, 95, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 70, 70, 97, 98, 99,100,101,101,102,103,104,105, + 106,107,108,109,110,111, 96,112,113,114,115,116,117,118,119,119, + 120,121,122,123,124,125,126,127,128,129,130,131,132, 96,133,134, + 135,136,137,138,139,140,141,142,143, 96,144,145, 96,146,147,148, + 149, 96,150,151,152,153,154,155, 96, 96,156,157,158,159, 96,160, + 96,161,162,162,162,162,162,162,162,163,164,162,165, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96,166,167,167,167,167,167,167,167,167,168, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,169,169,169,169,170, 96, + 96, 96,171,171,171,171,172,173,174,175, 96, 96, 96, 96,176,177, + 178,179,180,180,180,180,180,180,180,180,180,180,180,180,180,180, + 180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180, + 180,181,180,180,180,180,180,180,182,182,182,183,184, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96,185,186,187,188,189,189,190, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,191,192, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 193,194, 59,195,196,197,198,199,200, 96,201,202,203, 59, 59,204, + 59,205,206,206,206,206,206,207, 96, 96, 96, 96, 96, 96, 96, 96, + 208, 96,209, 96,210, 96, 96,211, 96, 96, 96, 96, 96, 96, 96, 96, + 96,212,213,214,215, 96, 96, 96, 96, 96,216,217,218, 96,219,220, + 96, 96,221,222, 59,223,224, 96, 59, 59, 59, 59, 59, 59, 59,225, + 226,227,228,229, 59, 59,230,231, 59,232, 96, 96, 96, 96, 96, 96, + 96, 96, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,233, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, - 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,231, 70, 70, 70, 70, - 70, 70, 70, 70, 70,232, 97, 97, 97, 97, 97, 97, 97, 97, 70, 70, - 70, 70,233, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 70, 70, - 70, 70, 70, 70,234, 97, 97, 97, 97, 97, 97, 97, 97, 97,235, 97, - 236,237, 0, 1, 2, 2, 0, 1, 2, 2, 2, 3, 4, 5, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, - 19, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 0, 19, 0, - 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, - 26, 26, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, - 9, 9, 0, 9, 9, 9, 2, 2, 9, 9, 9, 9, 0, 9, 2, 2, - 2, 2, 9, 0, 9, 0, 9, 9, 9, 2, 9, 2, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 2, 9, 9, 9, 9, 9, 9, 9, - 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 1, 1, 6, 2, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 2, 4, 4, 4, 2, 2, 4, 4, 4, 2, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 2, 2, - 2, 2, 2, 2, 2, 2, 14, 14, 14, 2, 2, 2, 2, 14, 14, 14, - 14, 14, 14, 2, 2, 2, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, - 3, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 0, 3, 2, 3, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 3, - 3, 3, 3, 3, 3, 3, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 37, 37, 2, 37, 37, 37, 37, 2, 2, 37, 37, 37, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, 2, 2, 2, 2, 2, 2, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 2, 2, 64, 64, 64, 90, 90, - 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 2, 2, 90, 90, - 90, 90, 90, 90, 90, 2, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 2, 2, 95, 2, 37, 37, 37, 2, 2, 2, 2, 2, 3, 3, - 3, 3, 3, 2, 3, 3, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, - 0, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, - 1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 5, 5, - 5, 5, 2, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 5, 5, 2, - 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, - 5, 5, 5, 5, 5, 5, 5, 2, 5, 2, 2, 2, 5, 5, 5, 5, - 2, 2, 5, 5, 5, 5, 5, 2, 2, 5, 5, 5, 5, 2, 2, 2, - 2, 2, 2, 2, 2, 5, 2, 2, 2, 2, 5, 5, 2, 5, 5, 5, - 5, 5, 2, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 11, - 11, 11, 2, 11, 11, 11, 11, 11, 11, 2, 2, 2, 2, 11, 11, 2, - 2, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 2, - 11, 11, 11, 11, 11, 11, 11, 2, 11, 11, 2, 11, 11, 2, 11, 11, - 2, 2, 11, 2, 11, 11, 11, 2, 2, 11, 11, 11, 2, 2, 2, 11, - 2, 2, 2, 2, 2, 2, 2, 11, 11, 11, 11, 2, 11, 2, 2, 2, - 2, 2, 2, 2, 11, 11, 11, 11, 11, 11, 11, 11, 11, 2, 2, 10, - 10, 10, 2, 10, 10, 10, 10, 10, 10, 10, 10, 10, 2, 10, 10, 10, - 2, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 2, - 10, 10, 10, 10, 10, 10, 10, 2, 10, 10, 2, 10, 10, 10, 10, 10, - 2, 2, 10, 10, 10, 10, 10, 10, 2, 10, 10, 10, 2, 2, 10, 2, - 2, 2, 2, 2, 2, 2, 10, 10, 10, 10, 2, 2, 10, 10, 10, 10, - 2, 2, 2, 2, 2, 2, 2, 10, 10, 10, 10, 10, 10, 10, 2, 21, - 21, 21, 2, 21, 21, 21, 21, 21, 21, 21, 21, 2, 2, 21, 21, 2, - 2, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 2, - 21, 21, 21, 21, 21, 21, 21, 2, 21, 21, 2, 21, 21, 21, 21, 21, - 2, 2, 21, 21, 21, 21, 21, 2, 2, 21, 21, 21, 2, 2, 2, 2, - 2, 2, 2, 21, 21, 21, 2, 2, 2, 2, 21, 21, 2, 21, 21, 21, - 21, 21, 2, 2, 21, 21, 2, 2, 22, 22, 2, 22, 22, 22, 22, 22, - 22, 2, 2, 2, 22, 22, 22, 2, 22, 22, 22, 22, 2, 2, 2, 22, - 22, 2, 22, 2, 22, 22, 2, 2, 2, 22, 22, 2, 2, 2, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 2, 2, 2, 2, 22, 22, 22, 2, - 2, 2, 2, 2, 2, 22, 2, 2, 2, 2, 2, 2, 22, 22, 22, 22, - 22, 2, 2, 2, 2, 2, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 2, 23, 23, 23, 2, 23, 23, 23, 23, 23, 23, 23, 23, - 2, 2, 2, 23, 23, 23, 23, 2, 23, 23, 23, 23, 2, 2, 2, 2, - 2, 2, 2, 23, 23, 2, 23, 23, 23, 2, 2, 2, 2, 2, 23, 23, - 23, 23, 2, 2, 23, 23, 2, 2, 2, 2, 2, 2, 2, 23, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 2, 16, 16, 16, 2, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 2, 16, 16, 16, 16, 16, - 2, 2, 16, 16, 16, 16, 16, 2, 16, 16, 16, 16, 2, 2, 2, 2, - 2, 2, 2, 16, 16, 2, 2, 2, 2, 2, 2, 2, 16, 2, 16, 16, - 16, 16, 2, 2, 16, 16, 2, 16, 16, 2, 2, 2, 2, 2, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 2, 20, 20, 20, 2, - 20, 20, 20, 20, 20, 20, 2, 2, 2, 2, 20, 20, 20, 20, 20, 20, - 20, 20, 2, 2, 20, 20, 2, 36, 36, 36, 2, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 2, 2, 2, - 36, 36, 36, 36, 36, 36, 36, 36, 2, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 2, 36, 2, 2, 2, 2, 36, 2, 2, 2, 2, 36, 36, 36, - 36, 36, 36, 2, 36, 2, 2, 2, 2, 2, 2, 2, 36, 36, 2, 2, - 36, 36, 36, 2, 2, 2, 2, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 2, 2, 2, 2, 0, 24, 24, - 24, 24, 2, 2, 2, 2, 2, 18, 18, 2, 18, 2, 18, 18, 18, 18, - 18, 2, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 2, 18, 2, 18, 18, 18, 18, 18, 18, 18, 2, 2, 18, 18, - 18, 18, 18, 2, 18, 2, 18, 18, 2, 2, 18, 18, 18, 18, 25, 25, - 25, 25, 25, 25, 25, 25, 2, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 2, 2, 2, 25, 25, 25, 25, 25, 2, 25, 25, 25, 25, - 25, 25, 25, 0, 0, 0, 0, 25, 25, 2, 2, 2, 2, 2, 33, 33, - 33, 33, 33, 33, 33, 33, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 2, 8, 2, 2, 2, 2, 2, 8, 2, 2, 8, 8, - 8, 0, 8, 8, 8, 8, 12, 12, 12, 12, 12, 12, 12, 12, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 2, 30, 30, 30, 30, 2, 2, 30, 30, - 30, 30, 30, 30, 30, 2, 30, 30, 30, 2, 2, 30, 30, 30, 30, 30, - 30, 30, 30, 2, 2, 2, 30, 30, 2, 2, 2, 2, 2, 2, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 2, 2, 28, 28, - 28, 28, 28, 28, 28, 28, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 2, 2, 2, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 0, 0, 0, 35, 35, 35, 2, 2, 2, 2, 2, 2, 2, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 2, 45, 45, 45, 45, - 45, 45, 45, 2, 2, 2, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 0, 0, 2, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 2, 2, 2, 2, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 2, 46, 46, 46, 2, 46, 46, 2, 2, 2, 2, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 2, 2, 31, 31, - 2, 2, 2, 2, 2, 2, 32, 32, 0, 0, 32, 0, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 2, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 2, 2, 2, 2, 2, 2, 32, 2, 2, 2, 2, 2, 2, 2, 32, 32, - 32, 2, 2, 2, 2, 2, 28, 28, 28, 28, 28, 28, 2, 2, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 2, 48, 48, - 48, 48, 2, 2, 2, 2, 48, 2, 2, 2, 48, 48, 48, 48, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 2, 2, 52, 52, - 52, 52, 52, 2, 2, 2, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 2, 2, 2, 2, 58, 58, 2, 2, 2, 2, 2, 2, 58, 58, - 58, 2, 2, 2, 58, 58, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 2, 2, 54, 54, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, - 91, 91, 91, 91, 91, 2, 91, 91, 91, 91, 91, 2, 2, 91, 91, 91, - 2, 2, 2, 2, 2, 2, 91, 91, 91, 91, 91, 91, 2, 2, 1, 2, - 2, 2, 2, 2, 2, 2, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 2, 2, 2, 2, 62, 62, 62, 62, 62, 2, 2, 2, 76, 76, - 76, 76, 76, 76, 76, 76, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, - 93, 93, 2, 2, 2, 2, 2, 2, 2, 2, 93, 93, 93, 93, 70, 70, - 70, 70, 70, 70, 70, 70, 2, 2, 2, 70, 70, 70, 70, 70, 70, 70, - 2, 2, 2, 70, 70, 70, 73, 73, 73, 73, 73, 73, 73, 73, 6, 2, - 2, 2, 2, 2, 2, 2, 8, 8, 8, 2, 2, 8, 8, 8, 1, 1, - 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, - 0, 2, 2, 2, 2, 2, 19, 19, 19, 19, 19, 19, 9, 9, 9, 9, - 9, 6, 19, 19, 19, 19, 19, 19, 19, 19, 19, 9, 9, 9, 9, 9, - 19, 19, 19, 19, 9, 9, 9, 9, 9, 19, 19, 19, 19, 19, 6, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 9, 1, 1, - 2, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 2, 2, 2, 9, - 2, 9, 2, 9, 2, 9, 9, 9, 9, 9, 9, 2, 9, 9, 9, 9, - 9, 9, 2, 2, 9, 9, 9, 9, 9, 9, 2, 9, 9, 9, 2, 2, - 9, 9, 9, 2, 9, 9, 9, 9, 9, 9, 9, 9, 9, 2, 0, 0, - 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 19, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, - 0, 0, 0, 0, 0, 2, 19, 19, 19, 19, 19, 2, 2, 2, 0, 0, - 0, 0, 0, 0, 9, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 19, 0, 19, 0, 0, 0, 2, 2, 2, 2, 0, 0, - 0, 2, 2, 2, 2, 2, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, - 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 2, 55, 55, - 55, 55, 2, 2, 2, 2, 2, 55, 55, 55, 55, 55, 55, 55, 61, 61, - 61, 61, 61, 61, 61, 61, 2, 2, 2, 2, 2, 2, 2, 61, 61, 2, - 2, 2, 2, 2, 2, 2, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 2, 13, 13, 13, 13, 13, 13, 13, 13, 13, 2, 2, 2, 2, 13, 13, - 13, 13, 13, 13, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, - 0, 0, 0, 13, 0, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 1, 1, 1, 1, 12, 12, 13, 13, 13, 13, 0, 0, 0, 0, 2, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 2, 2, 1, 1, 0, 0, 15, 15, 15, 0, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 0, 0, 17, 17, 17, 2, 2, 2, 2, 2, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 2, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 2, 12, 12, 12, 12, 12, 12, 12, 0, 17, 17, - 17, 17, 17, 17, 17, 0, 13, 13, 13, 13, 13, 2, 2, 2, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 2, 2, 2, 39, 39, - 39, 39, 39, 39, 39, 2, 86, 86, 86, 86, 86, 86, 86, 86, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 2, 2, 2, 2, 79, 79, - 79, 79, 79, 79, 79, 79, 0, 0, 19, 19, 19, 19, 19, 19, 0, 0, - 0, 19, 19, 19, 19, 19, 2, 2, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 19, 19, 19, 60, 60, - 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 2, 2, 2, 0, 0, - 2, 2, 2, 2, 2, 2, 65, 65, 65, 65, 65, 65, 65, 65, 75, 75, - 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 2, 2, 2, 2, - 2, 2, 2, 2, 75, 75, 75, 75, 2, 2, 2, 2, 2, 2, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 0, 69, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 74, 12, 12, 12, 12, 12, 2, 2, 2, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 2, 0, 84, 84, - 2, 2, 2, 2, 84, 84, 33, 33, 33, 33, 33, 33, 33, 2, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 2, 68, 68, - 68, 68, 68, 68, 2, 2, 68, 68, 2, 2, 68, 68, 68, 68, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 2, 2, 2, 2, 2, 2, 2, - 2, 92, 92, 92, 92, 92, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 2, 2, 30, 30, 30, 30, 30, 30, 2, 19, 19, - 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 9, 19, 19, 19, 19, - 0, 0, 2, 2, 2, 2, 87, 87, 87, 87, 87, 87, 2, 2, 87, 87, - 2, 2, 2, 2, 2, 2, 12, 12, 12, 12, 2, 2, 2, 2, 2, 2, - 2, 12, 12, 12, 12, 12, 13, 13, 2, 2, 2, 2, 2, 2, 19, 19, - 19, 19, 19, 19, 19, 2, 2, 2, 2, 4, 4, 4, 4, 4, 2, 2, - 2, 2, 2, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 2, 14, 14, - 14, 14, 14, 2, 14, 2, 14, 14, 2, 14, 14, 2, 14, 14, 3, 3, - 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 0, 0, 2, 2, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 1, 1, - 1, 1, 1, 1, 6, 6, 0, 0, 0, 2, 0, 0, 0, 0, 3, 3, - 3, 3, 3, 2, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 2, 2, - 12, 12, 12, 12, 12, 12, 2, 2, 12, 12, 12, 2, 2, 2, 2, 0, - 0, 0, 0, 0, 2, 2, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 2, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 2, 49, 49, - 49, 2, 49, 49, 2, 49, 49, 49, 49, 49, 49, 49, 2, 2, 49, 49, - 49, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, - 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 9, 2, - 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 1, 2, 2, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 2, 2, 2, 67, 67, - 67, 67, 67, 67, 67, 67, 67, 2, 2, 2, 2, 2, 2, 2, 1, 0, - 0, 0, 0, 0, 0, 0, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 2, 2, 2, 2, 2, 2, 2, 2, 2, 42, 42, 42, 41, 41, - 41, 41, 41, 41, 41, 41, 41, 41, 41, 2, 2, 2, 2, 2,118,118, - 118,118,118,118,118,118,118,118,118, 2, 2, 2, 2, 2, 53, 53, - 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 2, 53, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 2, 2, 2, 2, 59, 59, - 59, 59, 59, 59, 2, 2, 40, 40, 40, 40, 40, 40, 40, 40, 51, 51, - 51, 51, 51, 51, 51, 51, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 2, 2, 50, 50, 2, 2, 2, 2, 2, 2,135,135, - 135,135,135,135,135,135,135,135,135,135, 2, 2, 2, 2,106,106, - 106,106,106,106,106,106,104,104,104,104,104,104,104,104,104,104, - 104,104, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,104,110,110, - 110,110,110,110,110,110,110,110,110,110,110,110,110, 2,110,110, - 110,110,110,110, 2, 2, 47, 47, 47, 47, 47, 47, 2, 2, 47, 2, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 2, 47, 47, 2, 2, 2, 47, 2, 2, 47, 81, 81, - 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 2, 81,120,120, - 120,120,120,120,120,120,116,116,116,116,116,116,116,116,116,116, - 116,116,116,116,116, 2, 2, 2, 2, 2, 2, 2, 2,116,128,128, - 128,128,128,128,128,128,128,128,128, 2,128,128, 2, 2, 2, 2, - 2,128,128,128,128,128, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, - 66, 66, 2, 2, 2, 66, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 2, 2, 2, 2, 2, 72, 98, 98, 98, 98, 98, 98, 98, 98, 97, 97, - 97, 97, 97, 97, 97, 97, 2, 2, 2, 2, 97, 97, 97, 97, 2, 2, - 97, 97, 97, 97, 97, 97, 57, 57, 57, 57, 2, 57, 57, 2, 2, 2, - 2, 2, 57, 57, 57, 57, 57, 57, 57, 57, 2, 57, 57, 57, 2, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 2, 2, 57, 57, 57, 2, 2, 2, 2, 57, 57, 2, - 2, 2, 2, 2, 2, 2, 88, 88, 88, 88, 88, 88, 88, 88,117,117, - 117,117,117,117,117,117,112,112,112,112,112,112,112,112,112,112, - 112,112,112,112,112, 2, 2, 2, 2,112,112,112,112,112, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 2, 2, 2, 78, - 78, 78, 78, 78, 78, 78, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, - 83, 83, 83, 83, 2, 2, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 2, 2, 2, 2, 2,122,122,122,122,122,122,122,122,122,122, - 2, 2, 2, 2, 2, 2, 2,122,122,122,122, 2, 2, 2, 2,122, - 122,122,122,122,122,122, 89, 89, 89, 89, 89, 89, 89, 89, 89, 2, - 2, 2, 2, 2, 2, 2,130,130,130,130,130,130,130,130,130,130, - 130, 2, 2, 2, 2, 2, 2, 2,130,130,130,130,130,130,144,144, - 144,144,144,144,144,144,144,144, 2, 2, 2, 2, 2, 2, 3, 3, - 3, 3, 3, 3, 3, 2,156,156,156,156,156,156,156,156,156,156, - 2,156,156,156, 2, 2,156,156, 2, 2, 2, 2, 2, 2,147,147, - 147,147,147,147,147,147,148,148,148,148,148,148,148,148,148,148, - 2, 2, 2, 2, 2, 2,153,153,153,153,153,153,153,153,153,153, - 153,153, 2, 2, 2, 2,149,149,149,149,149,149,149,149,149,149, - 149,149,149,149,149, 2, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 2, 2, 2, 2, 94, 94, 94, 94, 94, 94, 2, 2, - 2, 2, 2, 2, 2, 94, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 85, 2, 2,101,101, - 101,101,101,101,101,101,101, 2, 2, 2, 2, 2, 2, 2,101,101, - 2, 2, 2, 2, 2, 2, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 2, 96, 96,111,111,111,111,111,111,111,111,111,111, - 111,111,111,111,111, 2,100,100,100,100,100,100,100,100, 2, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 2, 2, 2,108,108, - 108,108,108,108,108,108,108,108, 2,108,108,108,108,108,108,108, - 108,108,108,108,108, 2,129,129,129,129,129,129,129, 2,129, 2, - 129,129,129,129, 2,129,129,129,129,129,129,129,129,129,129,129, - 129,129,129,129, 2,129,129,129, 2, 2, 2, 2, 2, 2,109,109, - 109,109,109,109,109,109,109,109,109, 2, 2, 2, 2, 2,109,109, - 2, 2, 2, 2, 2, 2,107,107,107,107, 2,107,107,107,107,107, - 107,107,107, 2, 2,107,107, 2, 2,107,107,107,107,107,107,107, - 107,107,107,107,107,107,107, 2,107,107,107,107,107,107,107, 2, - 107,107, 2,107,107,107,107,107, 2, 1,107,107,107,107,107, 2, - 2,107,107,107, 2, 2,107, 2, 2, 2, 2, 2, 2,107, 2, 2, - 2, 2, 2,107,107,107,107,107,107,107, 2, 2,107,107,107,107, - 107,107,107, 2, 2, 2,137,137,137,137,137,137,137,137,137,137, - 137,137, 2,137,137,137,137,137, 2, 2, 2, 2, 2, 2,124,124, - 124,124,124,124,124,124,124,124, 2, 2, 2, 2, 2, 2,123,123, - 123,123,123,123,123,123,123,123,123,123,123,123, 2, 2,114,114, - 114,114,114,114,114,114,114,114,114,114,114, 2, 2, 2,114,114, - 2, 2, 2, 2, 2, 2, 32, 32, 32, 32, 32, 2, 2, 2,102,102, - 102,102,102,102,102,102,102, 2, 2, 2, 2, 2, 2, 2,102,102, - 2, 2, 2, 2, 2, 2,126,126,126,126,126,126,126,126,126,126, - 126, 2, 2,126,126,126,126,126,126,126, 2, 2, 2, 2,142,142, - 142,142,142,142,142,142,142,142,142,142, 2, 2, 2, 2,125,125, - 125,125,125,125,125,125,125,125,125, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2,125,154,154,154,154,154,154,154, 2, 2,154, - 2, 2,154,154,154,154,154,154,154,154, 2,154,154, 2,154,154, - 154,154,154,154,154,154,154,154,154,154,154,154, 2,154,154, 2, - 2,154,154,154,154,154,154,154, 2, 2, 2, 2, 2, 2,150,150, - 150,150,150,150,150,150, 2, 2,150,150,150,150,150,150,150,150, - 150,150,150, 2, 2, 2,141,141,141,141,141,141,141,141,140,140, - 140,140,140,140,140,140,140,140,140, 2, 2, 2, 2, 2,121,121, - 121,121,121,121,121,121,121, 2, 2, 2, 2, 2, 2, 2,133,133, - 133,133,133,133,133,133,133, 2,133,133,133,133,133,133,133,133, - 133,133,133,133,133, 2,133,133,133,133,133,133, 2, 2,133,133, - 133,133,133, 2, 2, 2,134,134,134,134,134,134,134,134, 2, 2, - 134,134,134,134,134,134, 2,134,134,134,134,134,134,134,134,134, - 134,134,134,134,134, 2,138,138,138,138,138,138,138, 2,138,138, - 2,138,138,138,138,138,138,138,138,138,138,138,138,138, 2, 2, - 138, 2,138,138, 2,138,138,138, 2, 2, 2, 2, 2, 2,143,143, - 143,143,143,143, 2,143,143, 2,143,143,143,143,143,143,143,143, - 143,143,143,143,143,143,143,143,143,143,143,143,143, 2,143,143, - 2,143,143,143,143,143,143, 2, 2, 2, 2, 2, 2, 2,143,143, - 2, 2, 2, 2, 2, 2,145,145,145,145,145,145,145,145,145, 2, - 2, 2, 2, 2, 2, 2, 86, 2, 2, 2, 2, 2, 2, 2, 22, 22, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 22, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 2, 2, 2, 2, 2, 2, 63, 63, - 63, 63, 63, 63, 63, 2, 63, 63, 63, 63, 63, 2, 2, 2, 63, 63, - 63, 63, 2, 2, 2, 2, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 2, 80, 2, 2, 2, 2, 2, 2, 2,127,127, - 127,127,127,127,127,127,127,127,127,127,127,127,127, 2, 79, 2, - 2, 2, 2, 2, 2, 2,115,115,115,115,115,115,115,115,115,115, - 115,115,115,115,115, 2,115,115, 2, 2, 2, 2,115,115,103,103, - 103,103,103,103,103,103,103,103,103,103,103,103, 2, 2,119,119, - 119,119,119,119,119,119,119,119,119,119,119,119, 2, 2,119,119, - 2,119,119,119,119,119, 2, 2, 2, 2, 2,119,119,119,146,146, - 146,146,146,146,146,146,146,146,146, 2, 2, 2, 2, 2, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 2, 2, 2, 2, 99, 2, 2, - 2, 2, 2, 2, 2, 99,136,139, 0, 0,155, 2, 2, 2,136,136, - 136,136,136,136,136,136,155,155,155,155,155,155,155,155,155,155, - 155,155,155,155, 2, 2,136, 2, 2, 2, 2, 2, 2, 2, 17, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 17, 17, 17, 17,139,139,139,139,139,139,139,139,139,139, - 139,139, 2, 2, 2, 2,105,105,105,105,105,105,105,105,105,105, - 105, 2, 2, 2, 2, 2,105,105,105,105,105, 2, 2, 2,105, 2, - 2, 2, 2, 2, 2, 2,105,105, 2, 2,105,105,105,105, 0, 0, - 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, - 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, - 1, 1, 1, 1, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 0, 2, 2, 0, 0, 2, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, - 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0, 2, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, - 0, 0, 0, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 0,131,131,131,131,131,131,131,131,131,131, - 131,131, 2, 2, 2, 2, 2, 2, 2,131,131,131,131,131, 2,131, - 131,131,131,131,131,131, 56, 2, 2, 56, 56, 56, 56, 56, 56, 56, - 2, 56, 56, 2, 56, 56, 56, 56, 56, 2, 2, 2, 2, 2,151,151, - 151,151,151,151,151,151,151,151,151,151,151, 2, 2, 2,151,151, - 151,151,151,151, 2, 2,151,151, 2, 2, 2, 2,151,151,152,152, - 152,152,152,152,152,152,152,152, 2, 2, 2, 2, 2,152,113,113, - 113,113,113,113,113,113,113,113,113,113,113, 2, 2,113,113,113, - 113,113,113,113,113, 2,132,132,132,132,132,132,132,132,132,132, - 132,132, 2, 2, 2, 2,132,132, 2, 2, 2, 2,132,132, 3, 3, - 3, 3, 2, 3, 3, 3, 2, 3, 3, 2, 3, 2, 2, 3, 2, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 2, 3, - 2, 3, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 3, 2, 3, - 2, 3, 2, 3, 3, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, - 3, 3, 3, 2, 3, 2, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 2, 2, 2, 2, 2, 3, 3, 3, 2, 3, 3, 3, 2, 2, - 2, 2, 2, 2, 0, 0, 15, 0, 0, 2, 2, 2, 2, 2, 13, 2, - 2, 2, 2, 2, 2, 2, 13, 13, 13, 2, 2, 2, 2, 2, 2, 0, - 2, 2, 2, 2, 2, 2, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, - 9, 9, 9, 10, 9, 11, 12, 13, 9, 9, 9, 14, 9, 9, 15, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 16, 17, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 19, - 20, 9, 21, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 22, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 23, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 0, 0, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 24, 25, 26, 27, 28, - 29, 30, 0, 0, 31, 32, 0, 33, 0, 34, 0, 35, 0, 0, 0, 0, - 36, 37, 38, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 41, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 43, 44, 0, 45, 0, 0, 0, 0, 0, 0, - 46, 47, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 50, 51, 0, 0, 0, 52, 0, 0, - 53, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, - 55, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, - 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 58, 59, 60, 61, 62, 63, 64, 65, - 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 67, 68, 0, 69, 70, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, - 99,100,101,102,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,104, 0, 0, 0, 0, 0, 0,105,106, 0, - 107, 0, 0, 0,108, 0,109, 0,110, 0,111,112,113, 0,114, 0, - 0, 0,115, 0, 0, 0,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0,117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,118,119,120,121, 0,122,123,124, - 125,126, 0,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,128,129,130,131,132,133,134,135,136,137,138,139, - 140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155, - 156,157, 0, 0, 0,158,159,160,161, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,162,163, 0, - 0, 0, 0, 0, 0, 0,164, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,165, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,166, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,168, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0,169,170, 0, 0, 0, 0,171, - 172, 0, 0, 0,173,174,175,176,177,178,179,180,181,182,183,184, - 185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200, - 201,202,203,204,205,206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 2, 3, 4, -}; -static const uint16_t -_hb_ucd_u16[9080] = -{ - 0, 0, 1, 2, 3, 4, 5, 6, 0, 0, 7, 8, 9, 10, 11, 12, - 13, 13, 13, 14, 15, 13, 13, 16, 17, 18, 19, 20, 21, 22, 13, 23, - 13, 13, 13, 24, 25, 11, 11, 11, 11, 26, 11, 27, 28, 29, 30, 31, - 32, 32, 32, 32, 32, 32, 32, 33, 34, 35, 36, 11, 37, 38, 13, 39, - 9, 9, 9, 11, 11, 11, 13, 13, 40, 13, 13, 13, 41, 13, 13, 13, - 13, 13, 13, 42, 9, 43, 11, 11, 44, 45, 32, 46, 47, 48, 49, 50, - 51, 52, 48, 48, 53, 32, 54, 55, 48, 48, 48, 48, 48, 56, 57, 58, - 59, 60, 48, 32, 61, 48, 48, 48, 48, 48, 62, 63, 64, 48, 65, 66, - 48, 67, 68, 69, 48, 70, 71, 72, 72, 72, 48, 73, 74, 75, 76, 32, - 77, 48, 48, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, - 91, 84, 85, 92, 93, 94, 95, 96, 97, 98, 85, 99, 100, 101, 89, 102, - 103, 84, 85, 104, 105, 106, 89, 107, 108, 109, 110, 111, 112, 113, 95, 114, - 115, 116, 85, 117, 118, 119, 89, 120, 121, 116, 85, 122, 123, 124, 89, 125, - 126, 116, 48, 127, 128, 129, 89, 130, 131, 132, 48, 133, 134, 135, 95, 136, - 137, 48, 48, 138, 139, 140, 72, 72, 141, 48, 142, 143, 144, 145, 72, 72, - 146, 147, 148, 149, 150, 48, 151, 152, 153, 154, 32, 155, 156, 157, 72, 72, - 48, 48, 158, 159, 160, 161, 162, 163, 164, 165, 9, 9, 166, 11, 11, 167, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 168, 169, 48, 48, - 168, 48, 48, 170, 171, 172, 48, 48, 48, 171, 48, 48, 48, 173, 174, 175, - 48, 176, 9, 9, 9, 9, 9, 177, 178, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 179, 48, 180, 181, 48, 48, 48, 48, 182, 183, - 184, 185, 48, 186, 48, 187, 184, 188, 48, 48, 48, 189, 190, 191, 192, 193, - 194, 192, 48, 48, 195, 48, 48, 196, 197, 48, 198, 48, 48, 48, 48, 199, - 48, 200, 201, 202, 203, 48, 204, 205, 48, 48, 206, 48, 207, 208, 209, 209, - 48, 210, 48, 48, 48, 211, 212, 213, 192, 192, 214, 215, 216, 72, 72, 72, - 217, 48, 48, 218, 219, 160, 220, 221, 222, 48, 223, 64, 48, 48, 224, 225, - 48, 48, 226, 227, 228, 64, 48, 229, 230, 9, 9, 231, 232, 233, 234, 235, - 11, 11, 236, 27, 27, 27, 237, 238, 11, 239, 27, 27, 32, 32, 32, 240, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 241, 13, 13, 13, 13, 13, 13, - 242, 243, 242, 242, 243, 244, 242, 245, 246, 246, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 262, 72, 263, 264, 216, - 265, 266, 267, 268, 269, 270, 271, 271, 272, 273, 274, 209, 275, 276, 209, 277, - 278, 278, 278, 278, 278, 278, 278, 278, 279, 209, 280, 209, 209, 209, 209, 281, - 209, 282, 278, 283, 209, 284, 285, 209, 209, 209, 286, 72, 287, 72, 270, 270, - 270, 288, 209, 209, 209, 209, 289, 270, 209, 209, 209, 209, 209, 209, 209, 209, - 209, 209, 209, 290, 291, 209, 209, 292, 209, 209, 209, 209, 209, 209, 293, 209, - 209, 209, 209, 209, 209, 209, 294, 295, 270, 296, 209, 209, 297, 278, 298, 278, - 299, 300, 278, 278, 278, 301, 278, 302, 209, 209, 209, 278, 303, 209, 209, 304, - 209, 305, 209, 209, 209, 209, 209, 209, 9, 9, 306, 11, 11, 307, 308, 309, - 13, 13, 13, 13, 13, 13, 310, 311, 11, 11, 312, 48, 48, 48, 313, 314, - 48, 315, 316, 316, 316, 316, 32, 32, 317, 318, 319, 320, 321, 322, 72, 72, - 209, 323, 209, 209, 209, 209, 209, 324, 209, 209, 209, 209, 209, 325, 72, 326, - 327, 328, 329, 330, 137, 48, 48, 48, 48, 331, 178, 48, 48, 48, 48, 332, - 333, 48, 48, 137, 48, 48, 48, 48, 200, 334, 48, 48, 209, 209, 324, 48, - 209, 335, 336, 209, 337, 338, 209, 209, 336, 209, 209, 338, 209, 209, 209, 209, - 48, 48, 48, 48, 209, 209, 209, 209, 48, 48, 48, 48, 48, 48, 48, 151, - 48, 339, 48, 48, 48, 48, 48, 48, 151, 209, 209, 209, 286, 48, 48, 229, - 340, 48, 341, 72, 13, 13, 342, 343, 13, 344, 48, 48, 48, 48, 345, 346, - 31, 347, 348, 349, 13, 13, 13, 350, 351, 352, 353, 354, 355, 72, 72, 356, - 357, 48, 358, 359, 48, 48, 48, 360, 361, 48, 48, 362, 363, 192, 32, 364, - 64, 48, 365, 48, 366, 367, 48, 151, 77, 48, 48, 368, 369, 370, 371, 372, - 48, 48, 373, 374, 375, 376, 48, 377, 48, 48, 48, 378, 379, 380, 381, 382, - 383, 384, 316, 11, 11, 385, 386, 11, 11, 11, 11, 11, 48, 48, 387, 192, - 48, 48, 388, 48, 389, 48, 48, 206, 390, 390, 390, 390, 390, 390, 390, 390, - 391, 391, 391, 391, 391, 391, 391, 391, 48, 48, 48, 48, 48, 48, 204, 48, - 48, 48, 48, 48, 48, 207, 72, 72, 392, 393, 394, 395, 396, 48, 48, 48, - 48, 48, 48, 397, 398, 399, 48, 48, 48, 48, 48, 400, 72, 48, 48, 48, - 48, 401, 48, 48, 74, 72, 72, 402, 32, 403, 32, 404, 405, 406, 407, 73, - 48, 48, 48, 48, 48, 48, 48, 408, 409, 2, 3, 4, 5, 410, 411, 412, - 48, 413, 48, 200, 414, 415, 416, 417, 418, 48, 172, 419, 204, 204, 72, 72, - 48, 48, 48, 48, 48, 48, 48, 71, 420, 270, 270, 421, 271, 271, 271, 422, - 423, 424, 425, 72, 72, 209, 209, 426, 72, 72, 72, 72, 72, 72, 72, 72, - 48, 151, 48, 48, 48, 101, 427, 428, 48, 48, 429, 48, 430, 48, 48, 431, - 48, 432, 48, 48, 433, 434, 72, 72, 9, 9, 435, 11, 11, 48, 48, 48, - 48, 204, 192, 9, 9, 436, 11, 437, 48, 48, 74, 48, 48, 48, 438, 72, - 48, 48, 48, 315, 48, 199, 74, 72, 439, 48, 48, 440, 48, 441, 48, 442, - 48, 200, 443, 72, 72, 72, 48, 444, 48, 445, 48, 446, 72, 72, 72, 72, - 48, 48, 48, 447, 270, 448, 270, 270, 449, 450, 48, 451, 452, 453, 48, 454, - 48, 455, 72, 72, 456, 48, 457, 458, 48, 48, 48, 459, 48, 460, 48, 461, - 48, 462, 463, 72, 72, 72, 72, 72, 48, 48, 48, 48, 196, 72, 72, 72, - 9, 9, 9, 464, 11, 11, 11, 465, 48, 48, 466, 192, 72, 72, 72, 72, - 72, 72, 72, 72, 72, 72, 270, 467, 48, 48, 468, 469, 72, 72, 72, 72, - 48, 455, 470, 48, 62, 471, 72, 72, 72, 72, 72, 48, 472, 72, 48, 315, - 473, 48, 48, 474, 475, 448, 476, 477, 222, 48, 48, 478, 479, 48, 196, 192, - 480, 48, 481, 482, 483, 48, 48, 484, 222, 48, 48, 485, 486, 487, 488, 489, - 48, 98, 490, 491, 72, 72, 72, 72, 492, 493, 494, 48, 48, 495, 496, 192, - 497, 84, 85, 498, 499, 500, 501, 502, 48, 48, 48, 503, 504, 505, 469, 72, - 48, 48, 48, 506, 507, 192, 72, 72, 48, 48, 508, 509, 510, 511, 72, 72, - 48, 48, 48, 512, 513, 192, 514, 72, 48, 48, 515, 516, 192, 72, 72, 72, - 48, 173, 517, 518, 72, 72, 72, 72, 48, 48, 490, 519, 72, 72, 72, 72, - 72, 72, 9, 9, 11, 11, 148, 520, 521, 522, 48, 523, 524, 192, 72, 72, - 72, 72, 525, 48, 48, 526, 527, 72, 528, 48, 48, 529, 530, 531, 48, 48, - 532, 533, 534, 72, 48, 48, 48, 196, 85, 48, 508, 535, 536, 148, 175, 537, - 48, 538, 539, 540, 72, 72, 72, 72, 541, 48, 48, 542, 543, 192, 544, 48, - 545, 546, 192, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 48, 547, - 72, 72, 72, 101, 270, 548, 549, 550, 48, 207, 72, 72, 72, 72, 72, 72, - 271, 271, 271, 271, 271, 271, 551, 552, 48, 48, 48, 48, 388, 72, 72, 72, - 48, 48, 200, 553, 72, 72, 72, 72, 48, 48, 48, 48, 315, 72, 72, 72, - 48, 48, 48, 196, 48, 200, 370, 72, 72, 72, 72, 72, 72, 48, 204, 554, - 48, 48, 48, 555, 556, 557, 558, 559, 48, 72, 72, 72, 72, 72, 72, 72, - 72, 72, 72, 72, 9, 9, 11, 11, 270, 560, 72, 72, 72, 72, 72, 72, - 48, 48, 48, 48, 561, 562, 563, 563, 564, 565, 72, 72, 72, 72, 566, 567, - 48, 48, 48, 48, 48, 48, 48, 74, 48, 48, 48, 48, 48, 199, 72, 72, - 196, 72, 72, 72, 72, 72, 72, 72, 48, 200, 72, 72, 72, 568, 569, 48, - 48, 48, 48, 48, 48, 48, 48, 206, 48, 48, 48, 48, 48, 48, 71, 151, - 196, 570, 571, 72, 72, 72, 72, 72, 209, 209, 209, 209, 209, 209, 209, 325, - 209, 209, 572, 209, 209, 209, 573, 574, 575, 209, 576, 209, 209, 209, 577, 72, - 209, 209, 209, 209, 578, 72, 72, 72, 72, 72, 72, 72, 72, 72, 270, 579, - 209, 209, 209, 209, 209, 286, 270, 452, 9, 580, 11, 581, 582, 583, 242, 9, - 584, 585, 586, 587, 588, 9, 580, 11, 589, 590, 11, 591, 592, 593, 594, 9, - 595, 11, 9, 580, 11, 581, 582, 11, 242, 9, 584, 594, 9, 595, 11, 9, - 580, 11, 596, 9, 597, 598, 599, 600, 11, 601, 9, 602, 603, 604, 605, 11, - 606, 9, 607, 11, 608, 609, 609, 609, 32, 32, 32, 610, 32, 32, 611, 612, - 613, 614, 45, 72, 72, 72, 72, 72, 615, 616, 617, 72, 72, 72, 72, 72, - 48, 48, 151, 618, 619, 72, 72, 72, 72, 72, 72, 72, 48, 48, 620, 621, - 48, 48, 48, 48, 622, 623, 72, 72, 9, 9, 584, 11, 624, 370, 72, 72, - 72, 72, 72, 72, 72, 72, 72, 488, 270, 270, 625, 626, 72, 72, 72, 72, - 488, 270, 627, 628, 72, 72, 72, 72, 629, 48, 630, 631, 632, 633, 634, 635, - 636, 206, 637, 206, 72, 72, 72, 638, 209, 209, 326, 209, 209, 209, 209, 209, - 209, 324, 335, 639, 639, 639, 209, 325, 640, 209, 209, 209, 209, 209, 209, 209, - 209, 209, 641, 72, 72, 72, 642, 209, 643, 209, 209, 326, 577, 644, 325, 72, - 209, 209, 209, 209, 209, 209, 209, 645, 209, 209, 209, 209, 209, 646, 424, 424, - 209, 209, 209, 209, 209, 209, 209, 324, 209, 209, 209, 209, 209, 577, 326, 72, - 326, 209, 209, 209, 646, 176, 209, 209, 646, 209, 641, 644, 72, 72, 72, 72, - 209, 209, 209, 209, 209, 209, 209, 647, 209, 209, 209, 209, 648, 209, 209, 209, - 209, 209, 209, 209, 209, 324, 641, 649, 286, 209, 577, 286, 643, 286, 72, 72, - 209, 650, 209, 209, 287, 72, 72, 192, 48, 48, 48, 48, 48, 204, 72, 72, - 48, 48, 48, 205, 48, 48, 48, 48, 48, 204, 48, 48, 48, 48, 48, 48, - 48, 48, 469, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 101, 72, - 48, 204, 72, 72, 72, 72, 72, 72, 48, 48, 48, 48, 71, 72, 72, 72, - 651, 72, 652, 652, 652, 652, 652, 652, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 72, 391, 391, 391, 391, 391, 391, 391, 653, - 391, 391, 391, 391, 391, 391, 391, 654, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 2, 2, 3, 1, 2, 2, 3, 0, 0, 0, 0, 0, 4, 0, 4, - 2, 2, 5, 2, 2, 2, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, - 0, 0, 0, 0, 7, 8, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 10, 11, 12, 13, 14, 14, 15, 14, 14, 14, - 14, 14, 14, 14, 16, 17, 14, 14, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 19, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 20, 21, - 21, 21, 22, 20, 21, 21, 21, 21, 21, 23, 24, 25, 25, 25, 25, 25, - 25, 26, 25, 25, 25, 27, 28, 26, 29, 30, 31, 32, 31, 31, 31, 31, - 33, 34, 35, 31, 31, 31, 36, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 29, 31, 31, 31, 31, 37, 38, 37, 37, 37, 37, 37, 37, - 37, 39, 31, 31, 31, 31, 31, 31, 40, 40, 40, 40, 40, 40, 41, 26, - 42, 42, 42, 42, 42, 42, 42, 43, 44, 44, 44, 44, 44, 45, 44, 46, - 47, 47, 47, 48, 37, 49, 26, 26, 26, 26, 26, 26, 31, 31, 50, 31, - 31, 26, 51, 31, 52, 31, 31, 31, 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 54, 53, 55, 53, 53, 53, 56, 57, 58, 59, 59, 60, 61, 62, - 57, 63, 64, 65, 66, 59, 59, 67, 68, 69, 70, 71, 71, 72, 73, 74, - 69, 75, 76, 77, 78, 71, 79, 26, 80, 81, 82, 83, 83, 84, 85, 86, - 81, 87, 88, 26, 89, 83, 90, 91, 92, 93, 94, 95, 95, 96, 97, 98, - 93, 99, 100, 101, 102, 95, 95, 26, 103, 104, 105, 106, 107, 104, 108, 109, - 104, 105, 110, 26, 111, 108, 108, 112, 113, 114, 115, 113, 113, 115, 113, 116, - 114, 117, 118, 119, 120, 113, 121, 113, 122, 123, 124, 122, 122, 124, 125, 126, - 123, 127, 128, 129, 130, 122, 131, 26, 132, 133, 134, 132, 132, 132, 132, 132, - 133, 134, 135, 132, 136, 132, 132, 132, 137, 138, 139, 140, 138, 138, 141, 142, - 139, 143, 144, 138, 145, 138, 146, 26, 147, 148, 148, 148, 148, 148, 148, 149, - 148, 148, 148, 150, 26, 26, 26, 26, 151, 152, 153, 153, 154, 153, 153, 155, - 156, 155, 153, 157, 26, 26, 26, 26, 158, 158, 158, 158, 158, 158, 158, 158, - 158, 159, 158, 158, 158, 160, 159, 158, 158, 158, 158, 159, 158, 158, 158, 161, - 158, 161, 162, 163, 26, 26, 26, 26, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 165, 165, 165, 165, - 166, 167, 165, 165, 165, 165, 165, 168, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 171, 172, 171, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 171, 172, - 171, 170, 172, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, - 170, 170, 170, 173, 170, 170, 170, 174, 170, 170, 170, 175, 176, 176, 176, 176, - 176, 176, 176, 176, 176, 176, 177, 177, 178, 178, 178, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 178, 178, 178, 179, 179, 179, 180, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 182, 181, 183, 184, 185, 186, 26, 187, 187, 188, 26, - 189, 189, 190, 26, 191, 192, 193, 26, 194, 194, 194, 194, 194, 194, 194, 194, - 194, 194, 194, 195, 194, 196, 194, 196, 197, 198, 199, 200, 199, 199, 199, 199, - 199, 199, 199, 199, 199, 199, 199, 201, 199, 199, 199, 199, 199, 202, 178, 178, - 178, 178, 178, 178, 178, 178, 203, 26, 204, 204, 204, 205, 204, 206, 204, 206, - 207, 204, 208, 208, 208, 209, 210, 26, 211, 211, 211, 211, 211, 212, 211, 211, - 211, 213, 211, 214, 194, 194, 194, 194, 215, 215, 215, 216, 217, 217, 217, 217, - 217, 217, 217, 218, 217, 217, 217, 219, 217, 220, 217, 220, 217, 221, 9, 9, - 222, 26, 26, 26, 26, 26, 26, 26, 223, 223, 223, 223, 223, 223, 223, 223, - 223, 224, 223, 223, 223, 223, 223, 225, 226, 226, 226, 226, 226, 226, 226, 226, - 227, 227, 227, 227, 227, 227, 228, 229, 230, 230, 230, 230, 230, 230, 230, 231, - 230, 232, 233, 233, 233, 233, 233, 233, 18, 234, 165, 165, 165, 165, 165, 235, - 226, 26, 236, 9, 237, 238, 239, 240, 2, 2, 2, 2, 241, 242, 2, 2, - 2, 2, 2, 243, 244, 245, 2, 246, 2, 2, 2, 2, 2, 2, 2, 247, - 9, 9, 9, 9, 9, 9, 9, 248, 14, 14, 249, 249, 14, 14, 14, 14, - 249, 249, 14, 250, 14, 14, 14, 249, 14, 14, 14, 14, 14, 14, 251, 14, - 251, 14, 252, 253, 14, 14, 254, 255, 0, 256, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 257, 0, 258, 259, 0, 260, 2, 261, 0, 0, 0, 0, - 26, 26, 9, 9, 9, 9, 222, 26, 0, 0, 0, 0, 262, 263, 4, 0, - 0, 264, 0, 0, 2, 2, 2, 2, 2, 265, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 26, 26, 26, - 0, 266, 26, 26, 0, 0, 0, 0, 267, 267, 267, 267, 267, 267, 267, 267, - 267, 267, 267, 267, 267, 267, 267, 267, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 268, 0, 0, 0, 269, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 270, 270, 270, 270, 270, 271, 270, 270, - 270, 270, 270, 271, 2, 2, 2, 2, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 272, 273, 165, 165, 165, 165, 166, 167, 274, 274, - 274, 274, 274, 274, 274, 275, 276, 275, 170, 170, 172, 26, 172, 172, 172, 172, - 172, 172, 172, 172, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 266, 26, 26, 26, 26, 26, 277, 277, 277, 278, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 279, 26, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 280, 26, 26, 26, 0, 281, 282, 0, 0, 0, 283, 284, 0, 285, - 286, 287, 287, 287, 287, 287, 287, 287, 287, 287, 288, 289, 290, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 292, 293, 294, 294, 294, 294, 294, 295, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 296, 0, 0, 294, 294, 294, 294, - 0, 0, 0, 0, 281, 26, 291, 291, 169, 169, 169, 296, 0, 0, 0, 0, - 0, 0, 0, 0, 169, 169, 169, 297, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 291, 291, 291, 291, 291, 298, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 0, 0, 0, 0, 0, 277, 277, 277, 277, 277, 277, 277, 277, - 0, 0, 0, 0, 0, 0, 0, 0, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 299, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 300, 301, 300, 300, 300, 300, 300, 300, - 302, 26, 303, 303, 303, 303, 303, 303, 304, 304, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 305, 26, 26, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 306, 306, 306, 306, - 306, 306, 306, 306, 306, 306, 306, 26, 0, 0, 0, 0, 307, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 308, 2, 2, 2, 2, 2, 2, - 309, 310, 26, 26, 26, 26, 311, 2, 312, 312, 312, 312, 312, 313, 0, 314, - 315, 315, 315, 315, 315, 315, 315, 26, 316, 316, 316, 316, 316, 316, 316, 316, - 317, 318, 316, 319, 53, 53, 53, 53, 320, 320, 320, 320, 320, 321, 322, 322, - 322, 322, 323, 324, 169, 169, 169, 325, 326, 326, 326, 326, 326, 326, 326, 326, - 326, 327, 326, 328, 164, 164, 164, 329, 330, 330, 330, 330, 330, 330, 331, 26, - 330, 332, 330, 333, 164, 164, 164, 164, 334, 334, 334, 334, 334, 334, 334, 334, - 335, 26, 26, 336, 337, 337, 338, 26, 339, 339, 339, 26, 172, 172, 2, 2, - 2, 2, 2, 340, 341, 342, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, - 337, 337, 337, 337, 337, 343, 337, 344, 169, 169, 169, 169, 345, 26, 169, 169, - 296, 346, 169, 169, 169, 169, 169, 345, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 280, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 347, 26, 26, 26, 26, 348, 26, 349, 350, 25, 25, 351, 352, - 353, 25, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 354, 26, 51, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 355, - 26, 26, 31, 31, 31, 31, 31, 31, 31, 31, 356, 31, 31, 31, 31, 31, - 31, 26, 26, 26, 26, 26, 31, 357, 9, 9, 0, 314, 9, 358, 0, 0, - 0, 0, 359, 0, 260, 281, 50, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 360, 361, 0, 0, 0, 1, 2, 2, 3, - 1, 2, 2, 3, 362, 291, 290, 291, 291, 291, 291, 363, 169, 169, 169, 296, - 364, 364, 364, 365, 260, 260, 26, 366, 367, 368, 367, 367, 369, 367, 367, 370, - 367, 371, 367, 371, 26, 26, 26, 26, 367, 367, 367, 367, 367, 367, 367, 367, - 367, 367, 367, 367, 367, 367, 367, 372, 373, 0, 0, 0, 0, 0, 374, 0, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 255, 0, 375, 376, 26, 26, 26, - 26, 26, 0, 0, 0, 0, 0, 377, 378, 378, 378, 379, 380, 380, 380, 380, - 380, 380, 381, 26, 382, 0, 0, 281, 383, 383, 383, 383, 384, 385, 386, 386, - 386, 387, 388, 388, 388, 388, 388, 389, 390, 390, 390, 391, 392, 392, 392, 392, - 393, 392, 394, 26, 26, 26, 26, 26, 395, 395, 395, 395, 395, 395, 395, 395, - 395, 395, 396, 396, 396, 396, 396, 396, 397, 397, 397, 398, 397, 399, 400, 400, - 400, 400, 401, 400, 400, 400, 400, 401, 402, 402, 402, 402, 402, 26, 403, 403, - 403, 403, 403, 403, 404, 405, 26, 26, 406, 406, 406, 406, 406, 406, 406, 406, - 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 407, 26, - 406, 406, 408, 26, 406, 26, 26, 26, 409, 410, 411, 411, 411, 411, 412, 413, - 414, 414, 415, 414, 416, 416, 416, 416, 417, 417, 417, 418, 419, 417, 26, 26, - 26, 26, 26, 26, 420, 420, 421, 422, 423, 423, 423, 424, 425, 425, 425, 426, - 26, 26, 26, 26, 26, 26, 26, 26, 427, 427, 427, 427, 428, 428, 428, 429, - 428, 428, 430, 428, 428, 428, 428, 428, 431, 432, 433, 434, 435, 435, 436, 437, - 435, 438, 435, 438, 439, 439, 439, 439, 440, 440, 440, 440, 26, 26, 26, 26, - 441, 441, 441, 441, 442, 443, 442, 26, 444, 444, 444, 444, 444, 444, 445, 446, - 447, 447, 448, 447, 449, 449, 450, 449, 451, 451, 452, 453, 26, 454, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 455, 455, 455, 455, 455, 455, 455, 455, - 455, 456, 26, 26, 26, 26, 26, 26, 457, 457, 457, 457, 457, 457, 458, 26, - 457, 457, 457, 457, 457, 457, 458, 459, 460, 460, 460, 460, 460, 26, 460, 461, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 31, 31, 31, 462, 463, 463, 463, 463, 463, 464, 465, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 466, 466, 466, 466, 466, 26, 467, 467, - 467, 467, 467, 468, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 469, 469, - 469, 470, 26, 26, 471, 471, 472, 26, 473, 473, 473, 473, 473, 473, 473, 473, - 473, 474, 475, 473, 473, 473, 26, 476, 477, 477, 477, 477, 477, 477, 477, 477, - 478, 479, 480, 480, 480, 481, 480, 482, 483, 483, 483, 483, 483, 483, 484, 483, - 483, 26, 485, 485, 485, 485, 486, 26, 487, 487, 487, 487, 487, 487, 487, 487, - 487, 487, 487, 487, 488, 138, 489, 26, 490, 490, 491, 490, 490, 490, 490, 492, - 26, 26, 26, 26, 26, 26, 26, 26, 493, 494, 495, 496, 495, 497, 498, 498, - 498, 498, 498, 498, 498, 499, 498, 500, 501, 502, 503, 504, 504, 505, 506, 507, - 502, 508, 509, 510, 511, 512, 512, 26, 513, 513, 513, 513, 513, 513, 513, 513, - 513, 513, 513, 514, 515, 26, 26, 26, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 26, 516, 517, 26, 26, 26, 26, 518, 518, 518, 518, 518, 518, 519, 518, - 518, 518, 518, 519, 26, 26, 26, 26, 520, 520, 520, 520, 520, 520, 520, 520, - 521, 26, 520, 522, 199, 523, 26, 26, 524, 524, 524, 524, 524, 524, 524, 525, - 524, 526, 26, 26, 26, 26, 26, 26, 527, 527, 527, 528, 527, 529, 527, 527, - 26, 26, 26, 26, 26, 26, 26, 26, 530, 530, 530, 530, 530, 530, 530, 531, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 532, 532, 532, 532, - 532, 532, 532, 532, 532, 532, 533, 534, 535, 536, 537, 538, 538, 538, 539, 540, - 535, 26, 538, 541, 26, 26, 26, 26, 26, 26, 26, 26, 542, 543, 542, 542, - 542, 542, 542, 543, 544, 26, 26, 26, 545, 545, 545, 545, 545, 545, 545, 545, - 545, 26, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 547, 26, 26, 26, - 548, 548, 548, 548, 548, 548, 548, 549, 550, 551, 550, 550, 550, 550, 552, 550, - 553, 26, 550, 550, 550, 554, 555, 555, 555, 555, 556, 555, 555, 557, 558, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 559, 560, 561, 561, 561, 561, 559, 562, - 561, 26, 561, 563, 564, 565, 566, 566, 566, 567, 568, 569, 566, 570, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 571, 571, 571, 572, 26, 26, 26, 26, 26, 26, 573, 26, - 108, 108, 108, 108, 108, 108, 574, 575, 576, 576, 576, 576, 576, 576, 576, 576, - 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 577, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 576, 576, 576, 576, 576, 576, 576, 576, - 576, 576, 576, 576, 576, 578, 579, 26, 576, 576, 576, 576, 576, 576, 576, 576, - 580, 26, 26, 26, 26, 26, 26, 26, 581, 581, 581, 581, 581, 581, 581, 581, - 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 582, 581, 583, - 26, 26, 26, 26, 26, 26, 26, 26, 584, 584, 584, 584, 584, 584, 584, 584, - 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, - 585, 26, 26, 26, 26, 26, 26, 26, 306, 306, 306, 306, 306, 306, 306, 306, - 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 586, - 587, 587, 587, 588, 587, 589, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 590, 590, 590, 591, 591, 26, 592, 592, 592, 592, 592, 592, 592, 592, - 593, 26, 592, 594, 594, 592, 592, 595, 592, 592, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 597, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 598, 598, 598, 598, 598, 598, 598, 600, 598, 598, 26, 26, 26, 26, - 26, 26, 26, 26, 601, 26, 347, 26, 602, 602, 602, 602, 602, 602, 602, 602, - 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, - 602, 602, 602, 602, 602, 602, 602, 26, 603, 603, 603, 603, 603, 603, 603, 603, - 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, - 603, 603, 604, 26, 26, 26, 26, 26, 602, 605, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 606, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 288, 26, 26, 26, 26, - 26, 26, 607, 26, 608, 26, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, - 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, - 609, 609, 609, 609, 609, 609, 609, 610, 611, 611, 611, 611, 611, 611, 611, 611, - 611, 611, 611, 611, 611, 612, 611, 613, 611, 614, 611, 615, 281, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 616, 26, 0, 0, 0, 0, 260, 361, 0, 0, - 0, 0, 0, 0, 617, 618, 0, 619, 620, 621, 0, 0, 0, 622, 0, 0, - 0, 0, 0, 0, 0, 623, 26, 26, 14, 14, 14, 14, 14, 14, 14, 14, - 249, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 0, 0, 281, 26, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 260, 26, 0, 0, 0, 623, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 257, 624, 625, 0, 626, - 627, 0, 0, 0, 0, 0, 0, 0, 269, 628, 257, 257, 0, 0, 0, 629, - 630, 631, 632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 268, 0, 0, 0, 0, 0, 0, 633, 633, 633, 633, 633, 633, 633, 633, - 633, 633, 633, 633, 633, 633, 633, 633, 633, 634, 26, 635, 636, 633, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 271, 270, 270, 637, 638, 639, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 640, 640, 640, 640, 640, 641, 640, 642, - 640, 643, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 644, 644, 644, 644, 644, 644, 644, 645, 646, 646, 646, 646, 646, 646, 646, 646, - 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, - 647, 646, 648, 26, 26, 26, 26, 26, 649, 649, 649, 649, 649, 649, 649, 649, - 649, 650, 649, 651, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 361, 0, 0, 0, 0, 0, 0, 0, 375, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 361, 0, 0, 0, 0, 0, 0, 616, - 26, 26, 26, 26, 26, 26, 26, 26, 652, 31, 31, 31, 653, 654, 655, 656, - 657, 658, 653, 659, 653, 655, 655, 660, 31, 661, 31, 662, 663, 661, 31, 662, - 26, 26, 26, 26, 26, 26, 354, 26, 0, 0, 0, 0, 0, 281, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 26, 0, 260, 361, 0, - 361, 0, 361, 0, 0, 0, 616, 26, 0, 0, 0, 0, 0, 616, 26, 26, - 26, 26, 26, 26, 664, 0, 0, 0, 665, 26, 0, 0, 0, 0, 0, 281, - 0, 623, 314, 26, 616, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 26, 0, 375, 0, 375, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 281, 26, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 623, 0, 281, 26, 26, 0, 281, 0, 0, 0, 0, 0, 0, - 0, 26, 0, 314, 0, 0, 0, 0, 0, 26, 0, 0, 0, 616, 314, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 632, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 281, 26, 0, 616, 375, 266, 260, 26, 0, 0, 0, 623, 260, 26, - 266, 26, 260, 26, 26, 26, 26, 26, 0, 0, 359, 0, 0, 0, 0, 0, - 0, 266, 26, 26, 26, 26, 0, 314, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 280, 26, 26, 26, 26, 277, 277, 277, 277, 277, 277, 299, 26, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 280, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 347, 26, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 666, 26, 26, 26, 277, 277, 277, 280, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 667, 26, 26, 26, 26, 26, 26, 668, 26, 26, 26, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 939, 940, 941, 942, 946, 948, 0, 962, - 969, 970, 971, 976,1001,1002,1003,1008, 0,1033,1040,1041,1042,1043,1047, 0, - 0,1080,1081,1082,1086,1110, 0, 0,1124,1125,1126,1127,1131,1133, 0,1147, - 1154,1155,1156,1161,1187,1188,1189,1193, 0,1219,1226,1227,1228,1229,1233, 0, - 0,1267,1268,1269,1273,1298, 0,1303, 943,1128, 944,1129, 954,1139, 958,1143, - 959,1144, 960,1145, 961,1146, 964,1149, 0, 0, 973,1158, 974,1159, 975,1160, - 983,1168, 978,1163, 988,1173, 990,1175, 991,1176, 993,1178, 994,1179, 0, 0, - 1004,1190,1005,1191,1006,1192,1014,1199,1007, 0, 0, 0,1016,1201,1020,1206, - 0,1022,1208,1025,1211,1023,1209, 0, 0, 0, 0,1032,1218,1037,1223,1035, - 1221, 0, 0, 0,1044,1230,1045,1231,1049,1235, 0, 0,1058,1244,1064,1250, - 1060,1246,1066,1252,1067,1253,1072,1258,1069,1255,1077,1264,1074,1261, 0, 0, - 1083,1270,1084,1271,1085,1272,1088,1275,1089,1276,1096,1283,1103,1290,1111,1299, - 1115,1118,1307,1120,1309,1121,1310, 0,1053,1239, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,1093,1280, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 949,1134,1010,1195,1050,1236,1090,1277,1341,1368,1340, - 1367,1342,1369,1339,1366, 0,1320,1347,1418,1419,1323,1350, 0, 0, 992,1177, - 1018,1204,1055,1241,1416,1417,1415,1424,1202, 0, 0, 0, 987,1172, 0, 0, - 1031,1217,1321,1348,1322,1349,1338,1365, 950,1135, 951,1136, 979,1164, 980,1165, - 1011,1196,1012,1197,1051,1237,1052,1238,1061,1247,1062,1248,1091,1278,1092,1279, - 1071,1257,1076,1263, 0, 0, 997,1182, 0, 0, 0, 0, 0, 0, 945,1130, - 982,1167,1337,1364,1335,1362,1046,1232,1422,1423,1113,1301, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 8, 9, 0, 10,1425, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,1314,1427, 5, - 1434,1438,1443, 0,1450, 0,1455,1461,1514, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,1446,1458,1468,1476,1480,1486,1517, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,1489,1503,1494,1500,1508, 0, 0, 0, 0,1520,1521, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,1526,1528, 0,1525, 0, 0, 0,1522, - 0, 0, 0, 0,1536,1532,1539, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0,1534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0,1556, 0, 0, 0, 0, 0, 0,1548,1550, 0,1547, 0, 0, 0,1567, - 0, 0, 0, 0,1558,1554,1561, 0, 0, 0, 0, 0, 0, 0,1568,1569, - 0, 0, 0, 0, 0, 0, 0, 0, 0,1529,1551, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,1523,1545,1524,1546, 0, 0,1527,1549, - 0, 0,1570,1571,1530,1552,1531,1553, 0, 0,1533,1555,1535,1557,1537,1559, - 0, 0,1572,1573,1544,1566,1538,1560,1540,1562,1541,1563,1542,1564, 0, 0, - 1543,1565, 0, 0, 0, 0, 0, 0, 0, 0,1606,1607,1609,1608,1610, 0, - 0, 0, 0, 0, 0, 0, 0, 0,1613, 0,1611, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1612, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0,1620, 0, 0, 0, 0, 0, 0, 0,1623, 0, 0,1624, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1614,1615,1616,1617,1618,1619,1621,1622, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,1628,1629, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,1625,1626, 0,1627, 0, 0, 0,1634, 0, 0,1635, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0,1630,1631,1632, 0, 0,1633, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1639, 0, 0,1638,1640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,1636,1637, 0, 0, 0, 0, 0, 0,1641, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,1642,1644,1643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1645, 0, 0, 0, 0, 0, 0, 0,1646, 0, 0, 0, 0, 0, 0,1648, - 1649, 0,1647,1650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,1651,1653,1652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,1654, 0,1655,1657,1656, 0, 0, 0, 0,1659, 0, 0, 0, 0, - 0, 0, 0, 0, 0,1660, 0, 0, 0, 0,1661, 0, 0, 0, 0,1662, - 0, 0, 0, 0,1663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0,1658, 0, 0, 0, 0, 0, 0, 0, 0, 0,1664, 0,1665,1673, 0, - 1674, 0, 0, 0, 0, 0, 0, 0, 0,1666, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1668, 0, 0, 0, 0, - 0, 0, 0, 0, 0,1669, 0, 0, 0, 0,1670, 0, 0, 0, 0,1671, - 0, 0, 0, 0,1672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0,1667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1675, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1676, 0, - 1677, 0,1678, 0,1679, 0,1680, 0, 0, 0,1681, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,1682, 0,1683, 0, 0,1684,1685, 0,1686, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 953,1138, 955,1140, 956,1141, 957,1142, - 1324,1351, 963,1148, 965,1150, 968,1153, 966,1151, 967,1152,1378,1380,1379,1381, - 984,1169, 985,1170,1420,1421, 986,1171, 989,1174, 995,1180, 998,1183, 996,1181, - 999,1184,1000,1185,1015,1200,1329,1356,1017,1203,1019,1205,1021,1207,1024,1210, - 1687,1688,1027,1213,1026,1212,1028,1214,1029,1215,1030,1216,1034,1220,1036,1222, - 1039,1225,1038,1224,1334,1361,1336,1363,1382,1384,1383,1385,1056,1242,1057,1243, - 1059,1245,1063,1249,1689,1690,1065,1251,1068,1254,1070,1256,1386,1387,1388,1389, - 1691,1692,1073,1259,1075,1262,1079,1266,1078,1265,1095,1282,1098,1285,1097,1284, - 1390,1391,1392,1393,1099,1286,1100,1287,1101,1288,1102,1289,1105,1292,1104,1291, - 1106,1294,1107,1295,1108,1296,1114,1302,1119,1308,1122,1311,1123,1312,1186,1260, - 1293,1305, 0,1394, 0, 0, 0, 0, 952,1137, 947,1132,1317,1344,1316,1343, - 1319,1346,1318,1345,1693,1695,1371,1375,1370,1374,1373,1377,1372,1376,1694,1696, - 981,1166, 977,1162, 972,1157,1326,1353,1325,1352,1328,1355,1327,1354,1697,1698, - 1009,1194,1013,1198,1054,1240,1048,1234,1331,1358,1330,1357,1333,1360,1332,1359, - 1699,1700,1396,1401,1395,1400,1398,1403,1397,1402,1399,1404,1094,1281,1087,1274, - 1406,1411,1405,1410,1408,1413,1407,1412,1409,1414,1109,1297,1117,1306,1116,1304, - 1112,1300, 0, 0, 0, 0, 0, 0,1471,1472,1701,1705,1702,1706,1703,1707, - 1430,1431,1715,1719,1716,1720,1717,1721,1477,1478,1729,1731,1730,1732, 0, 0, - 1435,1436,1733,1735,1734,1736, 0, 0,1481,1482,1737,1741,1738,1742,1739,1743, - 1439,1440,1751,1755,1752,1756,1753,1757,1490,1491,1765,1768,1766,1769,1767,1770, - 1447,1448,1771,1774,1772,1775,1773,1776,1495,1496,1777,1779,1778,1780, 0, 0, - 1451,1452,1781,1783,1782,1784, 0, 0,1504,1505,1785,1788,1786,1789,1787,1790, - 0,1459, 0,1791, 0,1792, 0,1793,1509,1510,1794,1798,1795,1799,1796,1800, - 1462,1463,1808,1812,1809,1813,1810,1814,1467, 21,1475, 22,1479, 23,1485, 24, - 1493, 27,1499, 28,1507, 29, 0, 0,1704,1708,1709,1710,1711,1712,1713,1714, - 1718,1722,1723,1724,1725,1726,1727,1728,1740,1744,1745,1746,1747,1748,1749,1750, - 1754,1758,1759,1760,1761,1762,1763,1764,1797,1801,1802,1803,1804,1805,1806,1807, - 1811,1815,1816,1817,1818,1819,1820,1821,1470,1469,1822,1474,1465, 0,1473,1825, - 1429,1428,1426, 12,1432, 0, 26, 0, 0,1315,1823,1484,1466, 0,1483,1829, - 1433, 13,1437, 14,1441,1826,1827,1828,1488,1487,1513, 19, 0, 0,1492,1515, - 1445,1444,1442, 15, 0,1831,1832,1833,1502,1501,1516, 25,1497,1498,1506,1518, - 1457,1456,1454, 17,1453,1313, 11, 3, 0, 0,1824,1512,1519, 0,1511,1830, - 1449, 16,1460, 18,1464, 4, 0, 0, 30, 31, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, - 0, 0, 2, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,1834,1835, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,1836, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,1837,1839,1838, 0, 0, 0, 0,1840, 0, 0, 0, - 0,1841, 0, 0,1842, 0, 0, 0, 0, 0, 0, 0,1843, 0,1844, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0,1845, 0, 0,1846, 0, 0,1847, - 0,1848, 0, 0, 0, 0, 0, 0, 937, 0,1850, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,1849, 936, 938,1851,1852, 0, 0,1853,1854, 0, 0, - 1855,1856, 0, 0, 0, 0, 0, 0,1857,1858, 0, 0,1861,1862, 0, 0, - 1863,1864, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,1867,1868,1869,1870,1859,1860,1865,1866, 0, 0, 0, 0, - 0, 0,1871,1872,1873,1874, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 32, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,1875, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,1877, 0,1878, 0,1879, 0,1880, 0,1881, 0,1882, 0, - 1883, 0,1884, 0,1885, 0,1886, 0,1887, 0,1888, 0, 0,1889, 0,1890, - 0,1891, 0, 0, 0, 0, 0, 0,1892,1893, 0,1894,1895, 0,1896,1897, - 0,1898,1899, 0,1900,1901, 0, 0, 0, 0, 0, 0,1876, 0, 0, 0, - 0, 0, 0, 0, 0, 0,1902, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,1904, 0,1905, 0,1906, 0,1907, 0,1908, 0,1909, 0, - 1910, 0,1911, 0,1912, 0,1913, 0,1914, 0,1915, 0, 0,1916, 0,1917, - 0,1918, 0, 0, 0, 0, 0, 0,1919,1920, 0,1921,1922, 0,1923,1924, - 0,1925,1926, 0,1927,1928, 0, 0, 0, 0, 0, 0,1903, 0, 0,1929, - 1930,1931,1932, 0, 0, 0,1933, 0, 710, 385, 724, 715, 455, 103, 186, 825, - 825, 242, 751, 205, 241, 336, 524, 601, 663, 676, 688, 738, 411, 434, 474, 500, - 649, 746, 799, 108, 180, 416, 482, 662, 810, 275, 462, 658, 692, 344, 618, 679, - 293, 388, 440, 492, 740, 116, 146, 168, 368, 414, 481, 527, 606, 660, 665, 722, - 781, 803, 809, 538, 553, 588, 642, 758, 811, 701, 233, 299, 573, 612, 487, 540, - 714, 779, 232, 267, 412, 445, 457, 585, 594, 766, 167, 613, 149, 148, 560, 589, - 648, 768, 708, 345, 411, 704, 105, 259, 313, 496, 518, 174, 542, 120, 307, 101, - 430, 372, 584, 183, 228, 529, 650, 697, 424, 732, 428, 349, 632, 355, 517, 110, - 135, 147, 403, 580, 624, 700, 750, 170, 193, 245, 297, 374, 463, 543, 763, 801, - 812, 815, 162, 384, 420, 730, 287, 330, 337, 366, 459, 476, 509, 558, 591, 610, - 726, 652, 734, 759, 154, 163, 198, 473, 683, 697, 292, 311, 353, 423, 572, 494, - 113, 217, 259, 280, 314, 499, 506, 603, 608, 752, 778, 782, 788, 117, 557, 748, - 774, 320, 109, 126, 260, 265, 373, 411, 479, 523, 655, 737, 823, 380, 765, 161, - 395, 398, 438, 451, 502, 516, 537, 583, 791, 136, 340, 769, 122, 273, 446, 727, - 305, 322, 400, 496, 771, 155, 190, 269, 377, 391, 406, 432, 501, 519, 599, 684, - 687, 749, 776, 175, 452, 191, 480, 510, 659, 772, 805, 813, 397, 444, 619, 566, - 568, 575, 491, 471, 707, 111, 636, 156, 153, 288, 346, 578, 256, 435, 383, 729, - 680, 767, 694, 295, 128, 210, 0, 0, 227, 0, 379, 0, 0, 150, 493, 525, - 544, 551, 552, 556, 783, 576, 604, 0, 661, 0, 703, 0, 0, 735, 743, 0, - 0, 0, 793, 794, 795, 808, 741, 773, 118, 127, 130, 166, 169, 177, 207, 213, - 215, 226, 229, 268, 270, 317, 327, 329, 335, 369, 375, 381, 404, 441, 448, 458, - 477, 484, 503, 539, 545, 547, 546, 548, 549, 550, 554, 555, 561, 564, 569, 591, - 593, 595, 598, 607, 620, 625, 625, 651, 690, 695, 705, 706, 716, 717, 733, 735, - 777, 786, 790, 315, 869, 623, 0, 0, 102, 145, 134, 115, 129, 138, 165, 171, - 207, 202, 206, 212, 227, 231, 240, 243, 250, 254, 294, 296, 303, 308, 319, 325, - 321, 329, 326, 335, 341, 357, 360, 362, 370, 379, 388, 389, 393, 421, 424, 438, - 456, 454, 458, 465, 477, 535, 485, 490, 493, 507, 512, 514, 521, 522, 525, 526, - 528, 533, 532, 541, 565, 569, 574, 586, 591, 597, 607, 637, 647, 674, 691, 693, - 695, 698, 703, 699, 705, 704, 702, 706, 709, 717, 728, 736, 747, 754, 770, 777, - 783, 784, 786, 787, 790, 802, 825, 848, 847, 857, 55, 65, 66, 883, 892, 916, - 822, 824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,1586, 0,1605, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,1602,1603,1934,1935,1574,1575,1576,1577,1579,1580,1581,1583,1584, 0, - 1585,1587,1588,1589,1591, 0,1592, 0,1593,1594, 0,1595,1596, 0,1598,1599, - 1600,1601,1604,1582,1578,1590,1597, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,1936, 0,1937, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,1938, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,1939,1940, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,1941,1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,1944,1943, 0,1945, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,1946,1947, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1948, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,1949,1950,1951,1952,1953,1954,1955, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,1956,1957,1958,1960,1959,1961, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 106, 104, 107, 826, 114, 118, 119, 121, - 123, 124, 127, 125, 34, 830, 130, 131, 132, 137, 827, 35, 133, 139, 829, 142, - 143, 112, 144, 145, 924, 151, 152, 37, 157, 158, 159, 160, 38, 165, 166, 169, - 171, 172, 173, 174, 176, 177, 178, 179, 181, 182, 182, 182, 833, 468, 184, 185, - 834, 187, 188, 189, 196, 192, 194, 195, 197, 199, 200, 201, 203, 204, 204, 206, - 208, 209, 211, 218, 213, 219, 214, 216, 153, 234, 221, 222, 223, 220, 225, 224, - 230, 835, 235, 236, 237, 238, 239, 244, 836, 837, 247, 248, 249, 246, 251, 39, - 40, 253, 255, 255, 838, 257, 258, 259, 261, 839, 262, 263, 301, 264, 41, 266, - 270, 272, 271, 841, 274, 842, 277, 276, 278, 281, 282, 42, 283, 284, 285, 286, - 43, 843, 44, 289, 290, 291, 293, 934, 298, 845, 845, 621, 300, 300, 45, 852, - 894, 302, 304, 46, 306, 309, 310, 312, 316, 48, 47, 317, 846, 318, 323, 324, - 325, 324, 328, 329, 333, 331, 332, 334, 335, 336, 338, 339, 342, 343, 347, 351, - 849, 350, 348, 352, 354, 359, 850, 361, 358, 356, 49, 363, 365, 367, 364, 50, - 369, 371, 851, 376, 386, 378, 53, 381, 52, 51, 140, 141, 387, 382, 614, 78, - 388, 389, 390, 394, 392, 856, 54, 399, 396, 402, 404, 858, 405, 401, 407, 55, - 408, 409, 410, 413, 859, 415, 56, 417, 860, 418, 57, 419, 422, 424, 425, 861, - 840, 862, 426, 863, 429, 431, 427, 433, 437, 441, 438, 439, 442, 443, 864, 436, - 449, 450, 58, 454, 453, 865, 447, 460, 866, 867, 461, 466, 465, 464, 59, 467, - 470, 469, 472, 828, 475, 868, 478, 870, 483, 485, 486, 871, 488, 489, 872, 873, - 495, 497, 60, 498, 61, 61, 504, 505, 507, 508, 511, 62, 513, 874, 515, 875, - 518, 844, 520, 876, 877, 878, 63, 64, 528, 880, 879, 881, 882, 530, 531, 531, - 533, 66, 534, 67, 68, 884, 536, 538, 541, 69, 885, 549, 886, 887, 556, 559, - 70, 561, 562, 563, 888, 889, 889, 567, 71, 890, 570, 571, 72, 891, 577, 73, - 581, 579, 582, 893, 587, 74, 590, 592, 596, 75, 895, 896, 76, 897, 600, 898, - 602, 605, 607, 899, 900, 609, 901, 611, 853, 77, 615, 616, 79, 617, 252, 902, - 903, 854, 855, 621, 622, 731, 80, 627, 626, 628, 164, 629, 630, 631, 633, 904, - 632, 634, 639, 640, 635, 641, 646, 651, 638, 643, 644, 645, 905, 907, 906, 81, - 653, 654, 656, 911, 657, 908, 82, 83, 909, 910, 84, 664, 665, 666, 667, 669, - 668, 671, 670, 674, 672, 673, 675, 85, 677, 678, 86, 681, 682, 912, 685, 686, - 87, 689, 36, 913, 914, 88, 89, 696, 702, 709, 711, 915, 712, 713, 718, 719, - 917, 831, 721, 720, 723, 832, 725, 728, 918, 919, 739, 742, 744, 920, 745, 753, - 756, 757, 755, 760, 761, 921, 762, 90, 764, 922, 91, 775, 279, 780, 923, 925, - 92, 93, 785, 926, 94, 927, 787, 787, 789, 928, 792, 95, 796, 797, 798, 800, - 96, 929, 802, 804, 806, 97, 98, 807, 930, 99, 931, 932, 933, 814, 100, 816, - 817, 818, 819, 820, 821, 935, 0, 0, -}; -static const int16_t -_hb_ucd_i16[196] = -{ - 0, 0, 0, 0, 1, -1, 0, 0, 2, 0, -2, 0, 0, 0, 0, 2, - 0, -2, 0, 0, 0, 0, 0, 16, 0, 0, 0, -16, 0, 0, 1, -1, - 0, 0, 0, 1, -1, 0, 0, 0, 0, 1, -1, 0, 3, 3, 3, -3, - -3, -3, 0, 0, 0, 2016, 0, 0, 0, 0, 0, 2527, 1923, 1914, 1918, 0, - 2250, 0, 0, 0, 0, 0, 0, 138, 0, 7, 0, 0, -7, 0, 0, 0, - 1, -1, 1, -1, -1, 1, -1, 0, 1824, 0, 0, 0, 0, 0, 2104, 0, - 2108, 2106, 0, 2106, 1316, 0, 0, 0, 0, 1, -1, 1, -1, -138, 0, 0, - 1, -1, 8, 8, 8, 0, 7, 7, 0, 0, -8, -8, -8, -7, -7, 0, - 1, -1, 0, 2,-1316, 1, -1, 0, -1, 1, -1, 1, -1, 3, 1, -1, - -3, 1, -1, 1, -1, 0, 0,-1914,-1918, 0, 0,-1923,-1824, 0, 0, 0, - 0,-2016, 0, 0, 1, -1, 0, 1, 0, 0,-2104, 0, 0, 0, 0,-2106, - -2108,-2106, 0, 0, 1, -1,-2250, 0, 0, 0,-2527, 0, 0, -2, 0, 1, - -1, 0, 1, -1, -}; - -static inline uint_fast8_t -_hb_ucd_gc (unsigned u) -{ - return u<1114110u?_hb_ucd_u8[6504+(((_hb_ucd_u8[1264+(((_hb_ucd_u16[((_hb_ucd_u8[544+(((_hb_ucd_u8[u>>1>>3>>3>>4])<<4)+((u>>1>>3>>3)&15u))])<<3)+((u>>1>>3)&7u)])<<3)+((u>>1)&7u))])<<1)+((u)&1u))]:2; -} -static inline uint_fast8_t -_hb_ucd_ccc (unsigned u) -{ - return u<125259u?_hb_ucd_u8[8768+(((_hb_ucd_u8[7792+(((_hb_ucd_u8[7120+(((_hb_ucd_u8[6874+(u>>2>>3>>4)])<<4)+((u>>2>>3)&15u))])<<3)+((u>>2)&7u))])<<2)+((u)&3u))]:0; -} -static inline unsigned -_hb_ucd_b4 (const uint8_t* a, unsigned i) -{ - return (a[i>>1]>>((i&1u)<<2))&15u; -} -static inline int_fast16_t -_hb_ucd_bmg (unsigned u) -{ - return u<65380u?_hb_ucd_i16[((_hb_ucd_u8[9508+(((_hb_ucd_u8[9388+(((_hb_ucd_b4(9260+_hb_ucd_u8,u>>2>>3>>3))<<3)+((u>>2>>3)&7u))])<<3)+((u>>2)&7u))])<<2)+((u)&3u)]:0; -} -static inline uint_fast8_t -_hb_ucd_sc (unsigned u) -{ - return u<918000u?_hb_ucd_u8[10974+(((_hb_ucd_u16[1960+(((_hb_ucd_u8[10286+(((_hb_ucd_u8[9836+(u>>3>>4>>4)])<<4)+((u>>3>>4)&15u))])<<4)+((u>>3)&15u))])<<3)+((u)&7u))]:2; -} -static inline uint_fast16_t -_hb_ucd_dm (unsigned u) -{ - return u<195102u?_hb_ucd_u16[5768+(((_hb_ucd_u8[16708+(((_hb_ucd_u8[16326+(u>>4>>5)])<<5)+((u>>4)&31u))])<<4)+((u)&15u))]:0; -} - - -#else - -static const uint8_t -_hb_ucd_u8[13344] = -{ - 0, 1, 2, 3, 4, 5, 5, 5, 5, 5, 6, 5, 5, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 5, 17, 15, 15, 18, 15, 19, 20, 21, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 22, 23, - 5, 24, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 234, 70,235, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,236, + 70, 70, 70, 70, 70, 70, 70, 70, 70,237, 96, 96, 96, 96, 96, 96, + 96, 96, 70, 70, 70, 70,238, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 70, 70, 70, 70, 70, 70,239, 96, 96, 96, 96, 96, 96, 96, + 96, 96,240, 96,241,242, 0, 1, 2, 2, 0, 1, 2, 2, 2, 3, + 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, + 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, + 19, 0, 19, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 0, + 0, 0, 0, 0, 26, 26, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 9, 9, 9, 9, 0, 9, 9, 9, 2, 2, 9, 9, 9, 9, + 0, 9, 2, 2, 2, 2, 9, 0, 9, 0, 9, 9, 9, 2, 9, 2, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 2, 9, 9, 9, + 9, 9, 9, 9, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, + 55, 55, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 1, + 1, 6, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 4, 4, 2, 2, 4, + 4, 4, 2, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 2, 2, 2, 2, 2, 2, 2, 2, 14, 14, 14, 2, 2, 2, + 2, 14, 14, 14, 14, 14, 14, 2, 2, 2, 3, 3, 3, 3, 3, 0, + 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 0, 3, 3, 3, 0, 0, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 2, 37, 37, 37, 37, 2, 2, 37, + 37, 37, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 2, 2, 2, 2, + 2, 2, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 2, 2, 64, + 64, 64, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 2, 2, 90, 90, 90, 90, 90, 90, 90, 2, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 2, 2, 95, 2, 37, 37, 37, 2, 2, 2, + 2, 2, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 2, 2, 2, 2, + 2, 2, 3, 3, 0, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 1, 1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 0, 0, + 7, 7, 5, 5, 5, 5, 2, 5, 5, 5, 5, 5, 5, 5, 5, 2, + 2, 5, 5, 2, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 2, 5, 5, 5, 5, 5, 5, 5, 2, 5, 2, 2, 2, + 5, 5, 5, 5, 2, 2, 5, 5, 5, 5, 5, 2, 2, 5, 5, 5, + 5, 2, 2, 2, 2, 2, 2, 2, 2, 5, 2, 2, 2, 2, 5, 5, + 2, 5, 5, 5, 5, 5, 2, 2, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 2, 2, 11, 11, 11, 2, 11, 11, 11, 11, 11, 11, 2, 2, 2, + 2, 11, 11, 2, 2, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 2, 11, 11, 11, 11, 11, 11, 11, 2, 11, 11, 2, 11, + 11, 2, 11, 11, 2, 2, 11, 2, 11, 11, 11, 2, 2, 11, 11, 11, + 2, 2, 2, 11, 2, 2, 2, 2, 2, 2, 2, 11, 11, 11, 11, 2, + 11, 2, 2, 2, 2, 2, 2, 2, 11, 11, 11, 11, 11, 11, 11, 11, + 11, 2, 2, 10, 10, 10, 2, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 2, 10, 10, 10, 2, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 2, 10, 10, 10, 10, 10, 10, 10, 2, 10, 10, 2, 10, + 10, 10, 10, 10, 2, 2, 10, 10, 10, 10, 10, 10, 2, 10, 10, 10, + 2, 2, 10, 2, 2, 2, 2, 2, 2, 2, 10, 10, 10, 10, 2, 2, + 10, 10, 10, 10, 2, 2, 2, 2, 2, 2, 2, 10, 10, 10, 10, 10, + 10, 10, 2, 21, 21, 21, 2, 21, 21, 21, 21, 21, 21, 21, 21, 2, + 2, 21, 21, 2, 2, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 2, 21, 21, 21, 21, 21, 21, 21, 2, 21, 21, 2, 21, + 21, 21, 21, 21, 2, 2, 21, 21, 21, 21, 21, 2, 2, 21, 21, 21, + 2, 2, 2, 2, 2, 2, 2, 21, 21, 21, 2, 2, 2, 2, 21, 21, + 2, 21, 21, 21, 21, 21, 2, 2, 21, 21, 2, 2, 22, 22, 2, 22, + 22, 22, 22, 22, 22, 2, 2, 2, 22, 22, 22, 2, 22, 22, 22, 22, + 2, 2, 2, 22, 22, 2, 22, 2, 22, 22, 2, 2, 2, 22, 22, 2, + 2, 2, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 2, 2, 2, 2, + 22, 22, 22, 2, 2, 2, 2, 2, 2, 22, 2, 2, 2, 2, 2, 2, + 22, 22, 22, 22, 22, 2, 2, 2, 2, 2, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 2, 23, 23, 23, 2, 23, 23, 23, 23, + 23, 23, 23, 23, 2, 2, 23, 23, 23, 23, 23, 2, 23, 23, 23, 23, + 2, 2, 2, 2, 2, 2, 2, 23, 23, 2, 23, 23, 23, 2, 2, 23, + 2, 2, 23, 23, 23, 23, 2, 2, 23, 23, 2, 2, 2, 2, 2, 2, + 2, 23, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 2, + 16, 16, 16, 2, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 2, 16, + 16, 16, 16, 16, 2, 2, 16, 16, 16, 16, 16, 2, 16, 16, 16, 16, + 2, 2, 2, 2, 2, 2, 2, 16, 16, 2, 16, 16, 16, 16, 2, 2, + 16, 16, 2, 16, 16, 2, 2, 2, 2, 2, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 2, 20, 20, 20, 2, 20, 20, 20, 20, + 20, 20, 2, 2, 2, 2, 20, 20, 20, 20, 20, 20, 20, 20, 2, 2, + 20, 20, 2, 36, 36, 36, 2, 36, 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, 36, 2, 2, 2, 36, 36, 36, 36, + 36, 36, 36, 36, 2, 36, 36, 36, 36, 36, 36, 36, 36, 36, 2, 36, + 2, 2, 2, 2, 36, 2, 2, 2, 2, 36, 36, 36, 36, 36, 36, 2, + 36, 2, 2, 2, 2, 2, 2, 2, 36, 36, 2, 2, 36, 36, 36, 2, + 2, 2, 2, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 2, 2, 2, 2, 0, 24, 24, 24, 24, 2, 2, + 2, 2, 2, 18, 18, 2, 18, 2, 18, 18, 18, 18, 18, 2, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 2, 18, + 2, 18, 18, 18, 18, 18, 18, 18, 2, 2, 18, 18, 18, 18, 18, 2, + 18, 2, 18, 18, 2, 2, 18, 18, 18, 18, 25, 25, 25, 25, 25, 25, + 25, 25, 2, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 2, + 2, 2, 25, 25, 25, 25, 25, 2, 25, 25, 25, 25, 25, 25, 25, 0, + 0, 0, 0, 25, 25, 2, 2, 2, 2, 2, 33, 33, 33, 33, 33, 33, + 33, 33, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 2, 8, 2, 2, 2, 2, 2, 8, 2, 2, 8, 8, 8, 0, 8, 8, + 8, 8, 12, 12, 12, 12, 12, 12, 12, 12, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 2, 30, 30, 30, 30, 2, 2, 30, 30, 30, 30, 30, 30, + 30, 2, 30, 30, 30, 2, 2, 30, 30, 30, 30, 30, 30, 30, 30, 2, + 2, 2, 30, 30, 2, 2, 2, 2, 2, 2, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, 2, 2, 28, 28, 28, 28, 28, 28, + 28, 28, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 2, + 2, 2, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 0, 0, 0, + 35, 35, 35, 2, 2, 2, 2, 2, 2, 2, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 45, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 0, + 0, 2, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 2, 2, + 2, 2, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 2, + 46, 46, 46, 2, 46, 46, 2, 2, 2, 2, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 2, 2, 31, 31, 2, 2, 2, 2, + 2, 2, 32, 32, 0, 0, 32, 0, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 2, 2, 2, 2, 2, 2, 32, 2, 2, 2, 2, 2, + 2, 2, 32, 32, 32, 2, 2, 2, 2, 2, 28, 28, 28, 28, 28, 28, + 2, 2, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 2, 48, 48, 48, 48, 2, 2, 2, 2, 48, 2, 2, 2, 48, 48, + 48, 48, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 2, 2, 52, 52, 52, 52, 52, 2, 2, 2, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 2, 2, 2, 2, 58, 58, 2, 2, 2, 2, + 2, 2, 58, 58, 58, 2, 2, 2, 58, 58, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 2, 2, 54, 54, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 2, 91, 91, 91, 91, 91, 2, + 2, 91, 91, 91, 2, 2, 2, 2, 2, 2, 91, 91, 91, 91, 91, 91, + 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 2, 2, 2, 62, 62, 62, 62, 62, 62, + 62, 2, 76, 76, 76, 76, 76, 76, 76, 76, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 2, 2, 2, 2, 2, 2, 2, 2, 93, 93, + 93, 93, 70, 70, 70, 70, 70, 70, 70, 70, 2, 2, 2, 70, 70, 70, + 70, 70, 70, 70, 2, 2, 2, 70, 70, 70, 73, 73, 73, 73, 73, 73, + 73, 73, 6, 2, 2, 2, 2, 2, 2, 2, 8, 8, 8, 2, 2, 8, + 8, 8, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, + 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 1, 1, 0, 2, 2, 2, 2, 2, 19, 19, 19, 19, 19, 19, + 9, 9, 9, 9, 9, 6, 19, 19, 19, 19, 19, 19, 19, 19, 19, 9, + 9, 9, 9, 9, 19, 19, 19, 19, 9, 9, 9, 9, 9, 19, 19, 19, + 19, 19, 6, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 9, 9, 9, 9, 9, 9, 9, 2, 2, 2, 9, 2, 9, 2, 9, + 2, 9, 9, 9, 9, 9, 9, 2, 9, 9, 9, 9, 9, 9, 2, 2, + 9, 9, 9, 9, 9, 9, 2, 9, 9, 9, 2, 2, 9, 9, 9, 2, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 2, 0, 0, 0, 0, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 19, 2, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, + 0, 2, 19, 19, 19, 19, 19, 2, 2, 2, 0, 2, 2, 2, 2, 2, + 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, + 9, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 19, 0, 19, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, + 2, 2, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 2, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 56, 56, 56, 56, 56, 56, + 56, 56, 55, 55, 55, 55, 2, 2, 2, 2, 2, 55, 55, 55, 55, 55, + 55, 55, 61, 61, 61, 61, 61, 61, 61, 61, 2, 2, 2, 2, 2, 2, + 2, 61, 61, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, + 2, 2, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 2, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 2, 2, 2, 2, 13, 13, 13, 13, 13, 13, + 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 13, + 0, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 1, 1, 1, 1, + 12, 12, 13, 13, 13, 13, 0, 0, 0, 0, 2, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 25, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 34, 34, 34, 35, 36, 37, 34, 34, 34, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, 62, 63, 64, 65, 66, 67, 68, 69, 67, 70, 71, - 67, 67, 62, 72, 62, 62, 73, 67, 74, 75, 76, 77, 78, 67, 67, 67, - 79, 80, 34, 81, 82, 83, 67, 67, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 84, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 85, 34, 34, 34, 34, 34, 34, 34, 34, 86, 34, 34, 87, 88, 89, 90, - 91, 92, 93, 94, 95, 96, 97, 98, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100, - 100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100, - 100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100, - 100,100, 34, 34, 34, 34,101,102, 34, 34,103,104,105,106,107,108, - 34, 34,109,110,111,112,113,114,115,116,117,111, 34, 34, 34,111, - 118,119,120,121,122,123,124,125, 34,126,127,111,128,129,130,131, - 132,133,134,135,136,137,138,111,139,140,111,141,142,143,144,111, - 145,146,147,148,149,150,111,111,151,152,153,154,111,155,111,156, - 34, 34, 34, 34, 34, 34, 34, 34,157, 34, 34,111,111,111,111,111, - 111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111, - 34, 34, 34, 34, 34, 34, 34, 34,158,111,111,111,111,111,111,111, - 111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111, - 111,111,111,111,111,111,111,111, 34, 34, 34, 34, 34,111,111,111, - 111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111, - 111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111, - 111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111, - 111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111, - 34, 34, 34, 34,159,160,161, 34,111,111,111,111,162,163,164,165, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,111,111,111,111,111, - 34, 34, 34, 34, 34, 34,111,111,111,111,111,111,111,111,111,111, - 111,111,111,111,111,111,111,111, 34,166,111,111,111,111,111,111, - 67, 67,167,168,169,128, 65,111,170,171,172,173,174,175,176,177, - 67, 67, 67, 67,178,179,111,111,111,111,111,111,111,111,111,111, - 180,111,181,111,111,182,111,111,111,111,111,111,111,111,111,111, - 34,183,184,111,111,111,111,111,128,185,186,111, 34,187,111,111, - 67, 67,188, 67, 67,111, 67,189, 67, 67, 67, 67, 67, 67, 67, 67, - 67, 67, 67, 67, 67, 67, 67,190,111,111,111,111,111,111,111,111, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34,111,111,111,111,111,111,111,111, - 111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111, - 34, 34, 34, 34, 34,111,111,111,111,111,111,111,111,111,111,111, - 34, 34, 34, 34, 34, 34, 34,111,111,111,111,111,111,111,111,111, - 111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111, - 191,111,180,180,111,111,111,111,111,111,111,111,111,111,111,111, - 111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 2, 4, 5, 6, 2, - 7, 7, 7, 7, 7, 2, 8, 9, 10, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 12, 13, 14, 15, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 17, 18, 19, 1, 20, 20, 21, 22, 23, 24, 25, - 26, 27, 15, 2, 28, 29, 27, 30, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 31, 11, 11, 11, 32, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 33, 16, 16, 16, 16, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 34, 34, 34, 34, 34, 34, 34, 34, 16, 32, 32, 32, - 32, 32, 32, 32, 11, 34, 34, 16, 34, 32, 32, 11, 34, 11, 16, 11, - 11, 34, 32, 11, 32, 16, 11, 34, 32, 32, 32, 11, 34, 16, 32, 11, - 34, 11, 34, 34, 32, 35, 32, 16, 36, 36, 37, 34, 38, 37, 34, 34, - 34, 34, 34, 34, 34, 34, 16, 32, 34, 38, 32, 11, 32, 32, 32, 32, - 32, 32, 16, 16, 16, 11, 34, 32, 34, 34, 11, 32, 32, 32, 32, 32, - 16, 16, 39, 16, 16, 16, 16, 16, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 41, 41, 40, 40, 40, 40, 40, 40, 41, 41, 41, 41, 41, 41, 41, - 40, 40, 42, 41, 41, 41, 42, 42, 41, 41, 41, 41, 41, 41, 41, 41, - 43, 43, 43, 43, 43, 43, 43, 43, 32, 32, 42, 32, 16, 44, 16, 10, - 41, 41, 41, 45, 11, 11, 11, 11, 34, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 16, 16, 16, 16, 16, 16, 16, 16, 16, 34, - 16, 11, 32, 16, 32, 32, 32, 32, 16, 16, 32, 46, 34, 32, 34, 11, - 32, 47, 43, 43, 48, 32, 32, 32, 11, 34, 34, 34, 34, 34, 34, 16, - 11, 11, 11, 11, 49, 2, 2, 2, 16, 16, 16, 16, 50, 51, 52, 53, - 54, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 55, - 56, 57, 43, 56, 43, 43, 43, 43, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 58, 2, 2, 2, 2, 2, 2, 59, 59, 59, 8, 9, 60, 2, 61, - 43, 43, 43, 43, 43, 57, 59, 2, 62, 36, 36, 36, 36, 63, 43, 43, - 7, 7, 7, 7, 7, 2, 2, 36, 64, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 65, 43, 43, 43, 66, 47, 43, 43, 67, 68, 69, 43, 43, 36, - 7, 7, 7, 7, 7, 36, 70, 71, 2, 2, 2, 2, 2, 2, 2, 72, - 63, 36, 36, 36, 36, 36, 36, 36, 43, 43, 43, 43, 43, 43, 64, 36, - 36, 36, 36, 43, 43, 43, 43, 43, 7, 7, 7, 7, 7, 36, 36, 36, - 36, 36, 36, 36, 36, 63, 43, 43, 43, 43, 40, 21, 2, 40, 68, 20, - 36, 36, 36, 43, 43, 68, 43, 43, 43, 43, 68, 43, 68, 43, 43, 43, - 2, 2, 2, 2, 2, 2, 2, 2, 36, 36, 36, 36, 63, 43, 43, 2, - 36, 63, 43, 43, 43, 43, 43, 43, 43, 73, 43, 43, 43, 43, 43, 43, - 43, 74, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 74, 64, 75, - 76, 43, 43, 43, 74, 75, 76, 75, 63, 43, 43, 43, 36, 36, 36, 36, - 36, 43, 2, 7, 7, 7, 7, 7, 77, 36, 36, 36, 36, 36, 36, 36, - 63, 75, 78, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 64, 75, - 76, 43, 43, 74, 75, 75, 76, 36, 36, 36, 36, 79, 75, 75, 36, 36, - 36, 43, 43, 7, 7, 7, 7, 7, 36, 20, 27, 27, 27, 53, 58, 43, - 43, 74, 78, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 43, 75, - 76, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 64, 36, 36, 36, - 36, 36, 36, 7, 7, 7, 7, 7, 43, 36, 63, 2, 2, 2, 2, 2, - 76, 43, 43, 43, 74, 75, 76, 43, 60, 20, 20, 20, 80, 43, 43, 43, - 43, 75, 78, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 64, 76, - 76, 43, 43, 74, 75, 75, 76, 43, 43, 43, 43, 74, 75, 75, 36, 36, - 71, 27, 27, 27, 27, 27, 27, 27, 43, 64, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 75, 74, 75, 75, 75, 75, 75, 76, 43, - 36, 36, 36, 79, 75, 75, 75, 75, 75, 75, 75, 7, 7, 7, 7, 7, - 27, 81, 61, 61, 53, 61, 61, 61, 74, 75, 64, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 43, 74, 75, 75, 43, 43, 43, 43, 43, - 43, 43, 43, 43, 36, 36, 36, 36, 7, 7, 7, 82, 27, 27, 27, 81, - 63, 75, 65, 36, 36, 36, 36, 36, 75, 75, 75, 74, 75, 75, 43, 43, - 43, 43, 74, 75, 75, 75, 75, 36, 83, 36, 36, 36, 36, 36, 36, 36, - 43, 75, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 63, 64, 75, - 76, 43, 43, 75, 75, 75, 76, 70, 61, 61, 36, 79, 27, 27, 27, 84, - 27, 27, 27, 27, 81, 36, 36, 36, 36, 36, 36, 36, 36, 43, 43, 74, - 75, 43, 43, 43, 75, 75, 75, 75, 7, 75, 2, 2, 2, 2, 2, 2, - 63, 36, 43, 43, 43, 43, 43, 85, 36, 36, 36, 68, 43, 43, 43, 57, - 7, 7, 7, 7, 7, 2, 2, 2, 63, 36, 43, 43, 43, 43, 64, 36, - 36, 36, 36, 40, 43, 43, 43, 43, 7, 7, 7, 7, 7, 7, 36, 36, - 70, 61, 2, 2, 2, 2, 2, 2, 2, 86, 86, 61, 43, 61, 61, 61, - 7, 7, 7, 7, 7, 27, 27, 27, 27, 27, 47, 47, 47, 4, 4, 75, - 63, 43, 43, 43, 43, 43, 43, 74, 43, 43, 57, 43, 36, 36, 63, 43, - 43, 43, 43, 43, 43, 43, 43, 61, 61, 61, 61, 69, 61, 61, 61, 61, - 2, 2, 86, 61, 21, 2, 2, 2, 36, 36, 36, 36, 36, 79, 76, 43, - 74, 43, 43, 43, 76, 74, 76, 64, 36, 36, 36, 75, 43, 36, 36, 43, - 64, 75, 78, 79, 75, 75, 75, 36, 63, 43, 64, 36, 36, 36, 36, 36, - 36, 74, 76, 74, 75, 75, 76, 79, 7, 7, 7, 7, 7, 75, 76, 61, - 16, 16, 16, 16, 16, 50, 44, 16, 36, 36, 36, 36, 36, 36, 63, 43, - 2, 2, 2, 2, 87, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 61, 61, 61, 61, 61, 61, 61, 61, 11, 11, 11, 11, 16, 16, 16, 16, - 88, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 70, 65, - 89, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 90, 91, 91, - 36, 36, 36, 36, 36, 58, 2, 92, 93, 36, 36, 36, 36, 36, 36, 36, - 36, 43, 43, 43, 43, 43, 43, 43, 36, 43, 57, 2, 2, 2, 2, 2, - 36, 36, 43, 76, 43, 43, 43, 75, 75, 75, 75, 74, 76, 43, 43, 43, - 43, 43, 2, 77, 2, 60, 63, 43, 7, 7, 7, 7, 7, 7, 7, 7, - 2, 2, 2, 94, 2, 56, 43, 59, 36, 95, 36, 36, 36, 36, 36, 36, - 36, 36, 63, 64, 36, 36, 36, 36, 36, 36, 36, 36, 63, 36, 36, 36, - 43, 74, 75, 76, 74, 75, 75, 75, 75, 74, 75, 75, 76, 43, 43, 43, - 61, 61, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 27, 27, 61, - 36, 36, 36, 63, 74, 76, 43, 2, 36, 36, 79, 74, 43, 43, 43, 43, - 74, 74, 76, 43, 43, 43, 74, 75, 75, 76, 43, 43, 43, 43, 43, 43, - 2, 2, 2, 77, 2, 2, 2, 2, 43, 43, 43, 43, 43, 43, 43, 96, - 43, 43, 78, 36, 36, 36, 36, 36, 36, 36, 74, 43, 43, 74, 74, 75, - 75, 74, 78, 36, 36, 36, 36, 36, 86, 61, 61, 61, 61, 47, 43, 43, - 43, 43, 61, 61, 61, 61, 61, 61, 43, 78, 36, 36, 36, 36, 36, 36, - 79, 43, 43, 75, 43, 76, 43, 36, 36, 36, 36, 74, 43, 75, 76, 76, - 43, 75, 75, 75, 75, 75, 2, 2, 36, 36, 75, 75, 75, 75, 43, 43, - 43, 43, 75, 43, 43, 57, 2, 2, 7, 7, 7, 7, 7, 7, 83, 36, - 36, 36, 36, 36, 40, 40, 40, 2, 43, 57, 43, 43, 43, 43, 43, 43, - 74, 43, 43, 43, 64, 36, 63, 36, 36, 36, 64, 79, 43, 36, 36, 36, - 16, 16, 16, 16, 16, 16, 40, 40, 40, 40, 40, 40, 40, 44, 16, 16, - 16, 16, 16, 16, 44, 16, 16, 16, 16, 16, 16, 16, 16, 97, 40, 40, - 32, 32, 32, 16, 16, 16, 16, 32, 16, 16, 16, 16, 11, 11, 11, 11, - 16, 16, 16, 16, 34, 11, 11, 11, 16, 16, 16, 16, 98, 98, 98, 98, - 16, 16, 16, 16, 11, 11, 99,100, 41, 16, 16, 16, 11, 11, 99, 41, - 16, 16, 16, 16, 11, 11,101, 41,102,102,102,102,102,103, 59, 59, - 51, 51, 51, 2,104,105,104,105, 2, 2, 2, 2,106, 59, 59,107, - 2, 2, 2, 2,108,109, 2,110,111, 2,112,113, 2, 2, 2, 2, - 2, 9,111, 2, 2, 2, 2,114, 59, 59, 59, 59, 59, 59, 59, 59, - 115, 40, 27, 27, 27, 8,112,116, 27, 27, 27, 27, 27, 8,112, 91, - 20, 20, 20, 20, 20, 20, 20, 20, 43, 43, 43, 43, 43, 43,117, 48, - 96, 48, 96, 43, 43, 43, 43, 43, 61,118, 61,119, 61, 34, 11, 16, - 11, 32,119, 61, 46, 11, 11, 61, 61, 61,118,118,118, 11, 11,120, - 11, 11, 35, 36, 39, 61, 16, 11, 8, 8, 46, 16, 16, 26, 61,121, - 92, 92, 92, 92, 92, 92, 92, 92, 92,122,123, 92,124, 61, 61, 61, - 8, 8,125, 61, 61, 8, 61, 61,125, 26, 61,125, 61, 61, 61,125, - 61, 61, 61, 61, 61, 61, 61, 8, 61,125,125, 61, 61, 61, 61, 61, - 61, 61, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 61, 61, 61, 61, 4, 4, 61, 61, 8, 61, 61, 61,126,127, 61, 61, - 61, 61, 61, 61, 61, 61,125, 61, 61, 61, 61, 61, 61, 26, 8, 8, - 8, 8, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 8, 8, - 8, 61, 61, 61, 61, 61, 61, 61, 27, 27, 27, 27, 27, 27, 61, 61, - 61, 61, 61, 61, 61, 27, 27, 27, 61, 61, 61, 26, 61, 61, 61, 61, - 26, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 8, 8, 8, 8, - 61, 61, 61, 61, 61, 61, 61, 26, 61, 61, 61, 61, 4, 4, 4, 4, - 4, 4, 4, 27, 27, 27, 27, 27, 27, 27, 61, 61, 61, 61, 61, 61, - 8, 8,112,128, 8, 8, 8, 8, 8, 8, 8, 4, 4, 4, 4, 4, - 8,112,129,129,129,129,129,129,129,129,129,129,128, 8, 8, 8, - 8, 8, 8, 8, 4, 4, 8, 8, 8, 8, 8, 8, 8, 8, 4, 8, - 8, 8,125, 26, 8, 8,125, 61, 32, 11, 32, 34, 34, 34, 34, 11, - 32, 32, 34, 16, 16, 16, 40, 11, 32, 32,121, 61, 61,119, 34,130, - 43, 32, 16, 16, 50, 2, 87, 2, 36, 36, 36, 36, 36, 36, 36, 95, - 2, 2, 2, 2, 2, 2, 2, 56, 2,104,104, 2,108,109,104, 2, - 2, 2, 2, 6, 2, 94,104, 2,104, 4, 4, 4, 4, 2, 2, 77, - 2, 2, 2, 2, 2, 51, 2, 2, 94,131, 2, 2, 2, 2, 2, 2, - 61, 2, 2, 2, 2, 2, 2, 2, 1, 2,132,133, 4, 4, 4, 4, - 4, 61, 4, 4, 4, 4,134, 91,135, 92, 92, 92, 92, 43, 43, 75, - 136, 40, 40, 61, 92,137, 58, 61, 71, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 63,138,139, 62, 36, 36, 36, 36, 36, 58, 40, 62, - 61, 27, 27, 61, 61, 61, 61, 61, 27, 27, 27, 27, 27, 61, 61, 61, - 61, 61, 61, 61, 27, 27, 27, 27,140, 27, 27, 27, 27, 27, 27, 27, - 36, 36, 95, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,141, 2, - 32, 32, 32, 32, 32, 32, 32, 63, 48,142, 43, 43, 43, 43, 43, 77, - 32, 32, 32, 32, 32, 32, 40, 43, 36, 36, 36, 92, 92, 92, 92, 92, - 43, 2, 2, 2, 2, 2, 2, 2, 41, 41, 41,139, 40, 40, 40, 40, - 41, 32, 32, 32, 32, 32, 32, 32, 16, 32, 32, 32, 32, 32, 32, 32, - 44, 16, 16, 16, 34, 34, 34, 32, 32, 32, 32, 32, 42,143, 34, 35, - 32, 32, 16, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 11, 11, 32, - 11, 11, 32, 32, 32, 32, 32, 32, 16, 32, 11, 11, 34, 16, 16, 16, - 16, 16, 34, 35, 40, 35, 36, 36, 36, 64, 36, 64, 36, 63, 36, 36, - 36, 79, 76, 74, 61, 61, 43, 43, 27, 27, 27, 61,144, 61, 61, 61, - 36, 36, 2, 2, 2, 2, 2, 2, 75, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 75, 75, 75, 75, 75, 75, 75, 75, 43, 43, 43, 43, 43, 2, - 43, 36, 36, 36, 2, 65, 65, 63, 36, 36, 36, 43, 43, 43, 43, 2, - 36, 36, 36, 63, 43, 43, 43, 43, 43, 75, 75, 75, 75, 75, 75,145, - 36, 63, 75, 43, 43, 75, 43, 75,145, 2, 2, 2, 2, 2, 2, 77, - 7, 7, 7, 7, 7, 7, 7, 2, 36, 36, 63, 62, 36, 36, 36, 36, - 36, 36, 36, 36, 63, 43, 43, 74, 76, 74, 76, 43, 43, 43, 43, 43, - 36, 63, 36, 36, 36, 36, 74, 75, 7, 7, 7, 7, 7, 7, 2, 2, - 62, 36, 36, 70, 61, 79, 74, 36, 64, 43, 64, 63, 64, 36, 36, 43, - 36, 36, 36, 36, 36, 36, 95, 2, 36, 36, 36, 36, 36, 79, 43, 75, - 2, 95,146, 43, 43, 43, 43, 43, 16, 16, 16, 16, 16,100, 40, 40, - 16, 16, 16, 16, 97, 41, 41, 41, 36, 79, 76, 75, 74,145, 76, 43, - 147,147,147,147,147,147,147,147,148,148,148,148,148,148,148,148, - 16, 16, 16, 16, 16, 16, 35, 64, 36, 36, 36, 36,149, 36, 36, 36, - 36, 41, 41, 41, 41, 41, 41, 41, 41,150, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36,129,151,151,151,151,151,151,151,151, - 36, 36, 36, 36, 36, 36,144, 61, 2, 2, 2,152,113, 2, 2, 2, - 6,153,154,129,129,129,129,129,129,129,113,152,113, 2,110,155, - 2, 2, 2, 2,134,129,129,113, 2,156, 8, 8, 60, 2, 2, 2, - 36, 36, 36, 36, 36, 36, 36,157, 2, 2, 3, 2, 4, 5, 6, 2, - 16, 16, 16, 16, 16, 17, 18,112,113, 4, 2, 36, 36, 36, 36, 36, - 62, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 40, - 20,158, 53, 20, 26, 8,125, 61, 61, 61, 61, 61,159, 59, 61, 61, - 2, 2, 2, 87, 27, 27, 27, 27, 27, 27, 27, 81, 61, 61, 61, 61, - 92, 92,124, 27, 81, 61, 61, 61, 61, 61, 61, 61, 61, 27, 61, 61, - 61, 61, 61, 61, 61, 61, 47, 43,160,160,160,160,160,160,160,160, - 161, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 84, 36, - 133, 36, 36, 36, 36, 92, 92, 92, 36, 36, 36, 36, 36, 36, 36, 58, - 162, 92, 92, 92, 92, 92, 92, 92, 36, 36, 36, 58, 27, 27, 27, 27, - 36, 36, 36, 70,140, 27, 27, 27, 36, 36, 36,163, 27, 27, 27, 27, - 36, 36, 36, 36, 36,163, 27, 27, 36, 36, 36, 27, 27, 27, 27, 30, - 36, 36, 36, 36, 36, 36, 27, 36, 63, 43, 43, 43, 43, 43, 43, 43, - 36, 36, 36, 36, 43, 43, 43, 43, 36, 36, 36, 36, 36, 36,163, 30, - 36, 36, 36, 36, 36, 36,163, 27, 36, 36, 36, 36, 71, 36, 36, 36, - 36, 36, 63, 43, 43,161, 27, 27, 36, 36, 36, 36, 58, 2, 2, 2, - 36, 36, 36, 36, 27, 27, 27, 27, 16, 16, 16, 16, 16, 27, 27, 27, - 36, 36, 43, 43, 43, 43, 43, 43, 36, 36, 36, 36, 36, 63,164, 51, - 27, 27, 27, 84, 36, 36, 36, 36,161, 27, 30, 2, 2, 2, 2, 2, - 36, 36,163, 27, 27, 27, 27, 27, 76, 78, 36, 36, 36, 36, 36, 36, - 43, 43, 43, 57, 2, 2, 2, 2, 2, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,165, - 75, 76, 43, 74, 76, 57, 72, 2, 2, 2, 2, 2, 2, 2, 72, 59, - 36, 36, 36, 63, 43, 43, 76, 43, 43, 43, 43, 7, 7, 7, 7, 7, - 2, 2, 79, 78, 36, 36, 36, 36, 36, 63, 2, 36, 36, 36, 36, 36, - 36, 79, 75, 43, 43, 43, 43, 74, 78, 36, 58, 2, 56, 43, 57, 76, - 7, 7, 7, 7, 7, 58, 58, 2, 87, 27, 27, 27, 27, 27, 27, 27, - 36, 36, 36, 36, 36, 36, 75, 76, 43, 75, 74, 43, 2, 2, 2, 43, - 36, 36, 36, 36, 36, 36, 36, 63, 74, 75, 75, 75, 75, 75, 75, 75, - 36, 36, 36, 79, 75, 75, 78, 36, 36, 75, 75, 43, 43, 43, 43, 43, - 36, 36, 79, 75, 43, 43, 43, 43, 75, 43, 74, 64, 36, 58, 2, 2, - 7, 7, 7, 7, 7, 2, 2, 64, 75, 76, 43, 43, 74, 74, 75, 76, - 74, 43, 36, 65, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 79, - 75, 43, 43, 43, 75, 75, 43, 76, 57, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 36, 36, 43, 43, 75, 76, 43, 43, 43, 74, 76, 76, - 57, 2, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 63, 76, 75, - 43, 43, 43, 76, 36, 36, 36, 36, 75, 43, 43, 76, 43, 43, 43, 43, - 7, 7, 7, 7, 7, 27, 2, 86, 43, 43, 43, 43, 76, 57, 2, 2, - 27, 27, 27, 27, 27, 27, 27, 84, 75, 75, 75, 75, 75, 76, 74, 64, - 78, 76, 2, 2, 2, 2, 2, 2, 79, 75, 43, 43, 43, 43, 75, 75, - 64, 65, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, - 63, 43, 43, 43, 43, 64, 36, 36, 36, 63, 43, 43, 74, 63, 43, 57, - 2, 2, 2, 56, 43, 43, 43, 43, 63, 43, 43, 74, 76, 43, 36, 36, - 36, 36, 36, 36, 36, 43, 43, 43, 43, 43, 43, 74, 43, 2, 65, 2, - 43, 43, 43, 43, 43, 43, 43, 76, 58, 2, 2, 2, 2, 2, 2, 2, - 2, 36, 36, 36, 36, 36, 36, 36, 43, 43, 43, 43, 74, 43, 43, 43, - 74, 43, 76, 43, 43, 43, 43, 43, 43, 43, 43, 63, 43, 43, 43, 43, - 36, 36, 36, 36, 36, 75, 75, 75, 43, 74, 76, 76, 36, 36, 36, 36, - 36, 63, 74,145, 2, 2, 2, 2, 27, 27, 81, 61, 61, 61, 53, 20, - 144, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 21, - 43, 43, 57, 2, 2, 2, 2, 2, 43, 43, 43, 57, 2, 2, 61, 61, - 40, 40, 86, 61, 61, 61, 61, 61, 7, 7, 7, 7, 7,166, 27, 27, - 27, 84, 36, 36, 36, 36, 36, 36, 27, 27, 27, 30, 2, 2, 2, 2, - 79, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, - 43, 67, 40, 40, 40, 40, 40, 40, 40, 77, 43, 43, 43, 43, 43, 43, - 36, 36, 36, 36, 36, 36, 47, 57, 61, 61,167, 76, 43, 61,167, 75, - 75,168, 59, 59, 59, 73, 43, 43, 43, 69, 47, 43, 43, 43, 61, 61, - 61, 61, 61, 61, 61, 43, 43, 61, 61, 43, 69, 61, 61, 61, 61, 61, - 11, 11, 11, 11, 11, 16, 16, 16, 16, 16, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 16, 11, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 11, 11, 11, 11, 11, 16, 16, 16, 16, 16, - 31, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 33, 16, 16, - 16, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 31, 16, 16, - 16, 16, 33, 16, 16, 16, 11, 11, 11, 11, 31, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 33, 16, 16, 16, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 31, 16, 16, 16, 16, 33, 16, 16, 16, - 11, 11, 11, 11, 31, 16, 16, 16, 16, 33, 16, 16, 16, 32, 16, 7, - 43, 43, 43, 69, 61, 47, 43, 43, 43, 43, 43, 43, 43, 43, 69, 61, - 61, 61, 47, 61, 61, 61, 61, 61, 61, 61, 69, 21, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 56, 43, 43, 43, 43, 43, 67, 40, 40, 40, 40, - 7, 7, 7, 7, 7, 7, 7, 70, 36, 36, 36, 36, 36, 36, 43, 43, - 7, 7, 7, 7, 7, 7, 7,169, 16, 16, 43, 43, 43, 67, 40, 40, - 27, 27, 27, 27, 27, 27,140, 27,170, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27,140, 27, 27, 27, 27, 27, 27, 81, 61, - 61, 61, 61, 61, 61, 25, 41, 41, 0, 0, 29, 21, 21, 21, 23, 21, - 22, 18, 21, 25, 21, 17, 13, 13, 25, 25, 25, 21, 21, 9, 9, 9, - 9, 22, 21, 18, 24, 16, 24, 5, 5, 5, 5, 22, 25, 18, 25, 0, - 23, 23, 26, 21, 24, 26, 7, 20, 25, 1, 26, 24, 26, 25, 15, 15, - 24, 15, 7, 19, 15, 21, 9, 25, 9, 5, 5, 25, 5, 9, 5, 7, - 7, 7, 9, 8, 8, 5, 7, 5, 6, 6, 24, 24, 6, 24, 12, 12, - 6, 5, 9, 21, 25, 9, 26, 12, 11, 11, 9, 6, 5, 21, 17, 17, - 17, 26, 26, 23, 23, 12, 17, 12, 21, 12, 12, 21, 7, 21, 1, 1, - 21, 23, 26, 26, 6, 7, 7, 12, 12, 7, 21, 7, 12, 1, 12, 6, - 6, 12, 12, 26, 7, 26, 26, 7, 21, 1, 1, 12, 12, 10, 10, 10, - 10, 12, 21, 6, 10, 7, 7, 10, 23, 7, 15, 26, 13, 21, 13, 7, - 15, 7, 12, 23, 21, 26, 21, 15, 17, 7, 29, 7, 7, 22, 18, 18, - 14, 14, 14, 7, 17, 21, 7, 6, 11, 12, 5, 6, 8, 8, 8, 24, - 5, 24, 9, 24, 29, 29, 29, 1, 20, 19, 22, 20, 27, 28, 1, 29, - 21, 20, 19, 21, 21, 16, 16, 21, 25, 22, 18, 21, 21, 29, 15, 6, - 18, 6, 12, 11, 9, 26, 26, 9, 26, 5, 5, 26, 14, 9, 5, 14, - 14, 15, 25, 26, 26, 22, 18, 26, 18, 25, 18, 22, 5, 12, 22, 21, - 26, 6, 7, 14, 17, 22, 26, 14, 17, 6, 14, 6, 12, 24, 24, 6, - 26, 15, 6, 21, 11, 21, 24, 9, 23, 26, 10, 21, 6, 10, 4, 4, - 3, 3, 7, 25, 24, 7, 22, 22, 21, 22, 17, 16, 16, 22, 16, 16, - 25, 17, 7, 1, 25, 24, 26, 1, 2, 2, 12, 15, 21, 14, 7, 15, - 12, 17, 13, 12, 13, 15, 26, 10, 10, 1, 13, 23, 23, 15, 0, 1, - 2, 3, 4, 5, 6, 7, 8, 9, 0, 10, 11, 12, 13, 0, 14, 0, - 0, 0, 0, 0, 15, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 21, 22, 23, - 0, 0, 0, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 34, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 39, 40, - 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 2, 0, 0, 0, 0, 3, 0, 0, 0, 4, 5, 6, 7, 0, 8, - 9, 10, 0, 11, 12, 13, 0, 14, 15, 16, 15, 17, 15, 18, 15, 18, - 15, 18, 0, 18, 0, 19, 15, 18, 20, 18, 0, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 32, 0, 0, 0, 0, 0, 0, 33, 0, 0, 34, 0, 0, 35, 0, - 36, 0, 0, 0, 37, 38, 39, 40, 41, 42, 43, 44, 45, 0, 0, 46, - 0, 0, 0, 47, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 49, - 0, 50, 0, 51, 52, 0, 53, 0, 0, 0, 0, 0, 0, 54, 55, 56, - 0, 0, 0, 0, 57, 0, 0, 58, 59, 60, 61, 62, 0, 0, 63, 64, - 0, 0, 0, 65, 0, 0, 0, 0, 66, 0, 0, 0, 67, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 69, - 0, 70, 0, 0, 71, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, - 73, 0, 0, 0, 0, 0, 74, 0, 0, 75, 0, 0, 0, 76, 77, 0, - 78, 61, 0, 79, 80, 0, 0, 81, 82, 83, 0, 0, 0, 84, 0, 85, - 0, 0, 50, 86, 50, 0, 87, 0, 88, 0, 0, 0, 77, 0, 0, 0, - 89, 90, 0, 91, 92, 93, 94, 0, 0, 0, 0, 0, 50, 0, 0, 0, - 0, 95, 96, 0, 0, 0, 0, 97, 98, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 99, 0, 0,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0,101,102, 0, 0,103, 0, 0, 0, 0, 0, 0,104, 0, 0, 0, - 98, 0, 0, 0, 0, 0, 0,105, 0, 0, 0, 0, 0, 0, 0,106, - 0,107, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 0, - 8, 0, 0, 0, 0, 9, 10, 11, 12, 0, 0, 0, 0, 13, 0, 0, - 14, 15, 0, 16, 0, 17, 18, 0, 0, 19, 0, 20, 21, 0, 0, 0, - 0, 0, 22, 23, 0, 24, 25, 0, 0, 26, 0, 0, 0, 27, 28, 29, - 0, 0, 0, 30, 31, 32, 0, 0, 31, 0, 0, 33, 31, 0, 0, 0, - 31, 34, 0, 0, 0, 0, 0, 35, 36, 0, 0, 0, 0, 0, 0, 37, - 38, 0, 0, 0, 0, 0, 0, 39, 40, 0, 0, 0, 0, 41, 0, 42, - 0, 0, 0, 43, 44, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 46, - 47, 0, 0, 0, 0, 48, 0, 0, 0, 49, 0, 49, 0, 50, 0, 0, - 0, 0, 51, 0, 0, 0, 0, 52, 0, 53, 0, 0, 0, 0, 54, 55, - 0, 0, 0, 56, 57, 0, 0, 0, 0, 0, 0, 58, 49, 0, 59, 60, - 0, 0, 61, 0, 0, 0, 62, 63, 0, 0, 0, 64, 0, 65, 66, 67, - 68, 69, 1, 70, 0, 71, 72, 73, 0, 0, 74, 75, 0, 0, 0, 76, - 0, 0, 1, 1, 0, 0, 77, 0, 0, 78, 0, 0, 0, 0, 74, 79, - 0, 80, 0, 0, 0, 0, 0, 75, 81, 0, 82, 0, 49, 0, 1, 75, - 0, 0, 83, 0, 0, 84, 0, 0, 0, 0, 0, 85, 54, 0, 0, 0, - 0, 0, 0, 86, 87, 0, 0, 81, 0, 0, 31, 0, 0, 88, 0, 0, - 0, 0, 89, 0, 0, 0, 0, 47, 0, 0, 57, 0, 0, 0, 0, 90, - 91, 0, 0, 92, 0, 0, 93, 0, 0, 0, 94, 0, 0, 0, 95, 0, - 96, 57, 0, 0, 81, 0, 0, 76, 0, 0, 0, 97, 98, 0, 0, 99, - 100, 0, 0, 0, 0, 0, 0,101, 0, 0,102, 0, 0, 0, 0,103, - 31, 0,104,105,106, 33, 0, 0,107, 0, 0, 0,108, 0, 0, 0, - 0, 0, 0,109, 0, 0,110, 0, 0, 0, 0,111, 85, 0, 0, 0, - 0, 0, 54, 0, 0, 0, 0, 49,112, 0, 0, 0, 0,113, 0, 0, - 114, 0, 0, 0, 0,112, 0, 0, 0, 0, 0,115, 0, 0, 0,116, - 0, 0, 0,117, 0,118, 0, 0, 0, 0,119,120,121, 0,122, 0, - 123, 0, 0, 0,124,125,126, 0, 0, 0,127, 0, 0,128, 0, 0, - 129, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 3, 4, - 5, 6, 7, 4, 4, 8, 9, 10, 1, 11, 12, 13, 14, 15, 16, 17, - 18, 1, 1, 1, 19, 1, 0, 0, 20, 21, 22, 1, 23, 4, 21, 24, - 25, 26, 27, 28, 29, 30, 0, 0, 1, 1, 31, 0, 0, 0, 32, 33, - 34, 35, 1, 36, 37, 0, 0, 0, 0, 38, 1, 39, 14, 39, 40, 41, - 42, 0, 0, 0, 43, 36, 44, 45, 21, 45, 46, 0, 0, 0, 19, 1, - 21, 0, 0, 47, 0, 38, 48, 1, 1, 49, 49, 50, 0, 0, 51, 0, - 52, 1, 1, 1, 53, 21, 43, 54, 55, 21, 35, 1, 0, 0, 0, 56, - 0, 0, 0, 57, 58, 59, 0, 0, 0, 0, 0, 60, 0, 61, 0, 0, - 0, 0, 62, 63, 0, 0, 64, 0, 0, 0, 65, 0, 0, 0, 66, 0, - 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 69, 0, 0, 70, 71, 0, - 72, 73, 74, 75, 76, 77, 0, 0, 0, 78, 0, 0, 0, 79, 80, 0, - 0, 0, 0, 47, 0, 0, 0, 49, 0, 63, 0, 0, 64, 0, 0, 81, - 0, 0, 82, 0, 0, 0, 83, 0, 0, 19, 84, 0, 63, 0, 0, 0, - 0, 49, 1, 85, 1, 54, 15, 86, 84, 0, 0, 0, 0, 56, 0, 0, - 0, 0, 19, 10, 1, 0, 0, 0, 0, 0, 87, 0, 0, 88, 0, 0, - 87, 0, 0, 0, 0, 79, 0, 0, 89, 9, 12, 4, 90, 8, 91, 47, - 0, 59, 50, 0, 21, 1, 21, 92, 93, 1, 1, 1, 1, 94, 95, 96, - 97, 1, 98, 59, 81, 99,100, 4, 59, 0, 0, 0, 0, 0, 0, 19, - 50, 0, 0, 0, 0, 0, 0, 62, 0, 0,101,102, 0, 0,103, 0, - 0, 1, 1, 50, 0, 0, 0, 38, 0, 64, 0, 0, 0, 0, 0, 63, - 0, 0, 52, 69, 62, 0, 0, 0, 79, 0, 0, 0,104,105, 59, 38, - 81, 0, 0, 0, 0, 0, 0,106, 1, 14, 4, 12, 0, 38, 89, 0, - 0, 0, 0,107, 0, 0,108, 62, 0,109, 0, 0, 0, 1, 0, 0, - 0, 0, 19, 59, 0,110, 14, 54, 0, 0,111, 0, 89, 0, 0, 0, - 62, 63, 0, 0, 63, 0, 88, 0, 0,111, 0, 0, 0, 0,112, 0, - 0, 0, 79, 56, 0, 38, 1, 59, 1, 59, 0, 0, 64, 88, 0, 0, - 113, 0, 0, 0, 56, 0, 0, 0, 0,113, 0, 0, 0, 0, 62, 0, - 0, 0, 0, 80, 0, 62, 0, 0, 0, 0, 57, 0, 88,114, 0, 0, - 8, 91, 0, 0, 1, 89, 0, 0,115, 0, 0, 0, 0, 0, 0,116, - 0,117,118,119,120, 0, 52, 4,121, 49, 23, 0, 0, 0, 38, 50, - 38, 59, 0, 0, 1, 89, 1, 1, 1, 1, 39, 1, 48,104, 89, 0, - 0, 0, 0, 1, 4,121, 0, 0, 0, 1,122, 0, 0, 0, 0, 0, - 230,230,230,230,230,232,220,220,220,220,232,216,220,220,220,220, - 220,202,202,220,220,220,220,202,202,220,220,220, 1, 1, 1, 1, - 1,220,220,220,220,230,230,230,230,240,230,220,220,220,230,230, - 230,220,220, 0,230,230,230,220,220,220,220,230,232,220,220,230, - 233,234,234,233,234,234,233,230, 0, 0, 0,230, 0,220,230,230, - 230,230,220,230,230,230,222,220,230,230,220,220,230,222,228,230, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 0, 23, - 0, 24, 25, 0,230,220, 0, 18, 30, 31, 32, 0, 0, 0, 0, 27, - 28, 29, 30, 31, 32, 33, 34,230,230,220,220,230,220,230,230,220, - 35, 0, 0, 0, 0, 0,230,230,230, 0, 0,230,230, 0,220,230, - 230,220, 0, 0, 0, 36, 0, 0,230,220,230,230,220,220,230,220, - 220,230,220,230,220,230,230, 0, 0,220, 0, 0,230,230, 0,230, - 0,230,230,230,230,230, 0, 0, 0,220,220,220, 0, 0, 0,220, - 230,230, 0,220,230,220,220,220, 27, 28, 29,230, 7, 0, 0, 0, - 0, 9, 0, 0, 0,230,220,230,230, 0, 0, 0, 0, 0,230, 0, - 0, 84, 91, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 9, 0, - 103,103, 9, 0,107,107,107,107,118,118, 9, 0,122,122,122,122, - 220,220, 0, 0, 0,220, 0,220, 0,216, 0, 0, 0,129,130, 0, - 132, 0, 0, 0, 0, 0,130,130,130,130, 0, 0,130, 0,230,230, - 9, 0,230,230, 0, 0,220, 0, 0, 0, 0, 7, 0, 9, 9, 0, - 0,230, 0, 0, 0,228, 0, 0, 0,222,230,220,220, 0, 0, 0, - 230, 0, 0,220,230,220, 0,220, 0, 0, 9, 9, 0, 0, 7, 0, - 230,230,230, 0,230, 0, 1, 1, 1, 0, 0, 0,230,234,214,220, - 202,230,230,230,230,230,232,228,228,220, 0,230,233,220,230,220, - 230,230, 1, 1, 1, 1, 1,230, 0, 1, 1,230,220,230, 1, 1, - 0, 0,218,228,232,222,224,224, 0, 8, 8, 0,230, 0,230,230, - 220, 0, 0,230, 0, 0, 26, 0, 0,220, 0,230,230, 1,220, 0, - 0,230,220, 0, 0, 0,220,220, 0, 9, 7, 0, 0, 7, 9, 0, - 0, 0, 9, 7, 9, 9, 0, 0, 6, 6, 0, 0, 0, 0, 1, 0, - 0,216,216, 1, 1, 1, 0, 0, 0,226,216,216,216,216,216, 0, - 220,220,220, 0,230,230, 7, 0, 16, 17, 17, 33, 17, 49, 17, 17, - 84, 97,135,145, 26, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17,177, 0, 1, 2, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, - 3, 3, 5, 3, 3, 3, 3, 3, 6, 7, 8, 3, 3, 3, 3, 3, - 9, 10, 11, 12, 13, 3, 3, 3, 3, 3, 3, 3, 3, 14, 3, 15, - 3, 3, 3, 3, 3, 3, 16, 17, 18, 19, 20, 21, 3, 3, 3, 22, - 23, 3, 3, 3, 3, 3, 3, 3, 24, 3, 3, 3, 3, 3, 3, 3, - 3, 25, 3, 3, 26, 27, 0, 1, 0, 0, 0, 0, 0, 1, 0, 2, - 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 4, 0, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, - 9, 0, 0, 0, 0, 0, 0, 9, 0, 9, 0, 0, 0, 0, 0, 0, - 0, 10, 11, 12, 13, 0, 0, 14, 15, 16, 6, 0, 17, 18, 19, 19, - 19, 20, 21, 22, 23, 24, 19, 25, 0, 26, 27, 19, 19, 28, 29, 30, - 0, 31, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 19, 28, 0, - 32, 33, 9, 34, 35, 19, 0, 0, 36, 37, 38, 39, 40, 19, 0, 41, - 42, 43, 44, 31, 0, 1, 45, 42, 0, 0, 0, 0, 0, 32, 14, 14, - 0, 0, 0, 0, 14, 0, 0, 46, 47, 47, 47, 47, 48, 49, 47, 47, - 47, 47, 50, 51, 52, 53, 43, 21, 0, 0, 0, 0, 0, 0, 0, 54, - 6, 55, 0, 14, 19, 1, 0, 0, 0, 19, 56, 31, 0, 0, 0, 0, - 0, 0, 0, 57, 14, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 3, - 0, 0, 0, 58, 59, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 2, 3, 0, 4, 5, 0, 0, 6, 0, 0, 0, 7, 0, 0, - 0, 1, 1, 0, 0, 8, 9, 0, 8, 9, 0, 0, 0, 0, 8, 9, - 10, 11, 12, 0, 0, 0, 13, 0, 0, 0, 0, 14, 15, 16, 17, 0, - 0, 0, 1, 0, 0, 18, 19, 0, 0, 0, 20, 0, 0, 0, 1, 1, - 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 8, 21, 9, 0, 0, - 22, 0, 0, 0, 0, 1, 0, 23, 24, 25, 0, 0, 26, 0, 0, 0, - 8, 21, 27, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 28, 29, 30, - 0, 31, 32, 20, 1, 1, 0, 0, 0, 8, 21, 9, 1, 4, 5, 0, - 0, 0, 33, 9, 0, 1, 1, 1, 0, 8, 21, 21, 21, 21, 34, 1, - 35, 21, 21, 21, 9, 36, 0, 0, 37, 38, 1, 0, 39, 0, 0, 0, - 1, 0, 1, 0, 0, 0, 0, 8, 21, 9, 1, 0, 0, 0, 40, 0, - 8, 21, 21, 21, 21, 21, 21, 21, 21, 9, 0, 1, 1, 1, 1, 8, - 21, 21, 21, 9, 0, 0, 0, 41, 0, 42, 43, 0, 0, 0, 1, 44, - 0, 0, 0, 45, 8, 9, 1, 0, 1, 0, 1, 1, 8, 21, 21, 9, - 0, 4, 5, 8, 9, 1, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, - 7, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 9, 10, 11, 11, - 11, 11, 11, 12, 12, 12, 12, 13, 14, 15, 16, 17, 18, 12, 19, 12, - 20, 12, 12, 12, 12, 21, 22, 22, 22, 23, 12, 12, 12, 12, 24, 25, - 12, 12, 26, 27, 28, 29, 30, 31, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 32, 12, 33, 7, 7, 34, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 35, 0, 0, 1, 2, 2, 2, 3, - 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 32, 33, 33, - 33, 34, 35, 35, 35, 35, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 2, 2, 51, 51, 52, 53, 54, 55, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 57, 57, 56, 56, 56, 56, - 56, 56, 58, 59, 60, 61, 56, 62, 62, 63, 64, 65, 66, 67, 68, 69, - 70, 56, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 62, 62, 71, 62, 62, 62, 62, 72, 72, 72, 72, 72, 72, - 72, 72, 72, 73, 74, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, - 85, 86, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 62, 62, 62, 62, - 88, 89, 89, 89, 90, 89, 91, 92, 93, 94, 95, 95, 96, 97, 87, 98, - 99,100,101,102,103, 87,104,104,104, 87,105,106,107,108,109,110, - 111,112,113,114,115, 87, 89,116,117,118,119,120,121,122,123,124, - 125, 87,126,127, 87,128,129,130,131, 87,132,133,134,135,136,137, - 87, 87,138,139,140,141, 87,142, 87,143,144,144,144,144,144,144, - 144,144,144,144,144, 87, 87, 87, 87, 87,145,145,145,145,145,145, - 145,145,145, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87,146,146,146,146,146, 87, 87, 87,147,147,147,147,148,149, - 150,150, 87, 87, 87, 87,151,151,152,153,154,154,154,154,154,154, - 154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154, - 155,155,155,155,154, 87, 87, 87, 87, 87,156,157,158,159,159,159, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87,160,161, 87, 87, 87, 87, 87, 87, 56, 56,162,163, 51, 56, - 56, 87, 56, 56, 56, 56, 56, 56, 56, 56,164,164,164,164,164,164, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,165, 87,166, 87, 87,167, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,168,168,169, 87, 87, 87, - 87, 87, 56, 56, 56, 87, 89, 89, 87, 87, 56, 56, 56, 56,170, 87, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 87, 87, 87, 87, 87, 87, 87, 87, 62, 62, 62, 62, 62, 62, - 62, 62, 87, 87, 87, 87, 87, 87, 87, 87, 62, 62, 62, 62, 62, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 62, 62, 62, 62, 62, 62, - 62, 87, 87, 87, 87, 87, 87, 87, 87, 87, 56, 87,171,171, 0, 1, - 2, 2, 0, 1, 2, 2, 2, 3, 4, 5, 0, 0, 0, 0, 1, 2, - 1, 2, 0, 0, 3, 3, 4, 5, 4, 5, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 6, 0, 0, 7, 0, 8, 8, 8, 8, 8, 8, - 8, 9, 10, 11, 11, 11, 11, 11, 12, 11, 13, 13, 13, 13, 13, 13, - 13, 13, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 15, 16, 16, - 16, 16, 16, 17, 18, 18, 18, 18, 18, 18, 19, 20, 21, 21, 22, 23, - 21, 24, 21, 21, 21, 21, 21, 25, 21, 21, 26, 26, 26, 26, 26, 21, - 21, 21, 27, 27, 27, 27, 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, - 26, 26, 21, 21, 21, 21, 21, 21, 31, 21, 32, 32, 32, 32, 32, 33, - 34, 32, 35, 35, 35, 35, 35, 35, 35, 35, 36, 36, 36, 36, 36, 36, - 36, 36, 37, 37, 37, 37, 37, 37, 37, 37, 38, 38, 38, 38, 38, 38, - 38, 38, 39, 39, 39, 39, 39, 39, 39, 39, 40, 40, 40, 40, 40, 40, - 40, 40, 41, 41, 41, 41, 41, 41, 41, 41, 42, 42, 42, 42, 42, 42, - 42, 42, 43, 43, 43, 43, 43, 43, 43, 43, 44, 44, 44, 45, 44, 44, - 44, 44, 46, 46, 46, 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 48, 47, 47, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 50, 50, 50, 50, 50, 51, 52, 52, 52, 52, 52, 52, - 52, 52, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 54, 54, 54, 54, - 54, 54, 55, 55, 55, 55, 55, 55, 55, 55, 56, 56, 57, 57, 57, 57, - 58, 57, 59, 59, 60, 61, 62, 62, 63, 63, 64, 64, 64, 64, 64, 64, - 64, 64, 65, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 55, 55, 55, - 55, 55, 67, 67, 67, 67, 67, 68, 68, 68, 69, 69, 69, 69, 69, 69, - 64, 64, 70, 70, 71, 71, 71, 71, 71, 71, 71, 71, 71, 8, 8, 8, - 8, 8, 72, 72, 72, 72, 72, 72, 72, 72, 73, 73, 73, 73, 74, 74, - 74, 74, 75, 75, 75, 75, 75, 76, 76, 76, 13, 50, 50, 50, 73, 77, - 78, 79, 4, 4, 80, 4, 4, 81, 82, 83, 4, 4, 4, 84, 8, 8, - 8, 8, 11, 11, 11, 11, 11, 11, 11, 11, 85, 0, 0, 0, 0, 0, - 0, 86, 0, 4, 0, 0, 0, 8, 8, 8, 0, 0, 87, 88, 89, 0, - 4, 4, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 90, 90, 90, 90, 90, 90, 90, 90, 91, 91, 91, 91, 91, 91, - 4, 4, 92, 92, 92, 92, 92, 92, 92, 92, 50, 50, 50, 93, 93, 93, - 93, 93, 53, 53, 53, 53, 53, 53, 13, 13, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 94, 94, 0, 95, 0, 96, 97, 98, 99, - 99, 99, 99,100,101,102,102,102,102,103,104,104,104,105, 52, 52, - 52, 52, 52, 0,104,104, 0, 0, 0,102, 52, 52, 0, 0, 0, 0, - 52,106, 0, 0, 0, 0, 0,102,102,107,102,102,102,102,102,108, - 0, 0, 94, 94, 94, 94, 0, 0, 0, 0,109,109,109,109,109,109, - 109,109,109,109,109,109,109,110,110,110,111,111,111,111,111,111, - 111,111,111,111,111,111, 13, 13, 13, 13, 13, 13,112,112,112,112, - 112,112, 0, 0,113, 4, 4, 4, 4, 4,114, 4, 4, 4, 4, 4, - 4, 4,115,115,115, 0,116,116,116,116,117,117,117,117,117,117, - 32, 32,118,118,119,120,120,120, 52, 52,121,121,121,121,122,121, - 49, 49,123,123,123,123,123,123, 49, 49,124,124,124,124,124,124, - 125,125, 53, 53, 53, 4, 4,126,127, 54, 54, 54, 54, 54,125,125, - 125,125,128,128,128,128,128,128,128,128, 4,129, 18, 18, 18, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,130, 0, 21, - 21, 21, 8, 0,131, 0, 0, 0, 0, 21, 21, 21, 21, 21, 21, 21, - 21,132, 0, 0, 1, 2, 1, 2,133,101,102,134, 52, 52, 52, 52, - 0, 0,135,135,135,135,135,135,135,135, 0, 0, 0, 0, 11, 11, - 11, 11, 11, 0, 11, 11, 11, 0, 0,136,137,137,138,138,138,138, - 139, 0,140,140,140,141,141,142,142,142,143,143,144,144,144,144, - 144,144,145,145,145,145,145,146,146,146,147,147,147,148,148,148, - 148,148,149,149,149,150,150,150,150,150,151,151,151,151,151,151, - 151,151,152,152,152,152,153,153,154,154,155,155,155,155,155,155, - 156,156,157,157,158,158,158,158,158,158,159,159,160,160,160,160, - 160,160,161,161,161,161,161,161,162,162,163,163,163,163,164,164, - 164,164,165,165,165,165,166,166,167,167,168,168,168,168,168,168, - 168,168,169,169,169,169,169,169,169,169,170,170,170,170,170,170, - 170,170,171,171,171,171,171,171,171,171,172,172,172,172,172,172, - 172,172,173,173,173,174,174,174,174,174,175,175,175,175,175,175, - 176,176,177,177,177,177,177,177,177,177,178,178,178,178,178,179, - 179,179,180,180,180,180,180,181,181,181,182,182,182,182,182,182, - 183, 43,184,184,184,184,184,184,184,184,185,185,185,186,186,186, - 186,186,187,187,187,188,187,187,187,187,189,189,189,189,189,189, - 189,189,190,190,190,190,190,190,190,190,191,191,191,191,191,191, - 191,191,192,192,192,192,192,192, 66, 66,193,193,193,193,193,193, - 193,193,194,194,194,194,194,194,194,194,195,195,195,195,195,195, - 195,195,196,196,196,196,196,196,196,196,197,197,197,197,197,197, - 197,197,198,198,198,198,198,198,198,198,199,199,199,199,199,200, - 200,200,200,200,200,200,201,201,201,201,202,202,202,202,202,202, - 202,203,203,203,203,203,203,203,203,203,204,204,204,204,204,204, - 205,205,205,205,205,205,205,205,205,205,206,206,206,206,206,206, - 206,206,110,110,110,110, 39, 39, 39, 39,207,207,207,207,207,207, - 207,207,208,208,208,208,208,208,208,208,209,209,209,209,209,209, - 209,209,112,112,112,112,112,112,112,112,112,112,112,112,210,210, - 210,210,211,211,211,211,211,211,211,211,212,212,212,212,212,212, - 212,212,213,213,213,213,213,213,213,213,214,214,214,214,214,214, - 214,214,214,214,214,214,214,214,215, 94,216,216,216,216,216,216, - 216,216,217,217,217,217,217,217,217,217,218, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 219,220,220,220,220,220,220,220,220,220,221,221,221,221,221,221, - 221,221,221,221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 222,223,224, 0,225, 0, 0, 0, 0, 0,226,226,226,226,226,226, - 226,226, 91, 91, 91, 91, 91, 91, 91, 91,227,227,227,227,227,227, - 227,227,228,228,228,228,228,228,228,228,229,229,229,229,229,229, - 229,229,230,230,230,230,230,230,230,230,231, 0, 0, 0, 0, 0, - 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 1, 2, - 2, 2, 2, 2, 3, 0, 0, 0, 4, 0, 2, 2, 2, 2, 2, 3, - 2, 2, 2, 2, 5, 0, 2, 5, 6, 0, 7, 7, 7, 7, 8, 9, - 8, 10, 8, 11, 8, 8, 8, 8, 8, 8, 12, 13, 13, 13, 14, 14, - 14, 14, 14, 15, 14, 14, 16, 17, 17, 17, 17, 17, 17, 17, 18, 19, - 19, 19, 19, 19, 19, 19, 20, 21, 20, 22, 20, 20, 23, 23, 20, 20, - 20, 20, 22, 20, 24, 7, 7, 25, 20, 20, 26, 20, 20, 20, 20, 20, - 20, 21, 27, 27, 27, 27, 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, - 30, 30, 31, 31, 31, 31, 32, 20, 20, 20, 33, 33, 33, 33, 34, 35, - 33, 33, 33, 36, 33, 33, 37, 37, 37, 37, 38, 38, 38, 38, 39, 39, - 39, 39, 40, 40, 40, 40, 41, 41, 41, 41, 42, 42, 42, 42, 43, 43, - 43, 43, 44, 44, 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 46, 46, - 46, 47, 48, 48, 48, 48, 49, 49, 49, 49, 49, 50, 51, 49, 52, 52, - 52, 52, 53, 53, 53, 53, 53, 53, 54, 53, 55, 55, 55, 55, 56, 56, - 56, 56, 57, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 59, 60, 60, - 60, 60, 60, 60, 61, 62, 63, 63, 63, 63, 64, 64, 64, 64, 64, 65, - 0, 0, 66, 66, 66, 66, 67, 67, 67, 67, 68, 68, 68, 68, 69, 70, - 71, 71, 71, 71, 71, 71, 72, 72, 72, 72, 73, 73, 73, 73, 74, 74, - 74, 74, 75, 75, 75, 75, 76, 76, 76, 76, 77, 77, 77, 77, 78, 78, - 78, 78, 79, 79, 79, 79, 80, 80, 80, 80, 81, 81, 81, 81, 82, 7, - 7, 7, 83, 7, 84, 85, 0, 84, 86, 0, 2, 87, 88, 2, 2, 2, - 2, 89, 90, 87, 91, 2, 2, 2, 92, 2, 2, 2, 2, 93, 0, 0, - 0, 86, 1, 0, 0, 94, 0, 95, 96, 0, 4, 0, 0, 0, 0, 0, - 0, 4, 97, 97, 97, 97, 98, 98, 98, 98, 13, 13, 13, 13, 99, 99, - 99, 99,100,100,100,100, 0,101, 0, 0,102,100,103,104, 0, 0, - 100, 0,105,106,106,106,106,106,106,106,106,106,107,105,108,109, - 109,109,109,109,109,109,109,109,110,108,111,111,111,111,112, 55, - 55, 55, 55, 55, 55,113,109,109,109,110,109,109, 0, 0,114,114, - 114,114,115,115,115,115,116,116,116,116,117,117,117,117, 96, 2, - 2, 2, 2, 2, 94, 2,118,118,118,118,119,119,119,119,120,120, - 120,120,121,121,121,121,121,121,121,122,123,123,123,123,124,124, - 124,124,124,124,124,125,126,126,126,126,127,127,127,127,128,128, - 128,128, 2, 2, 3, 2, 2,129,130, 0,131,131,131,131,132, 17, - 17, 18, 20, 20, 20,133, 7, 7, 7,134, 20, 20, 20, 23, 0,135, - 109,109,109,109,109,136,137,137,137,137, 0, 0, 0,138,139,139, - 139,139,140,140,140,140, 84, 0, 0, 0,141,141,141,141,142,142, - 142,142,143,143,143,143,144,144,144,144,145,145,145,145,146,146, - 146,146,147,147,147,147,148,148,148,148,149,149,149,149,150,150, - 150,150,151,151,151,151,152,152,152,152,153,153,153,153,154,154, - 154,154,155,155,155,155,156,156,156,156,157,157,157,157,158,158, - 158,158,159,159,159,159,160,160,160,160,161,161,161,161,162,162, - 162,162,163,163,163,163,164,164,164,164,165,165,165,165,166,166, - 166,166,167,167,167,167,168,168,168,168,169,169,169,169,170,170, - 170,170,171,171,171,171,172,172,172,172,173,173,173,173,174,174, - 174,174,175,175,175,175,176,176,176,176,177,177,177,177,178,178, - 178,178,179,179,179,179,180,180,180,180,181,181,181,181,182,182, - 182,182,183,183,183,183,184, 45, 45, 45,185,185,185,185,186,186, - 186,186,187,187,187,187,188,188,188,188,188,188,189,188,190,190, - 190,190,191,191,191,191,192,192,192,192,193,193,193,193,194,194, - 194,194,195,195,195,195,196,196,196,196,197,197,197,197,198,198, - 198,198,199,199,199,199,200,200,200,200,201,201,201,201,202,202, - 202,202,203,203,203,203,204,204,204,204,205,205,205,205,206,206, - 206,206,207,207,207,207,208,208,208,208,209,209,209,209,210,210, - 210,210,211,211,211,211,212,212,212,212,213,213,213,213,214,214, - 214,214,215,215,215,215,216,217,217,217,218,218,218,218,217,217, - 217,217,219,106,106,106,106,109,109,109,220,220,220,220,221,221, - 221,221, 0,222, 86, 0, 0, 0,222, 7, 82,138, 7, 0, 0, 0, - 223, 86,224,224,224,224,225,225,225,225,226,226,226,226,227,227, - 227,227,228,228,228,228,229, 0, 0, 0, 0, 0, 0, 0, 0, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 19, 0, 19, 0, - 0, 0, 0, 0, 26, 26, 1, 1, 1, 1, 9, 9, 9, 9, 0, 9, - 9, 9, 9, 9, 0, 9, 9, 0, 9, 0, 9, 9, 55, 55, 55, 55, - 55, 55, 6, 6, 6, 6, 6, 1, 1, 6, 6, 4, 4, 4, 4, 4, - 4, 4, 4, 14, 14, 14, 14, 14, 14, 14, 3, 3, 3, 3, 3, 0, - 3, 3, 0, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 1, 1, 1, - 3, 3, 1, 3, 3, 3, 37, 37, 37, 37, 38, 38, 38, 38, 64, 64, - 64, 64, 90, 90, 90, 90, 95, 95, 95, 95, 3, 3, 0, 3, 7, 7, - 7, 7, 7, 1, 1, 1, 1, 7, 7, 7, 0, 0, 7, 7, 5, 5, - 5, 5, 11, 11, 11, 11, 10, 10, 10, 10, 21, 21, 21, 21, 22, 22, - 22, 22, 23, 23, 23, 23, 16, 16, 16, 16, 20, 20, 20, 20, 36, 36, - 36, 36, 24, 24, 24, 24, 24, 24, 24, 0, 18, 18, 18, 18, 25, 25, - 25, 25, 25, 0, 0, 0, 0, 25, 25, 25, 33, 33, 33, 33, 8, 8, - 8, 8, 8, 8, 8, 0, 12, 12, 12, 12, 30, 30, 30, 30, 29, 29, - 29, 29, 28, 28, 28, 28, 34, 34, 34, 34, 35, 35, 35, 35, 35, 35, - 35, 0, 0, 0, 35, 35, 45, 45, 45, 45, 44, 44, 44, 44, 44, 0, - 0, 0, 43, 43, 43, 43, 46, 46, 46, 46, 31, 31, 31, 31, 32, 32, - 0, 0, 32, 0, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 52, 52, - 52, 52, 58, 58, 58, 58, 54, 54, 54, 54, 91, 91, 91, 91, 62, 62, - 62, 62, 76, 76, 76, 76, 93, 93, 93, 93, 70, 70, 70, 70, 73, 73, - 73, 73, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, - 0, 0, 1, 1, 0, 0, 19, 19, 9, 9, 9, 9, 9, 6, 19, 9, - 9, 9, 9, 9, 19, 19, 9, 9, 9, 19, 6, 19, 19, 19, 19, 19, - 19, 9, 0, 0, 0, 19, 0, 0, 9, 0, 0, 0, 19, 19, 27, 27, - 27, 27, 56, 56, 56, 56, 61, 61, 61, 61, 13, 13, 13, 13, 0, 13, - 0, 13, 0, 13, 13, 13, 13, 13, 1, 1, 1, 1, 12, 12, 0, 15, - 15, 15, 15, 15, 15, 15, 15, 1, 1, 0, 0, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 0, 26, 26, 26, 26, 26, 12, 12, 12, 12, 12, - 12, 0, 39, 39, 39, 39, 86, 86, 86, 86, 77, 77, 77, 77, 79, 79, - 79, 79, 60, 60, 60, 60, 65, 65, 65, 65, 75, 75, 75, 75, 69, 69, - 69, 69, 69, 69, 0, 69, 74, 74, 74, 74, 84, 84, 84, 84, 84, 84, - 84, 0, 68, 68, 68, 68, 92, 92, 92, 92, 87, 87, 87, 87, 19, 9, - 19, 19, 19, 19, 0, 0, 2, 2, 2, 2, 19, 19, 19, 4, 3, 3, - 0, 0, 1, 1, 6, 6, 0, 0, 17, 17, 17, 17, 0, 0, 49, 49, - 49, 49, 0, 1, 1, 1, 71, 71, 71, 71, 67, 67, 67, 67, 42, 42, - 42, 42, 41, 41, 41, 41,118,118,118,118, 53, 53, 53, 53, 59, 59, - 59, 59, 40, 40, 40, 40, 51, 51, 51, 51, 50, 50, 50, 50,135,135, - 135,135,106,106,106,106,104,104,104,104,110,110,110,110, 47, 47, - 47, 47, 81, 81, 81, 81,120,120,120,120,116,116,116,116,128,128, - 128,128, 66, 66, 66, 66, 72, 72, 72, 72, 98, 98, 98, 98, 97, 97, - 97, 97, 57, 57, 57, 57, 88, 88, 88, 88,117,117,117,117,112,112, - 112,112, 78, 78, 78, 78, 83, 83, 83, 83, 82, 82, 82, 82,122,122, - 122,122, 89, 89, 89, 89,130,130,130,130,144,144,144,144,156,156, - 156,156,147,147,147,147,148,148,148,148,153,153,153,153,149,149, - 149,149, 94, 94, 94, 94, 85, 85, 85, 85,101,101,101,101, 96, 96, - 96, 96,111,111,111,111,100,100,100,100,100, 36, 36, 36,108,108, - 108,108,129,129,129,129,109,109,109,109,107,107,107,107,107,107, - 107, 1,137,137,137,137,124,124,124,124,123,123,123,123,114,114, - 114,114,102,102,102,102,126,126,126,126,142,142,142,142,125,125, - 125,125,154,154,154,154,150,150,150,150,141,141,141,141,140,140, - 140,140,121,121,121,121,133,133,133,133,134,134,134,134,138,138, - 138,138,143,143,143,143,145,145,145,145, 63, 63, 63, 63, 80, 80, - 80, 80,127,127,127,127,115,115,115,115,103,103,103,103,119,119, - 119,119,146,146,146,146, 99, 99, 99, 99,136,139, 0, 0,155,155, - 155,155,136,136,136,136, 17, 15, 15, 15,139,139,139,139,105,105, - 105,105, 0, 0, 0, 1, 0, 0, 1, 1,131,131,131,131,151,151, - 151,151,152,152,152,152,113,113,113,113,132,132,132,132, 15, 0, - 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 9, 9, 10, + 15, 2, 2, 1, 1, 0, 0, 15, 15, 15, 0, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 17, + 17, 17, 2, 2, 2, 2, 2, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 2, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 2, 12, 12, 12, 12, 12, 12, 12, 0, 17, 17, 17, 17, 17, 17, + 17, 0, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 2, + 2, 2, 39, 39, 39, 39, 39, 39, 39, 2, 86, 86, 86, 86, 86, 86, + 86, 86, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 2, 2, + 2, 2, 79, 79, 79, 79, 79, 79, 79, 79, 0, 0, 19, 19, 19, 19, + 19, 19, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 2, 2, 2, + 2, 2, 19, 19, 2, 19, 2, 19, 19, 19, 19, 19, 2, 2, 2, 2, + 2, 2, 2, 2, 19, 19, 19, 19, 19, 19, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 2, 2, 2, 0, 0, 2, 2, 2, 2, + 2, 2, 65, 65, 65, 65, 65, 65, 65, 65, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 2, 2, 2, 2, 2, 2, 2, 2, + 75, 75, 75, 75, 2, 2, 2, 2, 2, 2, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, 0, 69, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 74, 12, 12, 12, 12, 12, 2, 2, 2, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 2, 0, 84, 84, 2, 2, 2, 2, + 84, 84, 33, 33, 33, 33, 33, 33, 33, 2, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68, 68, 2, 68, 68, 68, 68, 68, 68, + 2, 2, 68, 68, 2, 2, 68, 68, 68, 68, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 2, 2, 2, 2, 2, 2, 2, 2, 92, 92, 92, + 92, 92, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 2, 2, 30, 30, 30, 30, 30, 30, 2, 19, 19, 19, 0, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 9, 19, 19, 19, 19, 0, 0, 2, 2, + 2, 2, 87, 87, 87, 87, 87, 87, 2, 2, 87, 87, 2, 2, 2, 2, + 2, 2, 12, 12, 12, 12, 2, 2, 2, 2, 2, 2, 2, 12, 12, 12, + 12, 12, 13, 13, 2, 2, 2, 2, 2, 2, 19, 19, 19, 19, 19, 19, + 19, 2, 2, 2, 2, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 2, 14, 14, 14, 14, 14, 2, + 14, 2, 14, 14, 2, 14, 14, 2, 14, 14, 3, 3, 3, 2, 2, 2, + 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 0, 0, 2, 2, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, + 2, 3, 1, 1, 1, 1, 1, 1, 6, 6, 0, 0, 0, 2, 0, 0, + 0, 0, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 2, + 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 2, 2, 12, 12, 12, 12, + 12, 12, 2, 2, 12, 12, 12, 2, 2, 2, 2, 0, 0, 0, 0, 0, + 2, 2, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 2, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 2, 49, 49, 49, 2, 49, 49, + 2, 49, 49, 49, 49, 49, 49, 49, 2, 2, 49, 49, 49, 2, 2, 2, + 2, 2, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, + 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 9, 2, 2, 2, 2, 2, + 2, 2, 0, 0, 0, 0, 0, 1, 2, 2, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 71, 71, 71, 71, 2, 2, 2, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, + 0, 0, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 42, 42, 42, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 2, 2, 2, 2, 2,118,118,118,118,118,118, + 118,118,118,118,118, 2, 2, 2, 2, 2, 53, 53, 53, 53, 53, 53, + 53, 53, 53, 53, 53, 53, 53, 53, 2, 53, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 2, 2, 2, 2, 59, 59, 59, 59, 59, 59, + 2, 2, 40, 40, 40, 40, 40, 40, 40, 40, 51, 51, 51, 51, 51, 51, + 51, 51, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 2, 2, 50, 50, 2, 2, 2, 2, 2, 2,135,135,135,135,135,135, + 135,135,135,135,135,135, 2, 2, 2, 2,106,106,106,106,106,106, + 106,106,104,104,104,104,104,104,104,104,104,104,104,104, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2,104,161,161,161,161,161,161, + 161,161,161,161,161, 2,161,161,161,161,161,161,161, 2,161,161, + 2,161,161,161, 2,161,161,161,161,161,161,161, 2,161,161, 2, + 2, 2,110,110,110,110,110,110,110,110,110,110,110,110,110,110, + 110, 2,110,110,110,110,110,110, 2, 2, 19, 19, 19, 19, 19, 19, + 2, 19, 19, 2, 19, 19, 19, 19, 19, 19, 47, 47, 47, 47, 47, 47, + 2, 2, 47, 2, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 2, 47, 47, 2, 2, 2, 47, 2, + 2, 47, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 2, 81,120,120,120,120,120,120,120,120,116,116,116,116,116,116, + 116,116,116,116,116,116,116,116,116, 2, 2, 2, 2, 2, 2, 2, + 2,116,128,128,128,128,128,128,128,128,128,128,128, 2,128,128, + 2, 2, 2, 2, 2,128,128,128,128,128, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 2, 2, 2, 66, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 2, 2, 2, 2, 2, 72, 98, 98, 98, 98, 98, 98, + 98, 98, 97, 97, 97, 97, 97, 97, 97, 97, 2, 2, 2, 2, 97, 97, + 97, 97, 2, 2, 97, 97, 97, 97, 97, 97, 57, 57, 57, 57, 2, 57, + 57, 2, 2, 2, 2, 2, 57, 57, 57, 57, 57, 57, 57, 57, 2, 57, + 57, 57, 2, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 2, 2, 57, 57, 57, 2, 2, 2, + 2, 57, 57, 2, 2, 2, 2, 2, 2, 2, 88, 88, 88, 88, 88, 88, + 88, 88,117,117,117,117,117,117,117,117,112,112,112,112,112,112, + 112,112,112,112,112,112,112,112,112, 2, 2, 2, 2,112,112,112, + 112,112, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 2, 2, 2, 78, 78, 78, 78, 78, 78, 78, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 2, 2, 82, 82, 82, 82, 82, 82, + 82, 82, 82, 82, 82, 2, 2, 2, 2, 2,122,122,122,122,122,122, + 122,122,122,122, 2, 2, 2, 2, 2, 2, 2,122,122,122,122, 2, + 2, 2, 2,122,122,122,122,122,122,122, 89, 89, 89, 89, 89, 89, + 89, 89, 89, 2, 2, 2, 2, 2, 2, 2,130,130,130,130,130,130, + 130,130,130,130,130, 2, 2, 2, 2, 2, 2, 2,130,130,130,130, + 130,130,144,144,144,144,144,144,144,144,144,144, 2, 2, 2, 2, + 2, 2,156,156,156,156,156,156,156,156,156,156, 2,156,156,156, + 2, 2,156,156, 2, 2, 2, 2, 2, 2,147,147,147,147,147,147, + 147,147,148,148,148,148,148,148,148,148,148,148, 2, 2, 2, 2, + 2, 2,158,158,158,158,158,158,158,158,158,158, 2, 2, 2, 2, + 2, 2,153,153,153,153,153,153,153,153,153,153,153,153, 2, 2, + 2, 2,149,149,149,149,149,149,149,149,149,149,149,149,149,149, + 149, 2, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 2, 2, 2, 2, 94, 94, 94, 94, 94, 94, 2, 2, 2, 2, 2, 2, + 2, 94, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 85, 2, 2,101,101,101,101,101,101, + 101,101,101, 2, 2, 2, 2, 2, 2, 2,101,101, 2, 2, 2, 2, + 2, 2, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 2, + 96, 96,111,111,111,111,111,111,111,111,111,111,111,111,111,111, + 111, 2,100,100,100,100,100,100,100,100, 2, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 2, 2, 2,108,108,108,108,108,108, + 108,108,108,108, 2,108,108,108,108,108,108,108,108,108,108,108, + 108, 2,129,129,129,129,129,129,129, 2,129, 2,129,129,129,129, + 2,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129, + 2,129,129,129, 2, 2, 2, 2, 2, 2,109,109,109,109,109,109, + 109,109,109,109,109, 2, 2, 2, 2, 2,109,109, 2, 2, 2, 2, + 2, 2,107,107,107,107, 2,107,107,107,107,107,107,107,107, 2, + 2,107,107, 2, 2,107,107,107,107,107,107,107,107,107,107,107, + 107,107,107, 2,107,107,107,107,107,107,107, 2,107,107, 2,107, + 107,107,107,107, 2, 1,107,107,107,107,107, 2, 2,107,107,107, + 2, 2,107, 2, 2, 2, 2, 2, 2,107, 2, 2, 2, 2, 2,107, + 107,107,107,107,107,107, 2, 2,107,107,107,107,107,107,107, 2, + 2, 2,137,137,137,137,137,137,137,137,137,137,137,137, 2,137, + 137,137,137,137, 2, 2, 2, 2, 2, 2,124,124,124,124,124,124, + 124,124,124,124, 2, 2, 2, 2, 2, 2,123,123,123,123,123,123, + 123,123,123,123,123,123,123,123, 2, 2,114,114,114,114,114,114, + 114,114,114,114,114,114,114, 2, 2, 2,114,114, 2, 2, 2, 2, + 2, 2, 32, 32, 32, 32, 32, 2, 2, 2,102,102,102,102,102,102, + 102,102,102,102, 2, 2, 2, 2, 2, 2,126,126,126,126,126,126, + 126,126,126,126,126, 2, 2,126,126,126,126,126,126,126, 2, 2, + 2, 2,126,126,126,126,126,126,126, 2,142,142,142,142,142,142, + 142,142,142,142,142,142, 2, 2, 2, 2,125,125,125,125,125,125, + 125,125,125,125,125, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2,125,154,154,154,154,154,154,154, 2, 2,154, 2, 2,154,154, + 154,154,154,154,154,154, 2,154,154, 2,154,154,154,154,154,154, + 154,154,154,154,154,154,154,154, 2,154,154, 2, 2,154,154,154, + 154,154,154,154, 2, 2, 2, 2, 2, 2,150,150,150,150,150,150, + 150,150, 2, 2,150,150,150,150,150,150,150,150,150,150,150, 2, + 2, 2,141,141,141,141,141,141,141,141,140,140,140,140,140,140, + 140,140,140,140,140, 2, 2, 2, 2, 2,121,121,121,121,121,121, + 121,121,121, 2, 2, 2, 2, 2, 2, 2,133,133,133,133,133,133, + 133,133,133, 2,133,133,133,133,133,133,133,133,133,133,133,133, + 133, 2,133,133,133,133,133,133, 2, 2,133,133,133,133,133, 2, + 2, 2,134,134,134,134,134,134,134,134, 2, 2,134,134,134,134, + 134,134, 2,134,134,134,134,134,134,134,134,134,134,134,134,134, + 134, 2,138,138,138,138,138,138,138, 2,138,138, 2,138,138,138, + 138,138,138,138,138,138,138,138,138,138, 2, 2,138, 2,138,138, + 2,138,138,138, 2, 2, 2, 2, 2, 2,143,143,143,143,143,143, + 2,143,143, 2,143,143,143,143,143,143,143,143,143,143,143,143, + 143,143,143,143,143,143,143,143,143, 2,143,143, 2,143,143,143, + 143,143,143, 2, 2, 2, 2, 2, 2, 2,143,143, 2, 2, 2, 2, + 2, 2,145,145,145,145,145,145,145,145,145, 2, 2, 2, 2, 2, + 2, 2, 86, 2, 2, 2, 2, 2, 2, 2, 22, 22, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 22, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 2, 2, 2, 2, 2, 2, 63, 63, 63, 63, 63, 63, + 63, 2, 63, 63, 63, 63, 63, 2, 2, 2, 63, 63, 63, 63, 2, 2, + 2, 2,157,157,157,157,157,157,157,157,157,157,157, 2, 2, 2, + 2, 2, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 2, 80, 2, 2, 2, 2, 2, 2, 2,127,127,127,127,127,127, + 127,127,127,127,127,127,127,127,127, 2, 79, 2, 2, 2, 2, 2, + 2, 2,115,115,115,115,115,115,115,115,115,115,115,115,115,115, + 115, 2,115,115, 2, 2, 2, 2,115,115,159,159,159,159,159,159, + 159,159,159,159,159,159,159,159,159, 2,159,159, 2, 2, 2, 2, + 2, 2,103,103,103,103,103,103,103,103,103,103,103,103,103,103, + 2, 2,119,119,119,119,119,119,119,119,119,119,119,119,119,119, + 2, 2,119,119, 2,119,119,119,119,119, 2, 2, 2, 2, 2,119, + 119,119,146,146,146,146,146,146,146,146,146,146,146, 2, 2, 2, + 2, 2, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 2, 2, 2, + 2, 99, 2, 2, 2, 2, 2, 2, 2, 99,136,139, 13, 13,155, 2, + 2, 2,136,136,136,136,136,136,136,136,155,155,155,155,155,155, + 155,155,155,155,155,155,155,155, 2, 2,136, 2, 2, 2, 2, 2, + 2, 2, 17, 17, 17, 17, 2, 17, 17, 17, 17, 17, 17, 17, 2, 17, + 17, 2, 17, 15, 15, 15, 15, 15, 15, 15, 17, 17, 17, 2, 2, 2, + 2, 2, 15, 15, 15, 2, 2, 2, 2, 2, 2, 2, 2, 2, 17, 17, + 17, 17,139,139,139,139,139,139,139,139,139,139,139,139, 2, 2, + 2, 2,105,105,105,105,105,105,105,105,105,105,105, 2, 2, 2, + 2, 2,105,105,105,105,105, 2, 2, 2,105, 2, 2, 2, 2, 2, + 2, 2,105,105, 2, 2,105,105,105,105, 1, 1, 1, 1, 1, 1, + 2, 2, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, + 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, + 0, 0, 2, 2, 0, 2, 2, 0, 0, 2, 2, 0, 0, 0, 0, 2, + 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 2, 0, 0, 0, 0, 0, 2, 0, 2, 2, 2, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,131,131,131,131,131,131, + 131,131,131,131,131,131, 2, 2, 2, 2, 2, 2, 2,131,131,131, + 131,131, 2,131,131,131,131,131,131,131, 56, 56, 56, 56, 56, 56, + 56, 2, 56, 2, 2, 56, 56, 56, 56, 56, 56, 56, 2, 56, 56, 2, + 56, 56, 56, 56, 56, 2, 2, 2, 2, 2,151,151,151,151,151,151, + 151,151,151,151,151,151,151, 2, 2, 2,151,151,151,151,151,151, + 2, 2,151,151, 2, 2, 2, 2,151,151,160,160,160,160,160,160, + 160,160,160,160,160,160,160,160,160, 2,152,152,152,152,152,152, + 152,152,152,152, 2, 2, 2, 2, 2,152, 30, 30, 30, 30, 2, 30, + 30, 2,113,113,113,113,113,113,113,113,113,113,113,113,113, 2, + 2,113,113,113,113,113,113,113,113, 2,132,132,132,132,132,132, + 132,132,132,132,132,132, 2, 2, 2, 2,132,132, 2, 2, 2, 2, + 132,132, 3, 3, 3, 3, 2, 3, 3, 3, 2, 3, 3, 2, 3, 2, + 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, + 3, 3, 2, 3, 2, 3, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, + 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 2, 3, 2, 3, 2, 3, + 2, 3, 2, 3, 3, 3, 3, 2, 3, 2, 3, 3, 2, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 3, 3, 3, 2, 3, + 3, 3, 2, 2, 2, 2, 2, 2, 0, 0, 15, 0, 0, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 13, 2, 2, 2, 2, 2, + 2, 2, 13, 13, 13, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, + 2, 2, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 9, 9, 10, 9, 11, 12, 13, 9, 9, 9, 14, 9, 9, 15, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, @@ -6424,104 +5046,376 @@ _hb_ucd_u8[13344] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, }; static const uint16_t -_hb_ucd_u16[4848] = +_hb_ucd_u16[9200] = { 0, 0, 1, 2, 3, 4, 5, 6, 0, 0, 7, 8, 9, 10, 11, 12, 13, 13, 13, 14, 15, 13, 13, 16, 17, 18, 19, 20, 21, 22, 13, 23, 13, 13, 13, 24, 25, 11, 11, 11, 11, 26, 11, 27, 28, 29, 30, 31, 32, 32, 32, 32, 32, 32, 32, 33, 34, 35, 36, 11, 37, 38, 13, 39, 9, 9, 9, 11, 11, 11, 13, 13, 40, 13, 13, 13, 41, 13, 13, 13, - 13, 13, 13, 35, 9, 42, 11, 11, 43, 44, 32, 45, 46, 47, 47, 48, - 49, 50, 47, 47, 51, 32, 52, 53, 47, 47, 47, 47, 47, 54, 55, 56, - 57, 58, 47, 32, 59, 47, 47, 47, 47, 47, 60, 53, 61, 47, 62, 63, - 47, 64, 65, 66, 47, 67, 47, 47, 47, 47, 47, 47, 47, 68, 69, 32, - 70, 47, 47, 71, 72, 73, 74, 75, 76, 47, 47, 77, 78, 79, 80, 81, - 82, 47, 47, 83, 84, 85, 86, 87, 82, 47, 47, 77, 88, 47, 80, 89, - 90, 47, 47, 91, 92, 93, 80, 94, 95, 47, 47, 96, 97, 98, 99, 100, - 101, 47, 47, 102, 103, 104, 80, 105, 106, 47, 47, 91, 107, 108, 80, 109, - 110, 47, 47, 111, 112, 113, 80, 114, 90, 47, 47, 47, 115, 116, 99, 117, - 47, 47, 47, 118, 119, 120, 66, 66, 47, 47, 47, 121, 122, 123, 47, 47, - 124, 125, 126, 127, 47, 47, 47, 128, 129, 32, 32, 130, 131, 132, 66, 66, - 47, 47, 133, 134, 120, 135, 136, 137, 138, 139, 9, 9, 9, 11, 11, 140, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 141, 142, 143, - 47, 144, 9, 9, 9, 9, 9, 145, 146, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 147, 47, 148, 149, 47, 47, 47, 47, 150, 151, - 47, 152, 47, 153, 47, 152, 47, 152, 47, 47, 47, 154, 155, 156, 157, 143, - 158, 157, 47, 47, 159, 47, 47, 47, 160, 47, 161, 47, 47, 47, 47, 47, - 47, 47, 162, 163, 164, 47, 47, 47, 47, 47, 47, 47, 47, 165, 144, 144, - 47, 166, 47, 47, 47, 167, 168, 169, 157, 157, 170, 171, 32, 32, 32, 32, - 172, 47, 47, 173, 174, 120, 175, 176, 177, 47, 178, 61, 47, 47, 179, 180, - 47, 47, 181, 182, 183, 61, 47, 184, 11, 9, 9, 9, 66, 185, 186, 187, - 11, 11, 188, 27, 27, 27, 189, 190, 11, 191, 27, 27, 32, 32, 32, 32, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 192, 13, 13, 13, 13, 13, 13, - 193, 193, 193, 193, 193, 194, 193, 11, 195, 195, 195, 196, 197, 198, 198, 197, - 199, 200, 201, 202, 203, 204, 205, 206, 207, 27, 208, 208, 208, 209, 210, 32, - 211, 212, 213, 214, 215, 143, 216, 216, 217, 218, 219, 144, 220, 221, 144, 222, - 223, 223, 223, 223, 223, 223, 223, 223, 224, 144, 225, 144, 144, 144, 144, 226, - 144, 227, 223, 228, 144, 229, 230, 144, 144, 144, 144, 144, 144, 144, 143, 143, - 143, 231, 144, 144, 144, 144, 232, 143, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 233, 234, 144, 144, 235, 144, 144, 144, 144, 144, 144, 236, 144, - 144, 144, 144, 144, 144, 144, 237, 238, 143, 239, 144, 144, 240, 223, 241, 223, - 242, 243, 223, 223, 223, 244, 223, 245, 144, 144, 144, 223, 246, 144, 144, 144, - 9, 9, 9, 11, 11, 11, 247, 248, 13, 13, 13, 13, 13, 13, 249, 250, - 11, 11, 11, 47, 47, 47, 251, 252, 47, 47, 47, 47, 47, 47, 32, 32, - 253, 254, 255, 256, 257, 258, 66, 66, 259, 260, 261, 262, 263, 47, 47, 47, - 47, 264, 146, 47, 47, 47, 47, 265, 47, 266, 47, 47, 144, 144, 144, 47, - 144, 144, 267, 144, 268, 269, 144, 144, 267, 144, 144, 269, 144, 144, 144, 144, - 47, 47, 47, 47, 144, 144, 144, 144, 47, 270, 47, 47, 47, 47, 47, 47, - 47, 144, 144, 144, 144, 47, 47, 184, 271, 47, 61, 47, 13, 13, 272, 273, - 13, 274, 47, 47, 47, 47, 275, 276, 31, 277, 278, 279, 13, 13, 13, 280, - 281, 282, 283, 284, 285, 11, 11, 286, 287, 47, 288, 289, 47, 47, 47, 290, - 291, 47, 47, 292, 293, 157, 32, 294, 61, 47, 295, 47, 296, 297, 47, 47, - 70, 47, 47, 298, 299, 300, 301, 61, 47, 47, 302, 303, 304, 305, 47, 306, - 47, 47, 47, 307, 58, 308, 309, 310, 47, 47, 47, 11, 11, 311, 312, 11, - 11, 11, 11, 11, 47, 47, 313, 157, 314, 314, 314, 314, 314, 314, 314, 314, - 315, 315, 315, 315, 315, 315, 315, 315, 11, 316, 317, 47, 47, 47, 47, 47, - 47, 47, 47, 318, 31, 319, 47, 47, 47, 47, 47, 320, 321, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 322, 32, 323, 32, 324, 325, 326, 327, 47, - 47, 47, 47, 47, 47, 47, 47, 328, 329, 2, 3, 4, 5, 330, 331, 332, - 47, 333, 47, 47, 47, 47, 334, 335, 336, 143, 143, 337, 216, 216, 216, 338, - 339, 144, 144, 144, 144, 144, 144, 340, 341, 341, 341, 341, 341, 341, 341, 341, - 47, 47, 47, 47, 47, 47, 342, 143, 47, 47, 343, 47, 344, 47, 47, 60, - 47, 345, 47, 47, 47, 346, 216, 216, 9, 9, 145, 11, 11, 47, 47, 47, - 47, 47, 157, 9, 9, 145, 11, 11, 47, 47, 47, 47, 47, 47, 345, 66, - 47, 47, 47, 47, 47, 347, 47, 348, 47, 47, 349, 143, 143, 143, 47, 350, - 47, 351, 47, 345, 66, 66, 66, 66, 47, 47, 47, 352, 143, 143, 143, 143, - 353, 47, 47, 354, 143, 66, 47, 355, 47, 356, 143, 143, 357, 47, 358, 66, - 47, 47, 47, 359, 47, 360, 47, 360, 47, 359, 142, 143, 143, 143, 143, 143, - 9, 9, 9, 9, 11, 11, 11, 361, 47, 47, 362, 157, 157, 157, 157, 157, - 143, 143, 143, 143, 143, 143, 143, 143, 47, 47, 363, 47, 47, 47, 47, 47, - 47, 356, 364, 47, 60, 365, 66, 66, 47, 47, 47, 47, 366, 143, 47, 47, - 367, 47, 47, 354, 368, 369, 370, 371, 177, 47, 47, 372, 373, 47, 47, 157, - 95, 47, 374, 375, 376, 47, 47, 377, 177, 47, 47, 378, 379, 380, 381, 143, - 47, 47, 382, 383, 32, 32, 32, 32, 47, 47, 359, 47, 47, 384, 169, 157, - 90, 47, 47, 111, 385, 386, 387, 32, 47, 47, 47, 388, 389, 390, 47, 47, - 47, 47, 47, 391, 392, 157, 157, 157, 47, 47, 393, 394, 395, 396, 32, 32, - 47, 47, 47, 397, 398, 157, 66, 66, 47, 47, 399, 400, 157, 157, 157, 157, - 47, 141, 401, 402, 144, 144, 144, 144, 47, 47, 382, 403, 66, 66, 66, 66, - 9, 9, 9, 9, 11, 11, 126, 404, 47, 47, 47, 405, 406, 157, 157, 157, - 47, 47, 47, 47, 47, 407, 408, 409, 410, 47, 47, 411, 412, 413, 47, 47, - 414, 415, 66, 66, 47, 47, 47, 47, 47, 47, 393, 416, 417, 126, 143, 418, - 47, 152, 419, 420, 32, 32, 32, 32, 47, 47, 47, 353, 421, 157, 47, 47, - 422, 423, 157, 157, 157, 157, 157, 157, 47, 47, 47, 47, 47, 47, 47, 424, - 47, 47, 47, 47, 143, 425, 426, 427, 216, 216, 216, 216, 216, 216, 216, 66, - 47, 47, 47, 205, 205, 205, 205, 205, 47, 47, 47, 47, 47, 47, 300, 66, - 47, 47, 47, 47, 47, 47, 47, 428, 47, 47, 47, 429, 430, 431, 432, 47, - 9, 9, 9, 9, 9, 9, 11, 11, 143, 433, 66, 66, 66, 66, 66, 66, - 47, 47, 47, 47, 384, 434, 409, 409, 435, 436, 27, 27, 27, 27, 437, 409, - 47, 438, 205, 205, 205, 205, 205, 205, 144, 144, 144, 144, 144, 144, 439, 440, - 441, 144, 442, 144, 144, 144, 144, 144, 144, 144, 144, 144, 443, 144, 144, 144, - 9, 444, 11, 445, 446, 11, 193, 9, 447, 448, 9, 449, 11, 9, 444, 11, - 445, 446, 11, 193, 9, 447, 448, 9, 449, 11, 9, 444, 11, 445, 446, 11, - 193, 9, 447, 448, 9, 449, 11, 9, 444, 11, 193, 9, 450, 451, 452, 453, - 11, 454, 9, 455, 456, 457, 458, 11, 459, 9, 460, 11, 461, 157, 157, 157, - 32, 32, 32, 462, 32, 32, 463, 464, 465, 466, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 47, 47, 47, 467, 468, 144, 144, 144, - 47, 47, 47, 47, 47, 47, 469, 470, 47, 47, 47, 47, 349, 32, 32, 32, - 9, 9, 447, 11, 471, 300, 66, 66, 143, 143, 472, 473, 143, 143, 143, 143, - 143, 143, 474, 143, 143, 143, 143, 143, 47, 47, 47, 47, 47, 47, 47, 223, - 475, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 476, - 144, 144, 144, 144, 144, 144, 144, 157, 205, 205, 205, 205, 205, 205, 205, 205, + 13, 13, 13, 42, 9, 43, 11, 11, 44, 45, 32, 46, 47, 48, 49, 50, + 51, 52, 48, 48, 53, 32, 54, 55, 48, 48, 48, 48, 48, 56, 57, 58, + 59, 60, 48, 32, 61, 48, 48, 48, 48, 48, 62, 63, 64, 48, 65, 66, + 48, 67, 68, 69, 48, 70, 71, 48, 72, 73, 48, 48, 74, 32, 75, 32, + 76, 48, 48, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 83, 84, 91, 92, 93, 94, 95, 96, 97, 84, 98, 99, 100, 88, 101, + 102, 83, 84, 103, 104, 105, 88, 106, 107, 108, 109, 110, 111, 112, 94, 113, + 114, 115, 84, 116, 117, 118, 88, 119, 120, 115, 84, 121, 122, 123, 88, 124, + 125, 115, 48, 126, 127, 128, 88, 129, 130, 131, 48, 132, 133, 134, 94, 135, + 136, 48, 48, 137, 138, 139, 140, 140, 141, 48, 142, 143, 144, 145, 140, 140, + 146, 147, 148, 149, 150, 48, 151, 152, 153, 154, 32, 155, 156, 157, 140, 140, + 48, 48, 158, 159, 160, 161, 162, 163, 164, 165, 9, 9, 166, 11, 11, 167, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 168, 169, 48, 48, + 168, 48, 48, 170, 171, 172, 48, 48, 48, 171, 48, 48, 48, 173, 174, 175, + 48, 176, 9, 9, 9, 9, 9, 177, 178, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 179, 48, 180, 181, 48, 48, 48, 48, 182, 183, + 48, 184, 48, 185, 48, 186, 187, 188, 48, 48, 48, 189, 190, 191, 192, 193, + 194, 192, 48, 48, 195, 48, 48, 196, 197, 48, 198, 48, 48, 48, 48, 199, + 48, 200, 201, 202, 203, 48, 204, 205, 48, 48, 206, 48, 207, 208, 209, 209, + 48, 210, 48, 48, 48, 211, 212, 213, 192, 192, 214, 215, 216, 140, 140, 140, + 217, 48, 48, 218, 219, 160, 220, 221, 222, 48, 223, 64, 48, 48, 224, 225, + 48, 48, 226, 227, 228, 64, 48, 229, 230, 9, 9, 231, 232, 233, 234, 235, + 11, 11, 236, 27, 27, 27, 237, 238, 11, 239, 27, 27, 32, 32, 32, 32, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 240, 13, 13, 13, 13, 13, 13, + 241, 242, 241, 241, 242, 243, 241, 244, 245, 245, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 272, 273, 274, 275, 209, 276, 277, 209, 278, + 279, 279, 279, 279, 279, 279, 279, 279, 280, 209, 281, 209, 209, 209, 209, 282, + 209, 283, 279, 284, 209, 285, 286, 209, 209, 209, 287, 140, 288, 140, 271, 271, + 271, 289, 209, 209, 209, 209, 290, 271, 209, 209, 209, 209, 209, 209, 209, 209, + 209, 209, 209, 291, 292, 209, 209, 293, 209, 209, 209, 209, 209, 209, 294, 209, + 209, 209, 209, 209, 209, 209, 295, 296, 271, 297, 209, 209, 298, 279, 299, 279, + 300, 301, 279, 279, 279, 302, 279, 303, 209, 209, 209, 279, 304, 209, 209, 305, + 209, 306, 209, 209, 209, 209, 209, 209, 9, 9, 9, 11, 11, 11, 307, 308, + 13, 13, 13, 13, 13, 13, 309, 310, 11, 11, 311, 48, 48, 48, 312, 313, + 48, 314, 315, 315, 315, 315, 32, 32, 316, 317, 318, 319, 320, 321, 140, 140, + 209, 322, 209, 209, 209, 209, 209, 323, 209, 209, 209, 209, 209, 324, 140, 325, + 326, 327, 328, 329, 136, 48, 48, 48, 48, 330, 178, 48, 48, 48, 48, 331, + 332, 48, 48, 136, 48, 48, 48, 48, 200, 333, 48, 48, 209, 209, 323, 48, + 209, 334, 335, 209, 336, 337, 209, 209, 335, 209, 209, 337, 209, 209, 209, 209, + 48, 48, 48, 48, 209, 209, 209, 209, 48, 338, 48, 48, 48, 48, 48, 48, + 151, 209, 209, 209, 287, 48, 48, 229, 339, 48, 340, 140, 13, 13, 341, 342, + 13, 343, 48, 48, 48, 48, 344, 345, 31, 346, 347, 348, 13, 13, 13, 349, + 350, 351, 352, 353, 354, 355, 140, 356, 357, 48, 358, 359, 48, 48, 48, 360, + 361, 48, 48, 362, 363, 192, 32, 364, 64, 48, 365, 48, 366, 367, 48, 151, + 76, 48, 48, 368, 369, 370, 371, 372, 48, 48, 373, 374, 375, 376, 48, 377, + 48, 48, 48, 378, 379, 380, 381, 382, 383, 384, 315, 11, 11, 385, 386, 11, + 11, 11, 11, 11, 48, 48, 387, 192, 48, 48, 388, 48, 389, 48, 48, 206, + 390, 390, 390, 390, 390, 390, 390, 390, 391, 391, 391, 391, 391, 391, 391, 391, + 48, 48, 48, 48, 48, 48, 204, 48, 48, 48, 48, 48, 48, 207, 140, 140, + 392, 393, 394, 395, 396, 48, 48, 48, 48, 48, 48, 397, 398, 399, 48, 48, + 48, 48, 48, 400, 209, 48, 48, 48, 48, 401, 48, 48, 402, 140, 140, 403, + 32, 404, 32, 405, 406, 407, 408, 409, 48, 48, 48, 48, 48, 48, 48, 410, + 411, 2, 3, 4, 5, 412, 413, 414, 48, 415, 48, 200, 416, 417, 418, 419, + 420, 48, 172, 421, 204, 204, 140, 140, 48, 48, 48, 48, 48, 48, 48, 71, + 422, 271, 271, 423, 272, 272, 272, 424, 425, 426, 427, 140, 140, 209, 209, 428, + 140, 140, 140, 140, 140, 140, 140, 140, 48, 151, 48, 48, 48, 100, 429, 430, + 48, 48, 431, 48, 432, 48, 48, 433, 48, 434, 48, 48, 435, 436, 140, 140, + 9, 9, 437, 11, 11, 48, 48, 48, 48, 204, 192, 9, 9, 438, 11, 439, + 48, 48, 440, 48, 48, 48, 441, 442, 442, 443, 444, 445, 140, 140, 140, 140, + 48, 48, 48, 314, 48, 199, 440, 140, 446, 27, 27, 447, 140, 140, 140, 140, + 448, 48, 48, 449, 48, 450, 48, 451, 48, 200, 452, 140, 140, 140, 48, 453, + 48, 454, 48, 455, 140, 140, 140, 140, 48, 48, 48, 456, 271, 457, 271, 271, + 458, 459, 48, 460, 461, 462, 48, 463, 48, 464, 140, 140, 465, 48, 466, 467, + 48, 48, 48, 468, 48, 469, 48, 470, 48, 471, 472, 140, 140, 140, 140, 140, + 48, 48, 48, 48, 196, 140, 140, 140, 9, 9, 9, 473, 11, 11, 11, 474, + 48, 48, 475, 192, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 271, 476, + 48, 48, 477, 478, 140, 140, 140, 140, 48, 464, 479, 48, 62, 480, 140, 48, + 481, 140, 140, 48, 482, 140, 48, 314, 483, 48, 48, 484, 485, 457, 486, 487, + 222, 48, 48, 488, 489, 48, 196, 192, 490, 48, 491, 492, 493, 48, 48, 494, + 222, 48, 48, 495, 496, 497, 498, 499, 48, 97, 500, 501, 140, 140, 140, 140, + 502, 503, 504, 48, 48, 505, 506, 192, 507, 83, 84, 508, 509, 510, 511, 512, + 48, 48, 48, 513, 514, 515, 478, 140, 48, 48, 48, 516, 517, 192, 140, 140, + 48, 48, 518, 519, 520, 521, 140, 140, 48, 48, 48, 522, 523, 192, 524, 140, + 48, 48, 525, 526, 192, 140, 140, 140, 48, 173, 527, 528, 314, 140, 140, 140, + 48, 48, 500, 529, 140, 140, 140, 140, 140, 140, 9, 9, 11, 11, 148, 530, + 531, 532, 48, 533, 534, 192, 140, 140, 140, 140, 535, 48, 48, 536, 537, 140, + 538, 48, 48, 539, 540, 541, 48, 48, 542, 543, 544, 48, 48, 48, 48, 196, + 84, 48, 518, 545, 546, 148, 175, 547, 48, 548, 549, 550, 140, 140, 140, 140, + 551, 48, 48, 552, 553, 192, 554, 48, 555, 556, 192, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 48, 557, 140, 140, 140, 100, 271, 558, 559, 560, + 48, 207, 140, 140, 140, 140, 140, 140, 272, 272, 272, 272, 272, 272, 561, 562, + 48, 48, 48, 48, 388, 140, 140, 140, 140, 48, 48, 48, 48, 48, 48, 563, + 48, 48, 200, 564, 140, 140, 140, 140, 48, 48, 48, 48, 314, 140, 140, 140, + 48, 48, 48, 196, 48, 200, 370, 48, 48, 48, 48, 200, 192, 48, 204, 565, + 48, 48, 48, 566, 567, 568, 569, 570, 48, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 9, 9, 11, 11, 271, 571, 140, 140, 140, 140, 140, 140, + 48, 48, 48, 48, 572, 573, 574, 574, 575, 576, 140, 140, 140, 140, 577, 578, + 48, 48, 48, 48, 48, 48, 48, 440, 48, 48, 48, 48, 48, 199, 140, 140, + 196, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 579, + 48, 48, 580, 140, 140, 580, 581, 48, 48, 48, 48, 48, 48, 48, 48, 206, + 48, 48, 48, 48, 48, 48, 71, 151, 196, 582, 583, 140, 140, 140, 140, 140, + 32, 32, 584, 32, 585, 209, 209, 209, 209, 209, 209, 209, 323, 140, 140, 140, + 209, 209, 209, 209, 209, 209, 209, 324, 209, 209, 586, 209, 209, 209, 587, 588, + 589, 209, 590, 209, 209, 209, 288, 140, 209, 209, 209, 209, 591, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 271, 592, 209, 209, 209, 209, 209, 287, 271, 461, + 9, 593, 11, 594, 595, 596, 241, 9, 597, 598, 599, 600, 601, 9, 593, 11, + 602, 603, 11, 604, 605, 606, 607, 9, 608, 11, 9, 593, 11, 594, 595, 11, + 241, 9, 597, 607, 9, 608, 11, 9, 593, 11, 609, 9, 610, 611, 612, 613, + 11, 614, 9, 615, 616, 617, 618, 11, 619, 9, 620, 11, 621, 622, 622, 622, + 32, 32, 32, 623, 32, 32, 624, 625, 626, 627, 45, 140, 140, 140, 140, 140, + 628, 629, 140, 140, 140, 140, 140, 140, 630, 631, 632, 140, 140, 140, 140, 140, + 48, 48, 151, 633, 634, 140, 140, 140, 140, 48, 635, 140, 48, 48, 636, 637, + 140, 140, 140, 140, 140, 140, 638, 200, 48, 48, 48, 48, 639, 585, 140, 140, + 9, 9, 597, 11, 640, 370, 140, 140, 140, 140, 140, 140, 140, 140, 140, 498, + 271, 271, 641, 642, 140, 140, 140, 140, 498, 271, 643, 644, 140, 140, 140, 140, + 645, 48, 646, 647, 648, 649, 650, 651, 652, 206, 653, 206, 140, 140, 140, 654, + 209, 209, 325, 209, 209, 209, 209, 209, 209, 323, 334, 655, 655, 655, 209, 324, + 656, 209, 209, 209, 209, 209, 209, 209, 209, 209, 657, 140, 140, 140, 658, 209, + 659, 209, 209, 325, 660, 661, 324, 140, 209, 209, 209, 209, 209, 209, 209, 662, + 209, 209, 209, 209, 209, 663, 426, 426, 209, 209, 209, 209, 209, 209, 209, 323, + 209, 209, 209, 209, 209, 660, 325, 427, 325, 209, 209, 209, 664, 176, 209, 209, + 664, 209, 657, 661, 140, 140, 140, 140, 209, 209, 209, 209, 209, 323, 657, 665, + 287, 209, 426, 288, 324, 176, 664, 287, 209, 666, 209, 209, 288, 140, 140, 192, + 48, 48, 48, 48, 48, 48, 140, 140, 48, 48, 48, 196, 48, 48, 48, 48, + 48, 204, 48, 48, 48, 48, 48, 48, 48, 48, 478, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 100, 140, 48, 204, 140, 140, 140, 140, 140, 140, + 48, 48, 48, 48, 71, 140, 140, 140, 667, 140, 668, 668, 668, 668, 668, 668, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 140, + 391, 391, 391, 391, 391, 391, 391, 669, 391, 391, 391, 391, 391, 391, 391, 670, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 3, 1, 2, 2, 3, + 0, 0, 0, 0, 0, 4, 0, 4, 2, 2, 5, 2, 2, 2, 5, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 6, 0, 0, 0, 0, 7, 8, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 11, + 12, 13, 14, 14, 15, 14, 14, 14, 14, 14, 14, 14, 16, 17, 14, 14, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 19, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 20, 21, 21, 21, 22, 20, 21, 21, 21, 21, + 21, 23, 24, 25, 25, 25, 25, 25, 25, 26, 25, 25, 25, 27, 28, 26, + 29, 30, 31, 32, 31, 31, 31, 31, 33, 34, 35, 31, 31, 31, 36, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 29, 31, 31, 31, 31, + 37, 38, 37, 37, 37, 37, 37, 37, 37, 39, 31, 31, 31, 31, 31, 31, + 40, 40, 40, 40, 40, 40, 41, 26, 42, 42, 42, 42, 42, 42, 42, 43, + 44, 44, 44, 44, 44, 45, 44, 46, 47, 47, 47, 48, 37, 49, 31, 31, + 31, 50, 51, 31, 31, 31, 31, 31, 31, 31, 31, 31, 52, 31, 31, 31, + 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 54, 53, 55, 53, 53, 53, + 56, 57, 58, 59, 59, 60, 61, 62, 57, 63, 64, 65, 66, 59, 59, 67, + 68, 69, 70, 71, 71, 72, 73, 74, 69, 75, 76, 77, 78, 71, 79, 26, + 80, 81, 82, 83, 83, 84, 85, 86, 81, 87, 88, 26, 89, 83, 90, 91, + 92, 93, 94, 95, 95, 96, 97, 98, 93, 99, 100, 101, 102, 95, 95, 26, + 103, 104, 105, 106, 107, 104, 108, 109, 104, 105, 110, 26, 111, 108, 108, 112, + 113, 114, 115, 113, 113, 115, 113, 116, 114, 117, 118, 119, 120, 113, 121, 113, + 122, 123, 124, 122, 122, 124, 125, 126, 123, 127, 128, 128, 129, 122, 130, 26, + 131, 132, 133, 131, 131, 131, 131, 131, 132, 133, 134, 131, 135, 131, 131, 131, + 136, 137, 138, 139, 137, 137, 140, 141, 138, 142, 143, 137, 144, 137, 145, 26, + 146, 147, 147, 147, 147, 147, 147, 148, 147, 147, 147, 149, 26, 26, 26, 26, + 150, 151, 152, 152, 153, 152, 152, 154, 155, 154, 152, 156, 26, 26, 26, 26, + 157, 157, 157, 157, 157, 157, 157, 157, 157, 158, 157, 157, 157, 159, 158, 157, + 157, 157, 157, 158, 157, 157, 157, 160, 157, 160, 161, 162, 26, 26, 26, 26, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 164, 164, 164, 164, 165, 166, 164, 164, 164, 164, 164, 167, + 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 170, 171, 170, 169, 169, 169, 169, + 169, 170, 169, 169, 169, 169, 170, 171, 170, 169, 171, 169, 169, 169, 169, 169, + 169, 169, 170, 169, 169, 169, 169, 169, 169, 169, 169, 172, 169, 169, 169, 173, + 169, 169, 169, 174, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 176, 176, + 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, + 178, 178, 178, 179, 180, 180, 180, 180, 180, 180, 180, 180, 180, 181, 180, 182, + 183, 183, 184, 185, 186, 186, 187, 26, 188, 188, 189, 26, 190, 191, 192, 26, + 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 194, 193, 195, 193, 195, + 196, 197, 197, 198, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 199, + 197, 197, 197, 197, 197, 200, 177, 177, 177, 177, 177, 177, 177, 177, 201, 26, + 202, 202, 202, 203, 202, 204, 202, 204, 205, 202, 206, 206, 206, 207, 208, 26, + 209, 209, 209, 209, 209, 210, 209, 209, 209, 211, 209, 212, 193, 193, 193, 193, + 213, 213, 213, 214, 215, 215, 215, 215, 215, 215, 215, 216, 215, 215, 215, 217, + 215, 218, 215, 218, 215, 219, 9, 9, 9, 220, 26, 26, 26, 26, 26, 26, + 221, 221, 221, 221, 221, 221, 221, 221, 221, 222, 221, 221, 221, 221, 221, 223, + 224, 224, 224, 224, 224, 224, 224, 224, 225, 225, 225, 225, 225, 225, 226, 227, + 228, 228, 228, 228, 228, 228, 228, 229, 228, 230, 231, 231, 231, 231, 231, 231, + 18, 232, 164, 164, 164, 164, 164, 233, 224, 26, 234, 9, 235, 236, 237, 238, + 2, 2, 2, 2, 239, 240, 2, 2, 2, 2, 2, 241, 242, 243, 2, 244, + 2, 2, 2, 2, 2, 2, 2, 245, 9, 9, 9, 9, 9, 9, 9, 9, + 14, 14, 246, 246, 14, 14, 14, 14, 246, 246, 14, 247, 14, 14, 14, 246, + 14, 14, 14, 14, 14, 14, 248, 14, 248, 14, 249, 250, 14, 14, 251, 252, + 0, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 255, 256, + 0, 257, 2, 258, 0, 0, 0, 0, 259, 26, 9, 9, 9, 9, 260, 26, + 0, 0, 0, 0, 261, 262, 4, 0, 0, 263, 0, 0, 2, 2, 2, 2, + 2, 264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 257, 26, 26, 26, 0, 265, 26, 26, 0, 0, 0, 0, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 267, 0, + 0, 0, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 2, 2, 2, 2, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 270, 271, + 164, 164, 164, 164, 165, 166, 272, 272, 272, 272, 272, 272, 272, 273, 274, 273, + 169, 169, 171, 26, 171, 171, 171, 171, 171, 171, 171, 171, 18, 18, 18, 18, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 26, 26, 26, 26, + 276, 276, 276, 277, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 278, 26, + 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, + 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 279, 26, 26, 26, 0, 280, + 281, 0, 0, 0, 282, 283, 0, 284, 285, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 287, 288, 289, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 291, + 292, 293, 293, 293, 293, 293, 294, 168, 168, 168, 168, 168, 168, 168, 168, 168, + 168, 295, 0, 0, 293, 293, 293, 293, 0, 0, 0, 0, 280, 26, 290, 290, + 168, 168, 168, 295, 0, 0, 0, 0, 0, 0, 0, 0, 168, 168, 168, 296, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 290, 290, 290, 290, 297, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 0, 0, 0, 0, 0, + 276, 276, 276, 276, 276, 276, 276, 276, 0, 0, 0, 0, 0, 0, 0, 0, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 299, 298, 298, 298, 298, 298, 298, 300, 26, 301, 301, 301, 301, 301, 301, + 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, + 302, 302, 302, 302, 302, 303, 26, 26, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 26, + 0, 0, 0, 0, 305, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 306, 2, 2, 2, 2, 2, 2, 2, 307, 308, 309, 26, 26, 310, 2, + 311, 311, 311, 311, 311, 312, 0, 313, 314, 314, 314, 314, 314, 314, 314, 26, + 315, 315, 315, 315, 315, 315, 315, 315, 316, 317, 315, 318, 53, 53, 53, 53, + 319, 319, 319, 319, 319, 320, 321, 321, 321, 321, 322, 323, 168, 168, 168, 324, + 325, 325, 325, 325, 325, 325, 325, 325, 325, 326, 325, 327, 163, 163, 163, 328, + 329, 329, 329, 329, 329, 329, 330, 26, 329, 331, 329, 332, 163, 163, 163, 163, + 333, 333, 333, 333, 333, 333, 333, 333, 334, 26, 26, 335, 336, 336, 337, 26, + 338, 338, 338, 26, 171, 171, 2, 2, 2, 2, 2, 339, 340, 341, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 336, 336, 336, 336, 336, 342, 336, 343, + 168, 168, 168, 168, 344, 26, 168, 168, 295, 345, 168, 168, 168, 168, 168, 344, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 279, 276, 276, + 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 346, 26, 26, 26, 26, + 347, 26, 348, 349, 25, 25, 350, 351, 352, 25, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 353, 26, 354, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 355, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 356, 31, 31, 31, 31, 31, 31, 357, 26, 26, 26, 26, 31, 31, + 9, 9, 0, 313, 9, 358, 0, 0, 0, 0, 359, 0, 257, 280, 360, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 361, + 362, 0, 0, 0, 1, 2, 2, 3, 1, 2, 2, 3, 363, 290, 289, 290, + 290, 290, 290, 364, 168, 168, 168, 295, 365, 365, 365, 366, 257, 257, 26, 367, + 368, 369, 368, 368, 370, 368, 368, 371, 368, 372, 368, 372, 26, 26, 26, 26, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 373, + 374, 0, 0, 0, 0, 0, 375, 0, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 252, 0, 376, 377, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 378, + 379, 379, 379, 380, 381, 381, 381, 381, 381, 381, 382, 26, 383, 0, 0, 280, + 384, 384, 384, 384, 385, 386, 387, 387, 387, 388, 389, 389, 389, 389, 389, 390, + 391, 391, 391, 392, 393, 393, 393, 393, 394, 393, 395, 26, 26, 26, 26, 26, + 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 397, 397, 397, 397, 397, 397, + 398, 398, 398, 399, 398, 400, 401, 401, 401, 401, 402, 401, 401, 401, 401, 402, + 403, 403, 403, 403, 403, 26, 404, 404, 404, 404, 404, 404, 405, 406, 407, 408, + 407, 408, 409, 407, 410, 407, 410, 411, 26, 26, 26, 26, 26, 26, 26, 26, + 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, + 412, 412, 412, 412, 412, 412, 413, 26, 412, 412, 414, 26, 412, 26, 26, 26, + 415, 2, 2, 2, 2, 2, 416, 307, 26, 26, 26, 26, 26, 26, 26, 26, + 417, 418, 419, 419, 419, 419, 420, 421, 422, 422, 423, 422, 424, 424, 424, 424, + 425, 425, 425, 426, 427, 425, 26, 26, 26, 26, 26, 26, 428, 428, 429, 430, + 431, 431, 431, 432, 433, 433, 433, 434, 26, 26, 26, 26, 26, 26, 26, 26, + 435, 435, 435, 435, 436, 436, 436, 437, 436, 436, 438, 436, 436, 436, 436, 436, + 439, 440, 441, 442, 443, 443, 444, 445, 443, 446, 443, 446, 447, 447, 447, 447, + 448, 448, 448, 448, 26, 26, 26, 26, 449, 449, 449, 449, 450, 451, 450, 26, + 452, 452, 452, 452, 452, 452, 453, 454, 455, 455, 456, 455, 457, 457, 458, 457, + 459, 459, 460, 461, 26, 462, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 463, 463, 463, 463, 463, 463, 463, 463, 463, 464, 26, 26, 26, 26, 26, 26, + 465, 465, 465, 465, 465, 465, 466, 26, 465, 465, 465, 465, 465, 465, 466, 467, + 468, 468, 468, 468, 468, 26, 468, 469, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 31, 31, 31, 50, + 470, 470, 470, 470, 470, 471, 472, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 473, 473, 473, 473, 473, 26, 474, 474, 474, 474, 474, 475, 26, 26, 476, 476, + 476, 477, 26, 26, 26, 26, 478, 478, 478, 479, 26, 26, 480, 480, 481, 26, + 482, 482, 482, 482, 482, 482, 482, 482, 482, 483, 484, 482, 482, 482, 483, 485, + 486, 486, 486, 486, 486, 486, 486, 486, 487, 488, 489, 489, 489, 490, 489, 491, + 492, 492, 492, 492, 492, 492, 493, 492, 492, 26, 494, 494, 494, 494, 495, 26, + 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 497, 137, 498, 26, + 499, 499, 500, 499, 499, 499, 499, 501, 26, 26, 26, 26, 26, 26, 26, 26, + 502, 503, 504, 505, 504, 506, 507, 507, 507, 507, 507, 507, 507, 508, 507, 509, + 510, 511, 512, 513, 513, 514, 515, 516, 511, 517, 518, 519, 520, 521, 521, 26, + 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 523, 524, 26, 26, 26, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 26, 525, 526, 26, 26, 26, 26, + 527, 527, 527, 527, 527, 527, 528, 527, 527, 527, 527, 528, 26, 26, 26, 26, + 529, 529, 529, 529, 529, 529, 529, 529, 530, 26, 529, 531, 197, 532, 26, 26, + 533, 533, 533, 533, 533, 533, 533, 534, 533, 534, 26, 26, 26, 26, 26, 26, + 535, 535, 535, 536, 535, 537, 535, 535, 538, 26, 26, 26, 26, 26, 26, 26, + 539, 539, 539, 539, 539, 539, 539, 540, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 542, 543, + 544, 545, 546, 547, 547, 547, 548, 549, 544, 26, 547, 550, 26, 26, 26, 26, + 26, 26, 26, 26, 551, 552, 551, 551, 551, 551, 551, 552, 553, 26, 26, 26, + 554, 554, 554, 554, 554, 554, 554, 554, 554, 26, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 556, 26, 177, 177, 557, 557, 557, 557, 557, 557, 557, 558, + 559, 560, 559, 559, 559, 559, 561, 559, 562, 26, 559, 559, 559, 563, 564, 564, + 564, 564, 565, 564, 564, 566, 567, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 568, 569, 570, 570, 570, 570, 568, 571, 570, 26, 570, 572, 573, 574, 575, 575, + 575, 576, 577, 578, 575, 579, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 580, 580, 580, 581, + 26, 26, 26, 26, 26, 26, 582, 26, 108, 108, 108, 108, 108, 108, 583, 584, + 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, + 585, 585, 585, 586, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 587, 588, 26, + 585, 585, 585, 585, 585, 585, 585, 585, 589, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 591, 26, + 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, + 592, 592, 592, 592, 592, 593, 592, 594, 26, 26, 26, 26, 26, 26, 26, 26, + 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, + 595, 595, 595, 595, 595, 595, 595, 595, 596, 26, 26, 26, 26, 26, 26, 26, + 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 597, 598, 598, 598, 599, 598, 600, 601, 601, + 601, 601, 601, 601, 601, 601, 601, 602, 601, 603, 604, 604, 604, 605, 605, 26, + 606, 606, 606, 606, 606, 606, 606, 606, 607, 26, 606, 608, 608, 606, 606, 609, + 606, 606, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 610, 610, 610, 610, 610, 610, 610, 610, + 610, 610, 610, 611, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 612, 612, 612, 612, 612, 612, 612, 612, 612, 613, 612, 612, 612, 612, 612, 612, + 612, 614, 612, 612, 26, 26, 26, 26, 26, 26, 26, 26, 615, 26, 346, 26, + 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, + 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 26, + 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, + 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 618, 26, 26, 26, 26, 26, + 616, 619, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 620, 621, + 622, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 623, 26, 26, 26, 26, 26, 624, 26, 625, 26, 626, 626, + 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, + 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 627, + 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 629, 628, 630, + 628, 631, 628, 632, 280, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 9, 9, 9, 9, 9, 633, 9, 9, 220, 26, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 280, 26, 26, 26, 26, 26, 26, 26, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 26, + 0, 0, 0, 0, 257, 362, 0, 0, 0, 0, 0, 0, 634, 635, 0, 636, + 637, 638, 0, 0, 0, 639, 0, 0, 0, 0, 0, 0, 0, 265, 26, 26, + 14, 14, 14, 14, 14, 14, 14, 14, 246, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 280, 26, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 257, 26, 0, 0, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, + 0, 0, 0, 254, 640, 641, 0, 642, 643, 0, 0, 0, 0, 0, 0, 0, + 268, 644, 254, 254, 0, 0, 0, 645, 646, 647, 648, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, 0, 0, 0, + 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, + 649, 650, 26, 651, 652, 649, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 2, 2, 2, 347, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 653, 269, 269, 654, 655, 656, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 657, 657, 657, 657, 657, 658, 657, 659, 657, 660, 26, 26, 26, 26, 26, 26, + 26, 26, 661, 661, 661, 662, 26, 26, 663, 663, 663, 663, 663, 663, 663, 664, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 171, 665, 169, 171, + 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, + 666, 666, 666, 666, 666, 666, 666, 666, 667, 666, 668, 26, 26, 26, 26, 26, + 669, 669, 669, 669, 669, 669, 669, 669, 669, 670, 669, 671, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 362, 0, + 0, 0, 0, 0, 0, 0, 376, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 362, 0, 0, 0, 0, 0, 0, 275, 26, 26, 26, 26, 26, 26, 26, 26, + 672, 31, 31, 31, 673, 674, 675, 676, 677, 678, 673, 679, 673, 675, 675, 680, + 31, 681, 31, 682, 683, 681, 31, 682, 26, 26, 26, 26, 26, 26, 51, 26, + 0, 0, 0, 0, 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 280, 26, 0, 257, 362, 0, 362, 0, 362, 0, 0, 0, 275, 26, + 0, 0, 0, 0, 0, 275, 26, 26, 26, 26, 26, 26, 684, 0, 0, 0, + 685, 26, 0, 0, 0, 0, 0, 280, 0, 259, 313, 26, 275, 26, 26, 26, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 686, 0, 376, 0, 376, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 280, 26, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 280, 259, 26, + 0, 280, 0, 0, 0, 0, 0, 0, 0, 26, 0, 313, 0, 0, 0, 0, + 0, 26, 0, 0, 0, 275, 313, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 280, 26, 0, 275, 376, 376, + 257, 26, 0, 0, 0, 376, 0, 265, 275, 26, 0, 313, 0, 26, 257, 26, + 0, 0, 359, 0, 0, 0, 0, 0, 0, 265, 26, 26, 26, 26, 0, 313, + 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 26, 26, 26, 26, + 276, 276, 276, 276, 276, 276, 276, 687, 276, 276, 276, 276, 276, 276, 276, 276, + 276, 276, 276, 279, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, + 276, 276, 276, 276, 346, 26, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, + 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 687, 26, 26, 26, + 276, 276, 276, 279, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 276, 276, 276, 276, 276, 276, 276, 276, 276, 688, 26, 26, 26, 26, 26, 26, + 689, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 939, 940, 941, 942, 946, 948, 0, 962, 969, 970, 971, 976,1001,1002,1003,1008, 0,1033,1040,1041,1042,1043,1047, 0, 0,1080,1081,1082,1086,1110, 0, 0, @@ -6731,25 +5625,1249 @@ _hb_ucd_u16[4848] = 930, 99, 931, 932, 933, 814, 100, 816, 817, 818, 819, 820, 821, 935, 0, 0, }; static const int16_t -_hb_ucd_i16[92] = +_hb_ucd_i16[196] = { - 0, 0, 1, -1, 2, 0, -2, 0, 0, 2, 0, -2, 0, 16, 0, -16, - 0, 1, -1, 0, 3, 3, 3, -3, -3, -3, 0, 2016, 0, 2527, 1923, 1914, - 1918, 0, 2250, 0, 0, 138, 0, 7, -7, 0, -1, 1, 1824, 0, 2104, 0, - 2108, 2106, 0, 2106, 1316, 0, -1, -138, 8, 8, 8, 0, 7, 7, -8, -8, - -8, -7,-1316, 1, -1, 3, -3, 1, 0,-1914,-1918, 0, 0,-1923,-1824, 0, - 0,-2016,-2104, 0, 0,-2106,-2108,-2106,-2250, 0,-2527, 0, + 0, 0, 0, 0, 1, -1, 0, 0, 2, 0, -2, 0, 0, 0, 0, 2, + 0, -2, 0, 0, 0, 0, 0, 16, 0, 0, 0, -16, 0, 0, 1, -1, + 0, 0, 0, 1, -1, 0, 0, 0, 0, 1, -1, 0, 3, 3, 3, -3, + -3, -3, 0, 0, 0, 2016, 0, 0, 0, 0, 0, 2527, 1923, 1914, 1918, 0, + 2250, 0, 0, 0, 0, 0, 0, 138, 0, 7, 0, 0, -7, 0, 0, 0, + 1, -1, 1, -1, -1, 1, -1, 0, 1824, 0, 0, 0, 0, 0, 2104, 0, + 2108, 2106, 0, 2106, 1316, 0, 0, 0, 0, 1, -1, 1, -1, -138, 0, 0, + 1, -1, 8, 8, 8, 0, 7, 7, 0, 0, -8, -8, -8, -7, -7, 0, + 1, -1, 0, 2,-1316, 1, -1, 0, -1, 1, -1, 1, -1, 3, 1, -1, + -3, 1, -1, 1, -1, 0, 0,-1914,-1918, 0, 0,-1923,-1824, 0, 0, 0, + 0,-2016, 0, 0, 1, -1, 0, 1, 0, 0,-2104, 0, 0, 0, 0,-2106, + -2108,-2106, 0, 0, 1, -1,-2250, 0, 0, 0,-2527, 0, 0, -2, 0, 1, + -1, 0, 1, -1, +}; + +static inline uint_fast8_t +_hb_ucd_gc (unsigned u) +{ + return u<1114110u?_hb_ucd_u8[6664+(((_hb_ucd_u8[1296+(((_hb_ucd_u16[((_hb_ucd_u8[544+(((_hb_ucd_u8[u>>1>>3>>3>>4])<<4)+((u>>1>>3>>3)&15u))])<<3)+((u>>1>>3)&7u)])<<3)+((u>>1)&7u))])<<1)+((u)&1u))]:2; +} +static inline uint_fast8_t +_hb_ucd_ccc (unsigned u) +{ + return u<125259u?_hb_ucd_u8[8984+(((_hb_ucd_u8[7960+(((_hb_ucd_u8[7288+(((_hb_ucd_u8[7042+(u>>2>>3>>4)])<<4)+((u>>2>>3)&15u))])<<3)+((u>>2)&7u))])<<2)+((u)&3u))]:0; +} +static inline unsigned +_hb_ucd_b4 (const uint8_t* a, unsigned i) +{ + return (a[i>>1]>>((i&1u)<<2))&15u; +} +static inline int_fast16_t +_hb_ucd_bmg (unsigned u) +{ + return u<65380u?_hb_ucd_i16[((_hb_ucd_u8[9728+(((_hb_ucd_u8[9608+(((_hb_ucd_b4(9480+_hb_ucd_u8,u>>2>>3>>3))<<3)+((u>>2>>3)&7u))])<<3)+((u>>2)&7u))])<<2)+((u)&3u)]:0; +} +static inline uint_fast8_t +_hb_ucd_sc (unsigned u) +{ + return u<918000u?_hb_ucd_u8[11234+(((_hb_ucd_u16[2000+(((_hb_ucd_u8[10514+(((_hb_ucd_u8[10064+(u>>3>>4>>4)])<<4)+((u>>3>>4)&15u))])<<4)+((u>>3)&15u))])<<3)+((u)&7u))]:2; +} +static inline uint_fast16_t +_hb_ucd_dm (unsigned u) +{ + return u<195102u?_hb_ucd_u16[5888+(((_hb_ucd_u8[17136+(((_hb_ucd_u8[16754+(u>>4>>5)])<<5)+((u>>4)&31u))])<<4)+((u)&15u))]:0; +} + + +#else + +static const uint8_t +_hb_ucd_u8[13602] = +{ + 0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 9, 10, 7, 7, 7, 7, 7, 11, 12, 12, 12, 13, + 14, 15, 16, 17, 18, 19, 20, 21, 22, 21, 21, 21, 21, 23, 7, 7, + 7, 24, 21, 21, 21, 25, 26, 27, 21, 28, 29, 30, 31, 32, 33, 34, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 35, 21, 36, + 7, 7, 37, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 38, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 34, 34, 34, 35, 36, 37, 34, 34, 34, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 62, 63, 64, 65, 66, 67, 68, 69, 67, 70, 71, + 67, 67, 62, 72, 62, 62, 73, 67, 74, 75, 76, 77, 78, 67, 67, 67, + 79, 80, 34, 81, 82, 83, 67, 67, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 84, 34, 34, 34, 34, + 85, 34, 34, 34, 34, 34, 34, 34, 34, 86, 34, 34, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 34, 34, 34, 34, 34, 34, 34, 34, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100, + 100,100, 34, 34, 34, 34,101,102, 34, 34,103,104,105,106,107,108, + 34, 34,109,110,111,112,113,114,115,116,117,118, 34, 34, 34,119, + 120,121,122,123,124,125,126,127, 34,128,129,111,130,131,132,133, + 134,135,136,137,138,139,140,111,141,142,111,143,144,145,146,111, + 147,148,149,150,151,152,111,111,153,154,155,156,111,157,111,158, + 34, 34, 34, 34, 34, 34, 34, 34,159, 34, 34,111,111,111,111,111, + 111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,160, + 34, 34, 34, 34, 34, 34, 34, 34,161,111,111,111,111,111,111,111, + 111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111, + 111,111,111,111,111,111,111,111, 34, 34, 34, 34, 34,111,111,111, + 34, 34, 34, 34,162,163,164, 34,111,111,111,111,165,166,167,168, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,111,111,111,111,111, + 111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,119, + 34, 34, 34, 34, 34, 34,111,111,111,111,111,111,111,111,111,111, + 111,111,111,111,111,111,111,111, 34,169,111,111,111,111,111,111, + 111,111,111,111,111,111,111,111,111,111,111,111,111,111,170, 67, + 67, 67,171,172,173,130, 65,111,174,175,176,177,178,179,180,181, + 67, 67, 67, 67,182,183,111,111,111,111,111,111,111,111,184,111, + 185,111,186,111,111,187,111,111,111,111,111,111,111,111,111, 34, + 34,188,189,111,111,111,111,111,130,190,191,111, 34,192,111,111, + 67, 67,193, 67, 67,111, 67,194, 67, 67, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67,195,111,111,111,111,111,111,111,111, + 34, 34, 34, 34, 34, 34, 34, 34,111,111,111,111,111,111,111,111, + 34, 34, 34, 34, 34,111,111,111,111,111,111,111,111,111,111,111, + 34, 34, 34, 34, 34, 34, 34,111,111,111,111,111,111,111,111,111, + 196,111,185,185,111,111,111,111,111,111,111,111,111,111,111,111, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 2, 4, 5, 6, 2, + 7, 7, 7, 7, 7, 2, 8, 9, 10, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 12, 13, 14, 15, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 17, 18, 19, 1, 20, 20, 21, 22, 23, 24, 25, + 26, 27, 15, 2, 28, 29, 27, 30, 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 31, 11, 11, 11, 32, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 33, 16, 16, 16, 16, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 34, 34, 34, 34, 34, 34, 34, 34, 16, 32, 32, 32, + 32, 32, 32, 32, 11, 34, 34, 16, 34, 32, 32, 11, 34, 11, 16, 11, + 11, 34, 32, 11, 32, 16, 11, 34, 32, 32, 32, 11, 34, 16, 32, 11, + 34, 11, 34, 34, 32, 35, 32, 16, 36, 36, 37, 34, 38, 37, 34, 34, + 34, 34, 34, 34, 34, 34, 16, 32, 34, 38, 32, 11, 32, 32, 32, 32, + 32, 32, 16, 16, 16, 11, 34, 32, 34, 34, 11, 32, 32, 32, 32, 32, + 16, 16, 39, 16, 16, 16, 16, 16, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 41, 41, 40, 40, 40, 40, 40, 40, 41, 41, 41, 41, 41, 41, 41, + 40, 40, 42, 41, 41, 41, 42, 42, 41, 41, 41, 41, 41, 41, 41, 41, + 43, 43, 43, 43, 43, 43, 43, 43, 32, 32, 42, 32, 16, 44, 16, 10, + 41, 41, 41, 45, 11, 11, 11, 11, 34, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 16, 16, 16, 16, 16, 16, 16, 16, 16, 34, + 16, 11, 32, 16, 32, 32, 32, 32, 16, 16, 32, 46, 34, 32, 34, 11, + 32, 47, 43, 43, 48, 32, 32, 32, 11, 34, 34, 34, 34, 34, 34, 16, + 11, 11, 11, 11, 49, 2, 2, 2, 16, 16, 16, 16, 50, 51, 52, 53, + 54, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 55, + 56, 57, 43, 56, 43, 43, 43, 43, 36, 36, 36, 36, 36, 36, 36, 36, + 36, 58, 2, 2, 2, 2, 2, 2, 59, 59, 59, 8, 9, 60, 2, 61, + 43, 43, 43, 43, 43, 57, 62, 2, 63, 36, 36, 36, 36, 64, 43, 43, + 7, 7, 7, 7, 7, 2, 2, 36, 65, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 66, 43, 43, 43, 67, 47, 43, 43, 68, 69, 70, 43, 43, 36, + 7, 7, 7, 7, 7, 36, 71, 72, 2, 2, 2, 2, 2, 2, 2, 73, + 64, 36, 36, 36, 36, 36, 36, 36, 43, 43, 43, 43, 43, 43, 65, 36, + 36, 36, 36, 43, 43, 43, 43, 43, 7, 7, 7, 7, 7, 36, 36, 36, + 36, 36, 36, 36, 36, 64, 43, 43, 43, 43, 40, 21, 2, 40, 69, 20, + 36, 36, 36, 43, 43, 69, 43, 43, 43, 43, 69, 43, 69, 43, 43, 43, + 2, 2, 2, 2, 2, 2, 2, 2, 36, 36, 36, 36, 64, 43, 43, 2, + 36, 36, 36, 36, 74, 36, 36, 36, 59, 59, 59, 59, 43, 43, 43, 43, + 36, 36, 36, 36, 75, 43, 43, 43, 43, 76, 43, 43, 43, 43, 43, 43, + 43, 77, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 77, 65, 78, + 79, 43, 43, 43, 77, 78, 79, 78, 64, 43, 43, 43, 36, 36, 36, 36, + 36, 43, 2, 7, 7, 7, 7, 7, 80, 36, 36, 36, 36, 36, 36, 36, + 64, 78, 81, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 65, 78, + 79, 43, 43, 77, 78, 78, 79, 36, 36, 36, 36, 82, 78, 78, 36, 36, + 36, 43, 43, 7, 7, 7, 7, 7, 36, 20, 27, 27, 27, 53, 58, 43, + 43, 77, 81, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 43, 78, + 79, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 65, 36, 36, 36, + 36, 36, 36, 7, 7, 7, 7, 7, 43, 36, 64, 2, 2, 2, 2, 2, + 79, 43, 43, 43, 77, 78, 79, 43, 60, 20, 20, 20, 83, 43, 43, 43, + 43, 78, 81, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 65, 79, + 79, 43, 43, 77, 78, 78, 79, 43, 43, 43, 43, 77, 78, 78, 36, 36, + 72, 27, 27, 27, 27, 27, 27, 27, 43, 65, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 78, 77, 78, 78, 78, 78, 78, 79, 43, + 36, 36, 36, 82, 78, 78, 78, 78, 78, 78, 78, 7, 7, 7, 7, 7, + 27, 84, 61, 61, 53, 61, 61, 61, 77, 78, 65, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 65, 43, 77, 78, 78, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 36, 36, 36, 36, 7, 7, 7, 85, 27, 27, 27, 84, + 64, 78, 66, 36, 36, 36, 36, 36, 78, 78, 78, 77, 78, 78, 43, 43, + 43, 43, 77, 78, 78, 78, 81, 36, 86, 36, 36, 36, 36, 36, 36, 36, + 43, 78, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 64, 65, 78, + 79, 43, 43, 78, 78, 78, 79, 71, 61, 61, 36, 82, 27, 27, 27, 87, + 27, 27, 27, 27, 84, 36, 36, 36, 36, 36, 36, 36, 36, 43, 43, 77, + 78, 43, 43, 43, 78, 78, 78, 78, 7, 78, 2, 2, 2, 2, 2, 2, + 64, 36, 43, 43, 43, 43, 43, 88, 36, 36, 36, 69, 43, 43, 43, 57, + 7, 7, 7, 7, 7, 2, 2, 2, 64, 36, 43, 43, 43, 43, 65, 36, + 36, 36, 36, 40, 43, 43, 43, 43, 7, 7, 7, 7, 7, 7, 36, 36, + 71, 61, 2, 2, 2, 2, 2, 2, 2, 89, 89, 61, 43, 61, 61, 61, + 7, 7, 7, 7, 7, 27, 27, 27, 27, 27, 47, 47, 47, 4, 4, 78, + 64, 43, 43, 43, 43, 43, 43, 77, 43, 43, 57, 43, 36, 36, 64, 43, + 43, 43, 43, 43, 43, 43, 43, 61, 61, 61, 61, 70, 61, 61, 61, 61, + 2, 2, 89, 61, 21, 2, 2, 2, 36, 36, 36, 36, 36, 82, 79, 43, + 77, 43, 43, 43, 79, 77, 79, 65, 36, 36, 36, 78, 43, 36, 36, 43, + 65, 78, 81, 82, 78, 78, 78, 36, 64, 43, 65, 36, 36, 36, 36, 36, + 36, 77, 79, 77, 78, 78, 79, 82, 7, 7, 7, 7, 7, 78, 79, 61, + 16, 16, 16, 16, 16, 50, 44, 16, 36, 36, 36, 36, 36, 36, 64, 43, + 2, 2, 2, 2, 90, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 61, 61, 61, 61, 61, 61, 61, 61, 11, 11, 11, 11, 16, 16, 16, 16, + 91, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 71, 66, + 92, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 93, 94, 94, + 36, 36, 36, 36, 36, 58, 2, 95, 96, 36, 36, 36, 36, 36, 36, 36, + 36, 43, 77, 78, 78, 78, 78, 81, 36, 43, 97, 2, 2, 2, 2, 2, + 36, 43, 43, 43, 43, 43, 43, 43, 36, 36, 43, 79, 43, 43, 43, 78, + 78, 78, 78, 77, 79, 43, 43, 43, 43, 43, 2, 80, 2, 60, 64, 43, + 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 98, 2, 56, 43, 76, + 36, 75, 36, 36, 36, 36, 36, 36, 36, 36, 64, 65, 36, 36, 36, 36, + 36, 36, 36, 36, 64, 36, 36, 36, 43, 77, 78, 79, 77, 78, 78, 78, + 78, 77, 78, 78, 79, 43, 43, 43, 61, 61, 2, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 27, 27, 61, 36, 36, 36, 64, 77, 79, 43, 2, + 36, 36, 82, 77, 43, 43, 43, 43, 77, 77, 79, 43, 43, 43, 77, 78, + 78, 79, 43, 43, 43, 43, 43, 43, 2, 2, 2, 80, 2, 2, 2, 2, + 43, 43, 43, 43, 43, 43, 43, 99, 43, 43, 81, 36, 36, 36, 36, 36, + 36, 36, 77, 43, 43, 77, 77, 78, 78, 77, 81, 36, 36, 36, 36, 36, + 89, 61, 61, 61, 61, 47, 43, 43, 43, 43, 61, 61, 61, 61, 21, 2, + 43, 81, 36, 36, 36, 36, 36, 36, 82, 43, 43, 78, 43, 79, 43, 36, + 36, 36, 36, 77, 43, 78, 79, 79, 43, 78, 78, 78, 78, 78, 2, 2, + 36, 36, 78, 78, 78, 78, 43, 43, 43, 43, 78, 43, 43, 57, 2, 2, + 7, 7, 7, 7, 7, 7, 86, 36, 36, 36, 36, 36, 40, 40, 40, 2, + 43, 57, 43, 43, 43, 43, 43, 43, 77, 43, 43, 43, 65, 36, 64, 36, + 36, 36, 65, 82, 43, 36, 36, 36, 16, 16, 16, 16, 16, 16, 40, 40, + 40, 40, 40, 40, 40, 44, 16, 16, 16, 16, 16, 16, 44, 16, 16, 16, + 16, 16, 16, 16, 16,100, 40, 40, 32, 32, 32, 16, 16, 16, 16, 32, + 16, 16, 16, 16, 11, 11, 11, 11, 16, 16, 16, 16, 34, 11, 11, 11, + 16, 16, 16, 16,101,101,101,101, 16, 16, 16, 16, 11, 11,102,103, + 41, 16, 16, 16, 11, 11,102, 41, 16, 16, 16, 16, 11, 11,104, 41, + 105,105,105,105,105,106, 59, 59, 51, 51, 51, 2,107,108,107,108, + 2, 2, 2, 2,109, 59, 59,110, 2, 2, 2, 2,111,112, 2,113, + 114, 2,115,116, 2, 2, 2, 2, 2, 9,114, 2, 2, 2, 2,117, + 59, 59, 59, 59, 59, 59, 59, 59,118, 40, 27, 27, 27, 8,115,119, + 27, 27, 27, 27, 27, 8,115, 94, 20, 20, 20, 20, 20, 20, 20, 20, + 43, 43, 43, 43, 43, 43,120, 48, 99, 48, 99, 43, 43, 43, 43, 43, + 61,121, 61,122, 61, 34, 11, 16, 11, 32,122, 61, 46, 11, 11, 61, + 61, 61,121,121,121, 11, 11,123, 11, 11, 35, 36, 39, 61, 16, 11, + 8, 8, 46, 16, 16, 26, 61,124, 95, 95, 95, 95, 95, 95, 95, 95, + 95,125,126, 95,127, 61, 61, 61, 8, 8,128, 61, 61, 8, 61, 61, + 128, 26, 61,128, 61, 61, 61,128, 61, 61, 61, 61, 61, 61, 61, 8, + 61,128,128, 61, 61, 61, 61, 61, 61, 61, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 61, 61, 61, 61, 4, 4, 61, 61, + 8, 61, 61, 61,129,130, 61, 61, 61, 61, 61, 61, 61, 61,128, 61, + 61, 61, 61, 61, 61, 26, 8, 8, 8, 8, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 8, 8, 8, 61, 61, 61, 61, 61, 61, 61, + 27, 27, 27, 27, 27, 27, 61, 61, 61, 61, 61, 61, 61, 27, 27, 27, + 61, 61, 61, 26, 61, 61, 61, 61, 26, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 8, 8, 8, 8, 61, 61, 61, 61, 61, 61, 61, 26, + 61, 61, 61, 61, 4, 4, 4, 4, 4, 4, 4, 27, 27, 27, 27, 27, + 27, 27, 61, 61, 61, 61, 61, 61, 8, 8,115,131, 8, 8, 8, 8, + 8, 8, 8, 4, 4, 4, 4, 4, 8,115,132,132,132,132,132,132, + 132,132,132,132,131, 8, 8, 8, 8, 8, 8, 8, 4, 4, 8, 8, + 8, 8, 8, 8, 8, 8, 4, 8, 8, 8,128, 26, 8, 8,128, 61, + 32, 11, 32, 34, 34, 34, 34, 11, 32, 32, 34, 16, 16, 16, 40, 11, + 32, 32,124, 61, 61,122, 34,133, 43, 32, 16, 16, 50, 2, 90, 2, + 36, 36, 36, 36, 36, 36, 36, 75, 2, 2, 2, 2, 2, 2, 2, 56, + 2,107,107, 2,111,112,107, 2, 2, 2, 2, 6, 2, 98,107, 2, + 107, 4, 4, 4, 4, 2, 2, 80, 2, 2, 2, 2, 2, 51, 2, 2, + 98,134, 2, 2, 2, 2, 2, 2, 61, 2,135,132,132,132,136, 51, + 51, 51, 51, 51, 51, 51, 51, 51, 1, 2,137,138, 4, 4, 4, 4, + 4, 61, 4, 4, 4, 4,139, 94,140, 95, 95, 95, 95, 43, 43, 78, + 141, 40, 40, 61, 95,142, 58, 61, 72, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 64,143,144, 63, 36, 36, 36, 36, 36, 58, 40, 63, + 61, 27, 27, 61, 61, 61, 61, 61, 27, 27, 27, 27, 27, 61, 61, 61, + 61, 61, 61, 61, 27, 27, 27, 27,145, 27, 27, 27, 27, 27, 27, 27, + 36, 36, 75, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,146, 2, + 32, 32, 32, 32, 32, 32, 32, 64, 48,147, 43, 43, 43, 43, 43, 80, + 32, 32, 32, 32, 32, 32, 40, 43, 36, 36, 36, 95, 95, 95, 95, 95, + 43, 2, 2, 2, 2, 2, 2, 2, 41, 41, 41,144, 40, 40, 40, 40, + 41, 32, 32, 32, 32, 32, 32, 32, 16, 32, 32, 32, 32, 32, 32, 32, + 44, 16, 16, 16, 34, 34, 34, 32, 32, 32, 32, 32, 42,148, 34, 35, + 32, 32, 16, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 11, 11, 32, + 11, 11, 32, 32, 32, 32, 32, 32, 32, 32, 11, 11, 34, 16, 16, 16, + 32, 16, 16, 32, 32, 16, 16, 16, 16, 40,149, 35, 40, 35, 36, 36, + 36, 65, 36, 65, 36, 64, 36, 36, 36, 82, 79, 77, 61, 61, 43, 43, + 27, 27, 27, 61,150, 61, 61, 61, 36, 36, 2, 2, 2, 2, 2, 2, + 78, 36, 36, 36, 36, 36, 36, 36, 36, 36, 78, 78, 78, 78, 78, 78, + 78, 78, 43, 43, 43, 43, 43, 2, 43, 36, 36, 36, 2, 66, 66, 64, + 36, 36, 36, 43, 43, 43, 43, 2, 36, 36, 36, 64, 43, 43, 43, 43, + 43, 78, 78, 78, 78, 78, 78, 97, 36, 64, 78, 43, 43, 78, 43, 78, + 97, 2, 2, 2, 2, 2, 2, 80, 7, 7, 7, 7, 7, 7, 7, 2, + 36, 36, 64, 63, 36, 36, 36, 36, 36, 36, 36, 36, 64, 43, 43, 77, + 79, 77, 79, 43, 43, 43, 43, 43, 36, 64, 36, 36, 36, 36, 77, 78, + 7, 7, 7, 7, 7, 7, 2, 2, 63, 36, 36, 71, 61, 82, 77, 36, + 65, 43, 65, 64, 65, 36, 36, 43, 36, 36, 36, 36, 36, 36, 75, 2, + 36, 36, 36, 36, 36, 82, 43, 78, 2, 75,151, 43, 43, 43, 43, 43, + 16, 16, 16, 16, 16,103, 40, 40, 16, 16, 16, 16,100, 41, 41, 41, + 36, 82, 79, 78, 77, 97, 79, 43,152,152,152,152,152,152,152,152, + 153,153,153,153,153,153,153,153, 16, 16, 16, 16, 16, 16, 35, 65, + 36, 36, 36, 36,154, 36, 36, 36, 36, 41, 41, 41, 41, 41, 41, 41, + 41, 74, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,132, + 36, 36, 36, 36, 36, 36, 36, 71, 36, 36, 36, 36, 36, 36,150, 61, + 2, 2, 2,135,116, 2, 2, 2, 6,155,156,132,132,132,132,132, + 132,132,116,135,116, 2,113,157, 2, 2, 2, 2,139,132,132,116, + 2,158, 8, 8, 60, 2, 2, 2, 36, 36, 36, 36, 36, 36, 36,159, + 2, 2, 3, 2, 4, 5, 6, 2, 16, 16, 16, 16, 16, 17, 18,115, + 116, 4, 2, 36, 36, 36, 36, 36, 63, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 40, 20,160, 53, 20, 26, 8,128, 61, + 61, 61, 61, 61,161, 59, 61, 61, 2, 2, 2, 90, 27, 27, 27, 27, + 27, 27, 27, 84, 61, 61, 61, 61, 95, 95,127, 27, 84, 61, 61, 61, + 61, 61, 61, 61, 61, 27, 61, 61, 61, 61, 61, 61, 61, 61, 47, 43, + 162,162,162,162,162,162,162,162,163, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 87, 36,138, 36, 36, 36, 36, 95, 95, 95, + 36, 36, 36, 36, 36, 36, 36, 58,164, 95, 95, 95, 95, 95, 95, 95, + 11, 11, 11, 32, 16, 16, 16, 16, 36, 36, 36, 58, 27, 27, 27, 27, + 36, 36, 36, 71,145, 27, 27, 27, 36, 36, 36,165, 27, 27, 27, 27, + 36, 36, 36, 36, 36,165, 27, 27, 36, 36, 36, 27, 27, 27, 27, 30, + 36, 36, 36, 36, 36, 36, 27, 36, 64, 43, 43, 43, 43, 43, 43, 43, + 36, 36, 36, 36, 43, 43, 43, 43, 36, 36, 36, 36, 36, 36,165, 30, + 36, 36, 36, 36, 36, 36,165, 27, 36, 36, 36, 36, 72, 36, 36, 36, + 36, 36, 64, 43, 43,163, 27, 27, 36, 36, 36, 36, 58, 2, 2, 2, + 36, 36, 36, 36, 27, 27, 27, 27, 16, 16, 16, 16, 16, 27, 27, 27, + 36, 36, 43, 43, 43, 43, 43, 43, 36, 36, 36, 36, 36, 64,166, 51, + 27, 27, 27, 87, 36, 36, 36, 36,163, 27, 30, 2, 2, 2, 2, 2, + 36, 43, 43, 2, 2, 2, 2, 2, 36, 36,165, 27, 27, 27, 27, 27, + 79, 81, 36, 36, 36, 36, 36, 36, 43, 43, 43, 57, 2, 2, 2, 2, + 2, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 7, 7, 7, 7, 7, + 65, 64, 65, 36, 36, 36, 36, 64, 78, 79, 43, 77, 79, 57, 73, 2, + 2, 43, 43, 43, 43, 43, 67, 59, 36, 36, 36, 64, 43, 43, 79, 43, + 43, 43, 43, 7, 7, 7, 7, 7, 2, 2, 82, 81, 36, 36, 36, 36, + 36, 64, 2, 36, 36, 36, 36, 36, 36, 82, 78, 43, 43, 43, 43, 77, + 81, 36, 58, 2, 56, 43, 57, 79, 7, 7, 7, 7, 7, 58, 58, 2, + 90, 27, 27, 27, 27, 27, 27, 27, 36, 36, 36, 36, 36, 36, 78, 79, + 43, 78, 77, 43, 2, 2, 2, 43, 36, 36, 36, 36, 36, 36, 36, 64, + 77, 78, 78, 78, 78, 78, 78, 78, 36, 36, 36, 82, 78, 78, 81, 36, + 36, 78, 78, 43, 43, 43, 43, 43, 36, 36, 82, 78, 43, 43, 43, 43, + 78, 43, 77, 65, 36, 58, 2, 2, 7, 7, 7, 7, 7, 2, 2, 65, + 78, 79, 43, 43, 77, 77, 78, 79, 77, 43, 36, 66, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 82, 78, 43, 43, 43, 78, 78, 43, 79, + 57, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 36, 36, 43, 43, + 78, 79, 43, 43, 43, 77, 79, 79, 57, 2, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 64, 79, 78, 43, 43, 43, 79, 58, 2, 2, 2, + 78, 43, 43, 79, 43, 43, 43, 43, 7, 7, 7, 7, 7, 27, 2, 89, + 43, 43, 43, 43, 79, 57, 2, 2, 27, 27, 27, 27, 27, 27, 27, 87, + 78, 78, 78, 78, 78, 79, 77, 65, 81, 79, 2, 2, 2, 2, 2, 2, + 82, 78, 43, 43, 43, 43, 78, 78, 65, 66, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 64, 43, 43, 43, 43, 65, 36, 36, + 36, 64, 43, 43, 77, 64, 43, 57, 2, 2, 2, 56, 43, 43, 43, 43, + 64, 43, 43, 77, 79, 43, 36, 36, 36, 36, 36, 36, 36, 43, 43, 43, + 43, 43, 43, 77, 43, 2, 66, 2, 43, 43, 43, 43, 43, 43, 43, 79, + 58, 2, 2, 2, 2, 2, 2, 2, 2, 36, 36, 36, 36, 36, 36, 36, + 43, 43, 43, 43, 77, 43, 43, 43, 77, 43, 79, 43, 43, 43, 43, 43, + 43, 43, 43, 64, 43, 43, 43, 43, 36, 36, 36, 36, 36, 78, 78, 78, + 43, 77, 79, 79, 36, 36, 36, 36, 36, 64, 77, 97, 2, 2, 2, 2, + 27, 27, 84, 61, 61, 61, 53, 20,150, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 21, 43, 43, 57, 2, 2, 2, 2, 2, + 43, 43, 43, 57, 2, 2, 61, 61, 40, 40, 89, 61, 61, 61, 61, 61, + 7, 7, 7, 7, 7,167, 27, 27, 27, 87, 36, 36, 36, 36, 36, 36, + 27, 27, 27, 30, 2, 2, 2, 2, 82, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 79, 43, 68, 40, 40, 40, 40, 40, 40, + 40, 80, 43, 43, 43, 43, 43, 43, 36, 36, 36, 36, 36, 36, 47, 57, + 61, 61,168, 79, 43, 61,168, 78, 78,169, 59, 59, 59, 76, 43, 43, + 43, 70, 47, 43, 43, 43, 61, 61, 61, 61, 61, 61, 61, 43, 43, 61, + 61, 43, 70, 61, 61, 61, 61, 61, 11, 11, 11, 11, 11, 16, 16, 16, + 16, 16, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 16, + 11, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 11, 11, + 11, 11, 11, 16, 16, 16, 16, 16, 31, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 33, 16, 16, 16, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 31, 16, 16, 16, 16, 33, 16, 16, 16, 11, 11, + 11, 11, 31, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 33, + 16, 16, 16, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 31, + 16, 16, 16, 16, 33, 16, 16, 16, 11, 11, 11, 11, 31, 16, 16, 16, + 16, 33, 16, 16, 16, 32, 16, 7, 43, 43, 43, 70, 61, 47, 43, 43, + 43, 43, 43, 43, 43, 43, 70, 61, 61, 61, 47, 61, 61, 61, 61, 61, + 61, 61, 70, 21, 2, 2, 2, 2, 2, 2, 2, 2, 2, 56, 43, 43, + 16, 16, 16, 16, 16, 39, 16, 16, 43, 43, 43, 68, 40, 40, 40, 40, + 7, 7, 7, 7, 7, 7, 7, 71, 36, 36, 36, 36, 36, 36, 36, 43, + 36, 36, 36, 36, 36, 36, 43, 43, 7, 7, 7, 7, 7, 7, 7,170, + 16, 16, 43, 43, 43, 68, 40, 40, 27, 27, 27, 27, 27, 27,145, 27, + 171, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,145, + 27, 27, 27, 27, 27, 27, 84, 61, 61, 61, 61, 61, 61, 25, 41, 41, + 0, 0, 29, 21, 21, 21, 23, 21, 22, 18, 21, 25, 21, 17, 13, 13, + 25, 25, 25, 21, 21, 9, 9, 9, 9, 22, 21, 18, 24, 16, 24, 5, + 5, 5, 5, 22, 25, 18, 25, 0, 23, 23, 26, 21, 24, 26, 7, 20, + 25, 1, 26, 24, 26, 25, 15, 15, 24, 15, 7, 19, 15, 21, 9, 25, + 9, 5, 5, 25, 5, 9, 5, 7, 7, 7, 9, 8, 8, 5, 7, 5, + 6, 6, 24, 24, 6, 24, 12, 12, 6, 5, 9, 21, 25, 9, 26, 12, + 11, 11, 9, 6, 5, 21, 17, 17, 17, 26, 26, 23, 23, 12, 17, 12, + 21, 12, 12, 21, 7, 21, 1, 1, 21, 23, 26, 26, 1, 21, 6, 7, + 7, 12, 12, 7, 21, 7, 12, 1, 12, 6, 6, 12, 12, 26, 7, 26, + 26, 7, 21, 1, 24, 7, 7, 6, 1, 12, 12, 10, 10, 10, 10, 12, + 21, 6, 10, 7, 7, 10, 23, 7, 15, 26, 13, 21, 13, 7, 15, 7, + 12, 23, 21, 26, 21, 15, 17, 7, 29, 7, 7, 22, 18, 18, 14, 14, + 14, 7, 10, 21, 17, 21, 11, 12, 5, 6, 8, 8, 8, 24, 5, 24, + 9, 24, 29, 29, 29, 1, 20, 19, 22, 20, 27, 28, 1, 29, 21, 20, + 19, 21, 21, 16, 16, 21, 25, 22, 18, 21, 21, 29, 15, 6, 18, 6, + 12, 11, 9, 26, 26, 9, 26, 5, 5, 26, 14, 9, 5, 14, 14, 15, + 25, 26, 26, 22, 18, 26, 18, 25, 18, 22, 5, 12, 22, 21, 21, 22, + 18, 17, 26, 6, 7, 14, 17, 22, 26, 14, 17, 6, 14, 6, 12, 24, + 24, 6, 26, 15, 6, 21, 11, 21, 24, 9, 6, 9, 23, 26, 6, 10, + 4, 4, 3, 3, 7, 25, 17, 16, 16, 22, 16, 16, 25, 17, 7, 1, + 25, 24, 26, 1, 2, 2, 12, 15, 21, 14, 7, 15, 12, 17, 13, 15, + 26, 10, 10, 1, 13, 23, 23, 15, 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 0, 10, 11, 12, 13, 0, 14, 0, 0, 0, 0, 0, 15, 0, + 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, 19, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 20, 0, 21, 22, 23, 0, 0, 0, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 35, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 37, 38, 0, 0, 0, 0, 0, 0, 39, 40, 0, 0, 41, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, + 3, 0, 0, 0, 4, 5, 6, 7, 0, 8, 9, 10, 0, 11, 12, 13, + 14, 15, 16, 17, 16, 18, 16, 19, 16, 19, 16, 19, 0, 19, 16, 20, + 16, 19, 21, 19, 0, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 0, + 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, + 0, 0, 34, 0, 0, 35, 0, 0, 36, 0, 37, 0, 0, 0, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 0, 0, 47, 0, 0, 0, 48, 0, 0, + 0, 49, 0, 0, 0, 0, 0, 0, 0, 50, 0, 51, 0, 52, 53, 0, + 54, 0, 0, 0, 0, 0, 0, 55, 56, 57, 0, 0, 0, 0, 58, 0, + 0, 59, 60, 61, 62, 63, 0, 0, 64, 65, 0, 0, 0, 66, 0, 0, + 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 0, 72, 0, + 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, + 75, 0, 0, 76, 77, 0, 0, 78, 79, 0, 80, 62, 0, 81, 82, 0, + 0, 83, 84, 85, 0, 0, 0, 86, 0, 87, 0, 0, 51, 88, 51, 0, + 89, 0, 90, 0, 0, 0, 79, 0, 0, 0, 91, 92, 0, 93, 94, 95, + 96, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 97, 98, 0, 0, 0, + 0, 99,100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,101, 0, 0, + 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,103,104, 0, 0,105, + 0, 0, 0, 0, 0, 0,106, 0, 0, 0,100, 0, 0, 0, 0, 0, + 107,108, 0, 0, 0, 0, 0, 0, 0,109, 0,110, 0, 0, 0, 0, + 0, 0, 1, 2, 3, 4, 5, 6, 7, 0, 8, 0, 0, 0, 0, 9, + 10, 11, 12, 0, 0, 0, 0, 13, 0, 0, 14, 15, 0, 16, 0, 17, + 18, 0, 0, 19, 0, 20, 21, 0, 0, 0, 0, 0, 22, 23, 0, 24, + 25, 0, 0, 26, 0, 0, 0, 27, 0, 0, 28, 29, 30, 31, 0, 0, + 0, 32, 33, 34, 0, 0, 33, 0, 0, 35, 33, 0, 0, 0, 33, 36, + 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 39, 40, 0, + 0, 0, 0, 0, 0, 41, 42, 0, 0, 0, 0, 43, 0, 44, 0, 0, + 0, 45, 46, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 48, 49, 0, + 0, 0, 0, 50, 0, 0, 0, 51, 0, 52, 0, 53, 0, 0, 0, 0, + 54, 0, 0, 0, 0, 55, 0, 56, 0, 0, 0, 0, 57, 58, 0, 0, + 0, 59, 60, 0, 0, 0, 0, 0, 0, 61, 52, 0, 62, 63, 0, 0, + 64, 0, 0, 0, 65, 66, 0, 0, 0, 67, 0, 68, 69, 70, 71, 72, + 1, 73, 0, 74, 75, 76, 0, 0, 77, 78, 0, 0, 0, 79, 0, 0, + 1, 1, 0, 0, 80, 0, 0, 81, 0, 0, 0, 0, 77, 82, 0, 83, + 0, 0, 0, 0, 0, 78, 84, 0, 85, 0, 52, 0, 1, 78, 0, 0, + 86, 0, 0, 87, 0, 0, 0, 0, 0, 88, 57, 0, 0, 0, 0, 0, + 0, 89, 90, 0, 0, 84, 0, 0, 33, 0, 0, 91, 0, 0, 0, 0, + 92, 0, 0, 0, 0, 49, 0, 0, 93, 0, 0, 0, 0, 94, 95, 0, + 0, 96, 0, 0, 97, 0, 0, 0, 98, 0, 0, 0, 99, 0,100, 93, + 0, 0,101, 0, 0, 0, 84, 0, 0,102, 0, 0, 0,103,104, 0, + 0,105,106, 0, 0, 0, 0, 0, 0,107, 0, 0,108, 0, 0, 0, + 0,109, 33, 0,110,111,112, 35, 0, 0,113, 0, 0, 0,114, 0, + 0, 0, 0, 0, 0,115, 0, 0,116, 0, 0, 0, 0,117, 88, 0, + 0, 0, 0, 0, 57, 0, 0, 0, 0, 52,118, 0, 0, 0, 0,119, + 0, 0,120, 0, 0, 0, 0,118, 0, 0, 0, 0, 0,121, 0, 0, + 0,122, 0, 0, 0,123, 0,124, 0, 0, 0, 0,125,126,127, 0, + 128, 0,129, 0, 0, 0,130,131,132, 0, 0, 0, 35, 0, 0, 0, + 133, 0, 0,134, 0, 0,135, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 1, 2, 3, 4, 5, 6, 7, 4, 4, 8, 9, 10, 1, 11, + 12, 13, 14, 15, 16, 17, 18, 1, 1, 1, 19, 1, 0, 0, 20, 21, + 22, 1, 23, 4, 21, 24, 25, 26, 27, 28, 29, 30, 0, 0, 1, 1, + 31, 0, 0, 0, 32, 33, 34, 35, 1, 36, 37, 0, 0, 0, 0, 38, + 1, 39, 14, 39, 40, 41, 42, 0, 0, 0, 43, 36, 44, 45, 21, 45, + 46, 0, 0, 0, 19, 1, 21, 0, 0, 47, 0, 38, 48, 1, 1, 49, + 49, 50, 0, 0, 51, 0, 0, 0, 52, 1, 0, 0, 38, 14, 4, 1, + 1, 1, 53, 21, 43, 52, 54, 21, 35, 1, 0, 0, 0, 55, 0, 0, + 0, 56, 57, 58, 0, 0, 0, 0, 0, 59, 0, 60, 0, 0, 0, 0, + 61, 62, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 65, 0, 0, 0, + 66, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 69, 70, 0, 71, 72, + 73, 74, 75, 76, 0, 0, 0, 77, 0, 0, 0, 78, 79, 0, 0, 0, + 0, 47, 0, 0, 0, 49, 0, 80, 0, 0, 0, 62, 0, 0, 63, 0, + 0, 81, 0, 0, 82, 0, 0, 0, 83, 0, 0, 19, 84, 0, 62, 0, + 0, 0, 0, 49, 1, 85, 1, 52, 15, 86, 36, 10, 21, 87, 0, 55, + 0, 0, 0, 0, 19, 10, 1, 0, 0, 0, 0, 0, 88, 0, 0, 89, + 0, 0, 88, 0, 0, 0, 0, 78, 0, 0, 87, 9, 12, 4, 90, 8, + 91, 47, 0, 58, 50, 0, 21, 1, 21, 92, 93, 1, 1, 1, 1, 94, + 95, 96, 97, 1, 98, 58, 81, 99,100, 4, 58, 0, 0, 0, 0, 0, + 0, 19, 50, 0, 0, 0, 0, 0, 0, 61, 0, 0,101,102, 0, 0, + 103, 0, 0, 1, 1, 50, 0, 0, 0, 38, 0, 63, 0, 0, 0, 0, + 0, 62, 0, 0,104, 68, 61, 0, 0, 0, 78, 0, 0, 0,105,106, + 58, 38, 81, 0, 0, 0, 0, 0, 0,107, 1, 14, 4, 12, 84, 0, + 0, 0, 0, 38, 87, 0, 0, 0, 0,108, 0, 0,109, 61, 0,110, + 0, 0, 0, 1, 0, 0, 0, 0, 19, 58, 0,111, 14, 52,112, 41, + 0, 0, 62, 0, 0, 61, 0, 0,113, 0, 87, 0, 0, 0, 61, 62, + 0, 0, 62, 0, 89, 0, 0,113, 0, 0, 0, 0,114, 0, 0, 0, + 78, 55, 0, 38, 1, 58, 1, 58, 0, 0, 63, 89, 0, 0,115, 0, + 0, 0, 55, 0, 0, 0, 0,115, 0, 0, 0, 0, 61, 0, 0, 0, + 0, 79, 0, 61, 0, 0, 0, 0, 56, 0, 89, 80, 0, 0, 8, 91, + 0, 0, 1, 87, 0, 0,116, 0, 0, 0, 0, 0, 0,117, 0,118, + 119,120,121, 0,104, 4,122, 49, 23, 0, 0, 0, 38, 50, 38, 58, + 0, 0, 1, 87, 1, 1, 1, 1, 39, 1, 48,105, 87, 0, 0, 0, + 0, 1, 4,122, 0, 0, 0, 1,123, 0, 0, 0, 0, 0,230,230, + 230,230,230,232,220,220,220,220,232,216,220,220,220,220,220,202, + 202,220,220,220,220,202,202,220,220,220, 1, 1, 1, 1, 1,220, + 220,220,220,230,230,230,230,240,230,220,220,220,230,230,230,220, + 220, 0,230,230,230,220,220,220,220,230,232,220,220,230,233,234, + 234,233,234,234,233,230, 0, 0, 0,230, 0,220,230,230,230,230, + 220,230,230,230,222,220,230,230,220,220,230,222,228,230, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 0, 23, 0, 24, + 25, 0,230,220, 0, 18, 30, 31, 32, 0, 0, 0, 0, 27, 28, 29, + 30, 31, 32, 33, 34,230,230,220,220,230,220,230,230,220, 35, 0, + 0, 0, 0, 0,230,230,230, 0, 0,230,230, 0,220,230,230,220, + 0, 0, 0, 36, 0, 0,230,220,230,230,220,220,230,220,220,230, + 220,230,220,230,230, 0, 0,220, 0, 0,230,230, 0,230, 0,230, + 230,230,230,230, 0, 0, 0,220,220,220,230,220,220,220,230,230, + 0,220, 27, 28, 29,230, 7, 0, 0, 0, 0, 9, 0, 0, 0,230, + 220,230,230, 0, 0, 0, 0, 0,230, 0, 0, 84, 91, 0, 0, 0, + 0, 9, 9, 0, 0, 0, 0, 0, 9, 0,103,103, 9, 0,107,107, + 107,107,118,118, 9, 0,122,122,122,122,220,220, 0, 0, 0,220, + 0,220, 0,216, 0, 0, 0,129,130, 0,132, 0, 0, 0, 0, 0, + 130,130,130,130, 0, 0,130, 0,230,230, 9, 0,230,230, 0, 0, + 220, 0, 0, 0, 0, 7, 0, 9, 9, 0, 9, 9, 0, 0, 0,230, + 0, 0, 0,228, 0, 0, 0,222,230,220,220, 0, 0, 0,230, 0, + 0,220,230,220, 0,220,230,230,230, 0, 0, 0, 9, 9, 0, 0, + 7, 0,230, 0, 1, 1, 1, 0, 0, 0,230,234,214,220,202,230, + 230,230,230,230,232,228,228,220,218,230,233,220,230,220,230,230, + 1, 1, 1, 1, 1,230, 0, 1, 1,230,220,230, 1, 1, 0, 0, + 218,228,232,222,224,224, 0, 8, 8, 0, 0, 0, 0,220,230, 0, + 230,230,220, 0, 0,230, 0, 0, 26, 0, 0,220, 0,230,230, 1, + 220, 0, 0,230,220, 0, 0, 0,220,220, 0, 0,230,220, 0, 9, + 7, 0, 0, 7, 9, 0, 0, 0, 9, 7, 6, 6, 0, 0, 0, 0, + 1, 0, 0,216,216, 1, 1, 1, 0, 0, 0,226,216,216,216,216, + 216, 0,220,220,220, 0,230,230, 7, 0, 16, 17, 17, 17, 17, 17, + 17, 33, 17, 17, 17, 19, 17, 17, 17, 17, 20,101, 17,113,129,169, + 17, 27, 28, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17,237, 0, 1, 2, 2, 0, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 6, 7, 8, 9, 0, + 0, 0, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 20, 0, 0, 21, 22, 0, 0, 0, 0, 23, 24, + 25, 26, 0, 27, 0, 28, 29, 30, 31, 32, 0, 0, 0, 0, 0, 0, + 0, 33, 34, 35, 36, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 38, 39, 0, 0, 0, 0, 1, 2, 40, 41, 0, 1, + 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 2, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 5, 0, 0, 0, + 6, 0, 0, 0, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 0, 0, + 8, 9, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, + 0, 0, 0, 0, 11, 12, 0, 13, 0, 14, 15, 16, 0, 0, 0, 0, + 0, 1, 17, 18, 0, 19, 7, 1, 0, 0, 0, 20, 20, 7, 20, 20, + 20, 20, 20, 20, 20, 8, 21, 0, 22, 0, 7, 23, 24, 0, 20, 20, + 25, 0, 0, 0, 26, 27, 1, 7, 20, 20, 20, 20, 20, 1, 28, 29, + 30, 31, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, + 0, 0, 0, 0, 20, 20, 20, 1, 0, 0, 8, 21, 32, 4, 0, 10, + 0, 33, 7, 20, 20, 20, 0, 0, 0, 0, 8, 34, 34, 35, 36, 34, + 37, 0, 38, 1, 20, 20, 0, 0, 39, 0, 1, 1, 0, 8, 21, 1, + 20, 0, 0, 0, 1, 0, 0, 40, 1, 1, 0, 0, 8, 21, 0, 1, + 0, 1, 0, 1, 0, 0, 0, 0, 26, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 21, 7, 20, 41, 34, 34, 34, 34, 34, 34, 34, 34, 34, 21, + 0, 42, 43, 44, 0, 45, 0, 8, 21, 0, 0, 0, 0, 0, 0, 0, + 0, 46, 7, 1, 10, 1, 0, 0, 0, 1, 20, 20, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 26, 34, 9, 0, 0, 20, 20, 1, 20, + 20, 0, 0, 0, 0, 0, 0, 0, 26, 21, 0, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3, 47, 48, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 9, 10, 11, 11, 11, 11, 11, 12, 12, 12, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 12, 21, 12, 12, 12, 12, 22, + 23, 23, 23, 24, 12, 12, 12, 25, 26, 27, 12, 28, 29, 30, 31, 32, + 33, 34, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 35, + 12, 36, 7, 7, 37, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 38, 0, 0, 1, 2, 2, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 32, 33, 33, 33, 34, 35, 35, 35, 35, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + 2, 2, 51, 51, 52, 53, 54, 55, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 57, 57, 56, 56, 56, 56, 56, 56, 58, 59, 60, 61, + 56, 62, 62, 63, 64, 65, 66, 67, 68, 69, 70, 56, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 71, + 62, 62, 62, 62, 72, 72, 72, 72, 72, 72, 72, 72, 72, 73, 74, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 62, 62, 62, 62, 88, 89, 89, 89, 90, 89, + 91, 92, 93, 94, 95, 95, 96, 97, 87, 98, 99,100,101,102,103,104, + 105,105,105, 2,106,107,108,109,110,111,112,113,114,115,116, 87, + 89,117,118,119,120,121,122,123,124,125,126, 87,127,128, 87,129, + 130,131,132, 87,133,134,135,136,137,138, 87, 87,139,140,141,142, + 87,143, 87,144,145,145,145,145,145,145,145,145,145,145,145, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87,146,147,147,147,147,147,147,147,147,147, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,148,148,148,148, + 148, 87, 87, 87,149,149,149,149,150,151,152,152, 87, 87, 87, 87, + 153,153,154,155,156,156,156,156,156,156,156,156,156,156,156,156, + 156,156,156,156,156,156,156,156,156,156,157,157,157,157,156, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87,158,159,160,161,162,162,162, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,163,164, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87,165, 56, 56, 56,166,167, 51, 56, 56, 87, 56, 56, 56, 56, + 56, 56, 56, 56,168,168,168,168,168,168, 87, 87, 87, 87, 87, 87, + 87, 87, 2, 87,169, 87,170, 87, 87,171, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 33,172,172,173, 87, 87, 87, 87, 87, 56, 56, 56, 87, + 89, 89, 87, 87, 56, 56, 56, 56,174, 87, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 87, 87, 87, 87, + 87, 87, 87, 87, 62, 62, 62, 62, 62, 62, 62, 62, 87, 87, 87, 87, + 87, 87, 87, 87, 62, 62, 62, 62, 62, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 62, 62, 62, 62, 62, 62, 62, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 56, 87,175,175, 0, 1, 2, 2, 0, 1, 2, 2, + 2, 3, 4, 5, 0, 0, 0, 0, 1, 2, 1, 2, 0, 0, 3, 3, + 4, 5, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, + 0, 0, 7, 0, 8, 8, 8, 8, 8, 8, 8, 9, 10, 11, 11, 11, + 11, 11, 12, 11, 13, 13, 13, 13, 13, 13, 13, 13, 14, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 15, 16, 16, 16, 16, 16, 17, 18, 18, + 18, 18, 18, 18, 19, 20, 21, 21, 22, 23, 21, 24, 21, 21, 21, 21, + 21, 25, 21, 21, 26, 26, 26, 26, 26, 21, 21, 21, 27, 27, 27, 27, + 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 26, 21, 21, 21, 21, 21, + 21, 21, 31, 21, 32, 32, 32, 32, 32, 33, 34, 32, 35, 35, 35, 35, + 35, 35, 35, 35, 36, 36, 36, 36, 36, 36, 36, 36, 37, 37, 37, 37, + 37, 37, 37, 37, 38, 38, 38, 38, 38, 38, 38, 38, 39, 39, 39, 39, + 39, 39, 39, 39, 40, 40, 40, 40, 40, 40, 40, 40, 41, 41, 41, 41, + 41, 41, 41, 41, 42, 42, 42, 42, 42, 42, 42, 42, 43, 43, 43, 43, + 43, 43, 43, 43, 44, 44, 44, 45, 44, 44, 44, 44, 46, 46, 46, 46, + 46, 46, 46, 46, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 48, 47, 47, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 50, 50, + 50, 50, 50, 51, 52, 52, 52, 52, 52, 52, 52, 52, 53, 53, 53, 53, + 53, 53, 53, 53, 53, 53, 54, 54, 54, 54, 54, 54, 55, 55, 55, 55, + 55, 55, 55, 55, 56, 56, 57, 57, 57, 57, 58, 57, 59, 59, 60, 61, + 62, 62, 63, 63, 64, 64, 64, 64, 64, 64, 64, 64, 65, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 55, 55, 55, 55, 55, 67, 67, 67, 67, + 67, 68, 68, 68, 69, 69, 69, 69, 69, 69, 64, 64, 70, 70, 71, 71, + 71, 71, 71, 71, 71, 71, 71, 8, 8, 8, 8, 8, 72, 72, 72, 72, + 72, 72, 72, 72, 73, 73, 73, 73, 74, 74, 74, 74, 75, 75, 75, 75, + 75, 76, 76, 76, 13, 50, 50, 50, 73, 77, 78, 79, 4, 4, 80, 4, + 4, 81, 82, 83, 4, 4, 4, 84, 8, 8, 8, 8, 11, 11, 11, 11, + 11, 11, 11, 11, 85, 0, 0, 0, 0, 0, 0, 86, 0, 4, 0, 0, + 0, 8, 8, 8, 0, 0, 87, 88, 89, 0, 4, 4, 6, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 90, + 90, 90, 90, 90, 91, 91, 91, 91, 91, 91, 4, 4, 92, 92, 92, 92, + 92, 92, 92, 92, 50, 50, 50, 93, 93, 93, 93, 93, 53, 53, 53, 53, + 53, 53, 13, 13, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 0, 95, 0, 96, 97, 98, 99, 99, 99, 99,100,101,102, + 102,102,102,103,104,104,104,105, 52, 52, 52, 52, 52, 0,104,104, + 0, 0, 0,102, 52, 52, 0, 0, 0, 0, 52,106, 0, 0, 0, 0, + 0,102,102,107,102,102,102,102,102,108, 0, 0, 94, 94, 94, 94, + 0, 0, 0, 0,109,109,109,109,109,109,109,109,109,109,109,109, + 109,110,110,110,111,111,111,111,111,111,111,111,111,111,111,111, + 13, 13, 13, 13, 13, 13,112,112,112,112,112,112, 0, 0,113, 4, + 4, 4, 4, 4,114, 4, 4, 4, 4, 4, 4, 4,115,115,115, 0, + 116,116,116,116,117,117,117,117,117,117, 32, 32,118,118,119,120, + 120,120, 52, 52,121,121,121,121,122,121, 49, 49,123,123,123,123, + 123,123, 49, 49,124,124,124,124,124,124,125,125, 53, 53, 53, 4, + 4,126,127, 54, 54, 54, 54, 54,125,125,125,125,128,128,128,128, + 128,128,128,128, 4,129, 18, 18, 18, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21,130, 21, 21, 21, 21, 8, 0,131, 0, + 0, 0, 0, 21, 21, 21, 21, 21, 21, 21, 21,132, 0, 0, 1, 2, + 1, 2,133,101,102,134, 52, 52, 52, 52, 0, 0,135,135,135,135, + 135,135,135,135, 0, 0, 0, 0, 11, 11, 11, 11, 11, 0, 11, 11, + 11, 0, 0,136,137,137,138,138,138,138,139, 0,140,140,140,141, + 141,142,142,142,143,143,144,144,144,144,144,144,145,145,145,145, + 145,146,146,146,147,147,147,148,148,148,148,148,149,149,149,150, + 150,150,150,151,151,151,151,151,151,151,151,151,152,152,152,152, + 152,152,152,152,153,153,153,153,154,154,155,155,156,156,156,156, + 156,156,157,157,158,158,159,159,159,159,159,159,160,160,161,161, + 161,161,161,161,162,162,162,162,162,162,163,163,164,164,164,164, + 165,165,165,165,166,166,166,166,167,167,168,168,169,169,169,169, + 169,169,169,169,170,170,170,170,170,170,170,170,171,171,171,171, + 171,171,171,171,172,172,172,172,172,172,172,172,173,173,173,173, + 173,173,173,173,174,174,174,175,175,175,175,176,176,176,176,177, + 177,177,178,178,179,179,179,179,179,179,179,179,180,180,180,180, + 180,181,181,181,182,182,182,182,182,183,183,183,184,184,184,184, + 184,184,185, 43,186,186,186,186,186,186,186,186,187,187,187,188, + 188,188,188,188,189,189,189,190,189,189,189,189,191,191,191,191, + 191,191,191,191,192,192,192,192,192,192,192,192,193,193,193,193, + 193,193,193,193,194,194,194,194,194,194, 66, 66,195,195,195,195, + 195,195,195,195,196,196,196,196,196,196,196,196,197,197,197,197, + 197,197,197,197,198,198,198,198,198,198,198,198,199,199,199,199, + 199,199,199,199,200,200,200,200,200,200,200,200,201,201,201,201, + 201,202,202,202,202,202,202, 55,203,203,203,203,204,204,204,204, + 204,204,204,205,205,205,205,205,205,205,205,205,206,206,206,206, + 206,206,207,207,207,207,207,207,207,207,207,207,208,208,208,208, + 208,208,208,208,110,110,110,110, 39, 39, 39, 39,209,209,209,209, + 209,209,209,209,210,210,210,210,210,210,210,210,211,211,211,211, + 211,211,211,211,212,212,212,212,212,212,212,212,112,112,112,112, + 112,112,112,112,112,112,112,112,213,213,213,214,214,214,214,214, + 214,215,215,215,216,216,216,216,216,216,216,216,217,217,217,217, + 217,217,217,217,218,218,218,218,218,218,218,218,218,218,218,218, + 218,218,219, 94,220,220,220,220,220,220,220,220,221,221,221,221, + 221,221,221,221,102,102,102,102,102,102,102,102,222, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,102,102, + 102, 99,223,224,224,224,224,224,224,224,224,224,225,225,225,225, + 225,225,225,225,225,225, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, + 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,226,227,228, 0,229, 0, + 0, 0, 0, 0,230,230,230,230,230,230,230,230, 91, 91, 91, 91, + 91, 91, 91, 91,231,231,231,231,231,231,231,231,232,232,232,232, + 233,233,233,233,234,234,234,234,234,234,234,234,235,235,235,235, + 235,235,235,235,236, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, + 8, 8, 8, 8, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 3, 0, + 0, 0, 4, 0, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 5, 0, + 2, 5, 6, 0, 7, 7, 7, 7, 8, 9, 8, 10, 8, 11, 8, 8, + 8, 8, 8, 8, 12, 13, 13, 13, 14, 14, 14, 14, 14, 15, 14, 14, + 16, 17, 17, 17, 17, 17, 17, 17, 18, 19, 19, 19, 19, 19, 19, 19, + 20, 21, 20, 22, 20, 20, 23, 23, 20, 20, 20, 20, 22, 20, 24, 7, + 7, 25, 20, 20, 26, 20, 20, 20, 20, 20, 20, 21, 27, 27, 27, 27, + 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31, + 32, 20, 20, 20, 33, 33, 33, 33, 34, 35, 33, 33, 33, 36, 33, 33, + 37, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 39, 40, 40, 40, 40, + 41, 41, 41, 41, 42, 42, 42, 42, 43, 43, 43, 43, 44, 44, 44, 44, + 45, 45, 45, 45, 46, 46, 46, 46, 46, 46, 46, 47, 48, 48, 48, 48, + 49, 49, 49, 49, 49, 50, 51, 49, 52, 52, 52, 52, 53, 53, 53, 53, + 53, 53, 54, 53, 55, 55, 55, 55, 56, 56, 56, 56, 57, 57, 57, 57, + 58, 58, 58, 58, 59, 59, 59, 59, 60, 60, 60, 60, 60, 60, 61, 62, + 63, 63, 63, 63, 64, 64, 64, 64, 64, 65, 0, 0, 66, 66, 66, 66, + 67, 67, 67, 67, 68, 68, 68, 68, 69, 70, 71, 71, 71, 71, 71, 71, + 72, 72, 72, 72, 73, 73, 73, 73, 74, 74, 74, 74, 75, 75, 75, 75, + 76, 76, 76, 76, 77, 77, 77, 77, 78, 78, 78, 78, 79, 79, 79, 79, + 80, 80, 80, 80, 81, 81, 81, 81, 82, 7, 7, 7, 83, 7, 84, 85, + 0, 84, 86, 0, 2, 87, 88, 2, 2, 2, 2, 89, 90, 87, 91, 2, + 2, 2, 92, 2, 2, 2, 2, 93, 0, 0, 0, 86, 1, 0, 0, 94, + 0, 95, 96, 0, 4, 0, 0, 0, 0, 0, 0, 4, 97, 97, 97, 97, + 98, 98, 98, 98, 13, 13, 13, 13, 99, 99, 99, 99,100,100,100,100, + 0,101, 0, 0,102,100,103,104, 0, 0,100, 0,105,106,106,106, + 106,106,106,106,106,106,107,105,108,109,109,109,109,109,109,109, + 109,109,110,108,111,111,111,111,112, 55, 55, 55, 55, 55, 55,113, + 109,109,109,110,109,109, 0, 0,114,114,114,114,115,115,115,115, + 116,116,116,116,117,117,117,117, 96, 2, 2, 2, 2, 2, 94, 2, + 118,118,118,118,119,119,119,119,120,120,120,120,121,121,121,121, + 121,121,121,122,123,123,123,123,124,124,124,124,124,124,124,125, + 126,126,126,126,127,127,127,127,128,128,128,128, 2, 2, 3, 2, + 2,129,130, 0,131,131,131,131,132, 17, 17, 18, 20, 20, 20,133, + 7, 7, 7,134, 20, 20, 20, 23, 0,135,109,109,109,109,109,136, + 137,137,137,137, 0, 0, 0,138,139,139,139,139,140,140,140,140, + 84, 0, 0, 0,141,141,141,141,142,142,142,142,143,143,143,143, + 144,144,144,144,145,145,145,145,146,146,146,146,147,147,147,147, + 148,148,148,148,149,149,149,149,150,150,150,150,151,151,151,151, + 152,152,152,152,153,153,153,153,154,154,154,154,155,155,155,155, + 156,156,156,156,157,157,157,157,158,158,158,158,159,159,159,159, + 160,160,160,160,161,161,161,161,162,162,162,162,163,163,163,163, + 164,164,164,164,165,165,165,165,166,166,166,166,167,167,167,167, + 168,168,168,168,169,169,169,169,170,170,170,170,171,171,171,171, + 172,172,172,172,173,173,173,173,174,174,174,174,175,175,175,175, + 176,176,176,176,177,177,177,177,178,178,178,178,179,179,179,179, + 180,180,180,180,181,181,181,181,182,182,182,182,183,183,183,183, + 184,184,184,184,185,185,185,185,186, 45, 45, 45,187,187,187,187, + 188,188,188,188,189,189,189,189,190,190,190,190,190,190,191,190, + 192,192,192,192,193,193,193,193,194,194,194,194,195,195,195,195, + 196,196,196,196,197,197,197,197,198,198,198,198,199,199,199,199, + 200,200,200,200,201,201,201,201,202,202,202,202,203,203,203,203, + 204,204,204,204,205,205,205,205,206,206,206,206,207,207,207,207, + 208,208,208,208,209,209,209,209,210,210,210,210,211,211,211,211, + 212,212,212,212,213,213,213,213,214,214,214,214,215,215,215,215, + 216,216,216,216,217,217,217,217,218,218,218,218,219,219,219,219, + 220,221,221,221,222,222,222,222,221,221,221,221,223,106,106,106, + 106,109,109,109,224,224,224,224,225,225,225,225, 0,226, 86, 0, + 0, 0,226, 7, 82,138, 7, 0, 0, 0,227, 86,228,228,228,228, + 229,229,229,229,230,230,230,230,231,231,231,231,232,232,232,232, + 233,233,233,233,234, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 19, 0, 19, 0, 0, 0, + 0, 0, 26, 26, 1, 1, 1, 1, 9, 9, 9, 9, 0, 9, 9, 9, + 9, 9, 0, 9, 9, 0, 9, 0, 9, 9, 55, 55, 55, 55, 55, 55, + 6, 6, 6, 6, 6, 1, 1, 6, 6, 4, 4, 4, 4, 4, 4, 4, + 4, 14, 14, 14, 14, 14, 14, 14, 3, 3, 3, 3, 3, 0, 3, 3, + 0, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 1, 1, 1, 3, 3, + 1, 3, 3, 3, 37, 37, 37, 37, 38, 38, 38, 38, 64, 64, 64, 64, + 90, 90, 90, 90, 95, 95, 95, 95, 3, 3, 0, 3, 7, 7, 7, 7, + 7, 1, 1, 1, 1, 7, 7, 7, 0, 0, 7, 7, 5, 5, 5, 5, + 11, 11, 11, 11, 10, 10, 10, 10, 21, 21, 21, 21, 22, 22, 22, 22, + 23, 23, 23, 23, 16, 16, 16, 16, 20, 20, 20, 20, 36, 36, 36, 36, + 24, 24, 24, 24, 24, 24, 24, 0, 18, 18, 18, 18, 25, 25, 25, 25, + 25, 0, 0, 0, 0, 25, 25, 25, 33, 33, 33, 33, 8, 8, 8, 8, + 8, 8, 8, 0, 12, 12, 12, 12, 30, 30, 30, 30, 29, 29, 29, 29, + 28, 28, 28, 28, 34, 34, 34, 34, 35, 35, 35, 35, 35, 35, 35, 0, + 0, 0, 35, 35, 45, 45, 45, 45, 44, 44, 44, 44, 44, 0, 0, 0, + 43, 43, 43, 43, 46, 46, 46, 46, 31, 31, 31, 31, 32, 32, 0, 0, + 32, 0, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 52, 52, 52, 52, + 58, 58, 58, 58, 54, 54, 54, 54, 91, 91, 91, 91, 62, 62, 62, 62, + 76, 76, 76, 76, 93, 93, 93, 93, 70, 70, 70, 70, 73, 73, 73, 73, + 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, + 1, 1, 0, 0, 19, 19, 9, 9, 9, 9, 9, 6, 19, 9, 9, 9, + 9, 9, 19, 19, 9, 9, 9, 19, 6, 19, 19, 19, 19, 19, 19, 9, + 0, 0, 0, 19, 0, 0, 9, 0, 0, 0, 19, 19, 27, 27, 27, 27, + 56, 56, 56, 56, 61, 61, 61, 61, 13, 13, 13, 13, 0, 13, 0, 13, + 0, 13, 13, 13, 13, 13, 1, 1, 1, 1, 12, 12, 0, 15, 15, 15, + 15, 15, 15, 15, 15, 1, 1, 0, 0, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 0, 26, 26, 26, 26, 26, 12, 12, 12, 12, 12, 12, 0, + 39, 39, 39, 39, 86, 86, 86, 86, 77, 77, 77, 77, 79, 79, 79, 79, + 60, 60, 60, 60, 65, 65, 65, 65, 75, 75, 75, 75, 69, 69, 69, 69, + 69, 69, 0, 69, 74, 74, 74, 74, 84, 84, 84, 84, 84, 84, 84, 0, + 68, 68, 68, 68, 92, 92, 92, 92, 87, 87, 87, 87, 19, 9, 19, 19, + 19, 19, 0, 0, 2, 2, 2, 2, 19, 19, 19, 4, 3, 3, 0, 0, + 1, 1, 6, 6, 0, 0, 17, 17, 17, 17, 0, 0, 49, 49, 49, 49, + 0, 1, 1, 1, 71, 71, 71, 71, 67, 67, 67, 67, 42, 42, 42, 42, + 41, 41, 41, 41,118,118,118,118, 53, 53, 53, 53, 59, 59, 59, 59, + 40, 40, 40, 40, 51, 51, 51, 51, 50, 50, 50, 50,135,135,135,135, + 106,106,106,106,104,104,104,104,161,161,161,161,110,110,110,110, + 47, 47, 47, 47, 81, 81, 81, 81,120,120,120,120,116,116,116,116, + 128,128,128,128, 66, 66, 66, 66, 72, 72, 72, 72, 98, 98, 98, 98, + 97, 97, 97, 97, 57, 57, 57, 57, 88, 88, 88, 88,117,117,117,117, + 112,112,112,112, 78, 78, 78, 78, 83, 83, 83, 83, 82, 82, 82, 82, + 122,122,122,122, 89, 89, 89, 89,130,130,130,130,144,144,144,144, + 156,156,156,156,147,147,147,147,148,148,148,148,158,158,158,158, + 153,153,153,153,149,149,149,149, 94, 94, 94, 94, 85, 85, 85, 85, + 101,101,101,101, 96, 96, 96, 96,111,111,111,111,100,100,100,100, + 100, 36, 36, 36,108,108,108,108,129,129,129,129,109,109,109,109, + 107,107,107,107,107,107,107, 1,137,137,137,137,124,124,124,124, + 123,123,123,123,114,114,114,114,102,102,102,102,126,126,126,126, + 142,142,142,142,125,125,125,125,154,154,154,154,150,150,150,150, + 141,141,141,141,140,140,140,140,121,121,121,121,133,133,133,133, + 134,134,134,134,138,138,138,138,143,143,143,143,145,145,145,145, + 63, 63, 63, 63,157,157,157,157, 80, 80, 80, 80,127,127,127,127, + 115,115,115,115,159,159,159,159,103,103,103,103,119,119,119,119, + 146,146,146,146, 99, 99, 99, 99,136,139, 13, 13,155,155,155,155, + 136,136,136,136, 17, 15, 15, 15,139,139,139,139,105,105,105,105, + 0, 0, 0, 1, 0, 0, 1, 1,131,131,131,131,151,151,151,151, + 160,160,160,160,152,152,152,152,113,113,113,113,132,132,132,132, + 15, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 9, + 9, 10, 9, 11, 12, 13, 9, 9, 9, 14, 9, 9, 15, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 16, 17, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 19, 20, 9, + 21, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 22, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 23, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 0, 0, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 23, 0, 0, 24, 25, 26, 27, 28, 29, 30, + 0, 0, 31, 32, 0, 33, 0, 34, 0, 35, 0, 0, 0, 0, 36, 37, + 38, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 42, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 43, 44, 0, 45, 0, 0, 0, 0, 0, 0, 46, 47, + 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 50, 51, 0, 0, 0, 52, 0, 0, 53, 0, + 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 55, 0, + 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 57, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 58, 59, 60, 61, 62, 63, 64, 65, 0, 0, + 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 67, 68, 0, 69, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,100, + 101,102,103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,104, 0, 0, 0, 0, 0, 0,105,106, 0,107, 0, + 0, 0,108, 0,109, 0,110, 0,111,112,113, 0,114, 0, 0, 0, + 115, 0, 0, 0,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,117, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,118,119,120,121, 0,122,123,124,125,126, + 0,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,128,129,130,131,132,133,134,135,136,137,138,139,140,141, + 142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157, + 0, 0, 0,158,159,160,161, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,162,163, 0, 0, 0, + 0, 0, 0, 0,164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,165, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,166, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,169,170, 0, 0, 0, 0,171,172, 0, + 0, 0,173,174,175,176,177,178,179,180,181,182,183,184,185,186, + 187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202, + 203,204,205,206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, + 3, 4, +}; +static const uint16_t +_hb_ucd_u16[4888] = +{ + 0, 0, 1, 2, 3, 4, 5, 6, 0, 0, 7, 8, 9, 10, 11, 12, + 13, 13, 13, 14, 15, 13, 13, 16, 17, 18, 19, 20, 21, 22, 13, 23, + 13, 13, 13, 24, 25, 11, 11, 11, 11, 26, 11, 27, 28, 29, 30, 31, + 32, 32, 32, 32, 32, 32, 32, 33, 34, 35, 36, 11, 37, 38, 13, 39, + 9, 9, 9, 11, 11, 11, 13, 13, 40, 13, 13, 13, 41, 13, 13, 13, + 13, 13, 13, 35, 9, 42, 11, 11, 43, 44, 32, 45, 46, 47, 47, 48, + 49, 50, 47, 47, 51, 32, 52, 53, 47, 47, 47, 47, 47, 54, 55, 56, + 57, 58, 47, 32, 59, 47, 47, 47, 47, 47, 60, 53, 61, 47, 62, 63, + 47, 64, 65, 66, 47, 67, 47, 47, 68, 69, 47, 47, 70, 32, 71, 32, + 72, 47, 47, 73, 74, 75, 76, 77, 78, 47, 47, 79, 80, 81, 82, 83, + 84, 47, 47, 85, 86, 87, 88, 89, 84, 47, 47, 79, 90, 47, 82, 91, + 92, 47, 47, 93, 94, 95, 82, 96, 97, 47, 47, 98, 99, 100, 101, 102, + 103, 47, 47, 104, 105, 106, 82, 107, 108, 47, 47, 93, 109, 110, 82, 111, + 112, 47, 47, 113, 114, 115, 82, 116, 92, 47, 47, 47, 117, 118, 101, 119, + 47, 47, 47, 120, 121, 122, 66, 66, 47, 47, 47, 123, 124, 125, 47, 47, + 126, 127, 128, 129, 47, 47, 47, 130, 131, 32, 32, 132, 133, 134, 66, 66, + 47, 47, 135, 136, 122, 137, 138, 139, 140, 141, 9, 9, 9, 11, 11, 142, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 143, 144, 145, + 47, 146, 9, 9, 9, 9, 9, 147, 148, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 149, 47, 150, 151, 47, 47, 47, 47, 152, 153, + 47, 154, 47, 155, 47, 156, 47, 156, 47, 47, 47, 157, 158, 159, 160, 145, + 161, 160, 47, 47, 162, 47, 47, 47, 163, 47, 164, 47, 47, 47, 47, 47, + 47, 47, 165, 166, 167, 47, 47, 47, 47, 47, 47, 47, 47, 168, 146, 146, + 47, 169, 47, 47, 47, 170, 171, 172, 160, 160, 173, 174, 32, 32, 32, 32, + 175, 47, 47, 176, 177, 122, 178, 179, 180, 47, 181, 61, 47, 47, 182, 183, + 47, 47, 184, 185, 186, 61, 47, 187, 11, 9, 9, 9, 66, 188, 189, 190, + 11, 11, 191, 27, 27, 27, 192, 193, 11, 194, 27, 27, 32, 32, 32, 32, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 195, 13, 13, 13, 13, 13, 13, + 196, 196, 196, 196, 196, 197, 196, 11, 198, 198, 198, 199, 200, 201, 201, 200, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 27, 211, 211, 211, 212, 213, 32, + 214, 215, 216, 217, 218, 145, 219, 219, 220, 221, 222, 146, 223, 224, 146, 225, + 226, 226, 226, 226, 226, 226, 226, 226, 227, 146, 228, 146, 146, 146, 146, 229, + 146, 230, 226, 231, 146, 232, 233, 146, 146, 146, 146, 146, 146, 146, 145, 145, + 145, 234, 146, 146, 146, 146, 235, 145, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 236, 237, 146, 146, 238, 146, 146, 146, 146, 146, 146, 239, 146, + 146, 146, 146, 146, 146, 146, 240, 241, 145, 242, 146, 146, 243, 226, 244, 226, + 245, 246, 226, 226, 226, 247, 226, 248, 146, 146, 146, 226, 249, 146, 146, 146, + 9, 9, 9, 11, 11, 11, 250, 251, 13, 13, 13, 13, 13, 13, 252, 253, + 11, 11, 11, 47, 47, 47, 254, 255, 47, 47, 47, 47, 47, 47, 32, 32, + 256, 257, 258, 259, 260, 261, 262, 262, 263, 264, 265, 266, 267, 47, 47, 47, + 47, 268, 148, 47, 47, 47, 47, 269, 47, 270, 47, 47, 146, 146, 146, 47, + 146, 146, 271, 146, 272, 273, 146, 146, 271, 146, 146, 273, 146, 146, 146, 146, + 47, 47, 47, 47, 146, 146, 146, 146, 47, 274, 47, 47, 47, 47, 47, 47, + 47, 146, 146, 146, 146, 47, 47, 187, 275, 47, 61, 47, 13, 13, 276, 277, + 13, 278, 47, 47, 47, 47, 279, 280, 31, 281, 282, 283, 13, 13, 13, 284, + 285, 286, 287, 288, 289, 290, 11, 291, 292, 47, 293, 294, 47, 47, 47, 295, + 296, 47, 47, 297, 298, 160, 32, 299, 61, 47, 300, 47, 301, 302, 47, 47, + 72, 47, 47, 303, 304, 305, 306, 61, 47, 47, 307, 308, 309, 310, 47, 311, + 47, 47, 47, 312, 58, 313, 314, 315, 47, 47, 47, 11, 11, 316, 317, 11, + 11, 11, 11, 11, 47, 47, 318, 160, 319, 319, 319, 319, 319, 319, 319, 319, + 320, 320, 320, 320, 320, 320, 320, 320, 11, 321, 322, 47, 47, 47, 47, 47, + 47, 47, 47, 323, 31, 324, 47, 47, 47, 47, 47, 325, 146, 47, 47, 47, + 47, 47, 47, 47, 326, 146, 146, 327, 32, 328, 32, 329, 330, 331, 332, 47, + 47, 47, 47, 47, 47, 47, 47, 333, 334, 2, 3, 4, 5, 335, 336, 337, + 47, 338, 47, 47, 47, 47, 339, 340, 341, 145, 145, 342, 219, 219, 219, 343, + 344, 146, 146, 146, 146, 146, 146, 345, 346, 346, 346, 346, 346, 346, 346, 346, + 47, 47, 47, 47, 47, 47, 347, 145, 47, 47, 348, 47, 349, 47, 47, 60, + 47, 350, 47, 47, 47, 351, 219, 219, 9, 9, 147, 11, 11, 47, 47, 47, + 47, 47, 160, 9, 9, 147, 11, 11, 47, 47, 47, 47, 47, 47, 350, 9, + 9, 352, 11, 11, 11, 11, 11, 11, 27, 27, 27, 27, 27, 27, 27, 27, + 47, 47, 47, 47, 47, 353, 47, 354, 47, 47, 355, 145, 145, 145, 47, 356, + 47, 357, 47, 350, 66, 66, 66, 66, 47, 47, 47, 358, 145, 145, 145, 145, + 359, 47, 47, 360, 145, 66, 47, 361, 47, 362, 145, 145, 363, 47, 364, 66, + 47, 47, 47, 365, 47, 366, 47, 366, 47, 365, 144, 145, 145, 145, 145, 145, + 9, 9, 9, 9, 11, 11, 11, 367, 47, 47, 368, 160, 160, 160, 160, 160, + 145, 145, 145, 145, 145, 145, 145, 145, 47, 47, 369, 47, 47, 47, 47, 47, + 47, 362, 370, 47, 60, 371, 66, 47, 372, 66, 66, 47, 373, 145, 47, 47, + 374, 47, 47, 360, 375, 376, 377, 378, 180, 47, 47, 379, 380, 47, 47, 160, + 97, 47, 381, 382, 383, 47, 47, 384, 180, 47, 47, 385, 386, 387, 388, 145, + 47, 47, 389, 390, 32, 32, 32, 32, 47, 47, 365, 47, 47, 391, 172, 160, + 92, 47, 47, 113, 392, 393, 394, 32, 47, 47, 47, 395, 396, 397, 47, 47, + 47, 47, 47, 398, 399, 160, 160, 160, 47, 47, 400, 401, 402, 403, 32, 32, + 47, 47, 47, 404, 405, 160, 66, 66, 47, 47, 406, 407, 160, 160, 160, 160, + 47, 143, 408, 409, 47, 47, 47, 47, 47, 47, 389, 410, 66, 66, 66, 66, + 9, 9, 9, 9, 11, 11, 128, 411, 47, 47, 47, 412, 413, 160, 160, 160, + 47, 47, 47, 47, 47, 414, 415, 416, 417, 47, 47, 418, 419, 420, 47, 47, + 421, 422, 66, 47, 47, 47, 47, 47, 47, 47, 400, 423, 424, 128, 145, 425, + 47, 156, 426, 427, 32, 32, 32, 32, 47, 47, 47, 359, 428, 160, 47, 47, + 429, 430, 160, 160, 160, 160, 160, 160, 47, 47, 47, 47, 47, 47, 47, 431, + 47, 47, 47, 47, 145, 432, 433, 434, 219, 219, 219, 219, 219, 219, 219, 66, + 47, 47, 47, 47, 47, 47, 47, 424, 47, 47, 47, 208, 208, 208, 208, 208, + 47, 47, 47, 47, 47, 47, 305, 47, 47, 47, 47, 47, 160, 47, 47, 435, + 47, 47, 47, 436, 437, 438, 439, 47, 9, 9, 9, 9, 9, 9, 11, 11, + 145, 440, 66, 66, 66, 66, 66, 66, 47, 47, 47, 47, 391, 441, 416, 416, + 442, 443, 27, 27, 27, 27, 444, 416, 47, 445, 208, 208, 208, 208, 208, 208, + 32, 32, 32, 32, 32, 146, 146, 146, 146, 146, 146, 146, 146, 146, 446, 447, + 448, 146, 449, 146, 146, 146, 146, 146, 146, 146, 146, 146, 450, 146, 146, 146, + 9, 451, 11, 452, 453, 11, 196, 9, 454, 455, 9, 456, 11, 9, 451, 11, + 452, 453, 11, 196, 9, 454, 455, 9, 456, 11, 9, 451, 11, 452, 453, 11, + 196, 9, 454, 455, 9, 456, 11, 9, 451, 11, 196, 9, 457, 458, 459, 460, + 11, 461, 9, 462, 463, 464, 465, 11, 466, 9, 467, 11, 468, 160, 160, 160, + 32, 32, 32, 469, 32, 32, 470, 471, 472, 473, 32, 32, 32, 32, 32, 32, + 474, 11, 11, 11, 11, 11, 11, 11, 32, 32, 32, 32, 32, 32, 32, 32, + 47, 47, 47, 475, 476, 146, 146, 146, 47, 47, 477, 32, 47, 47, 478, 479, + 47, 47, 47, 47, 355, 32, 32, 32, 9, 9, 454, 11, 480, 305, 66, 66, + 145, 145, 481, 482, 145, 145, 145, 145, 145, 145, 483, 145, 145, 145, 145, 145, + 47, 47, 47, 47, 47, 47, 47, 226, 484, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 485, 146, 146, 146, 146, 146, 146, 146, 160, + 208, 208, 208, 208, 208, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 939, 940, 941, 942, 946, 948, 0, 962, + 969, 970, 971, 976,1001,1002,1003,1008, 0,1033,1040,1041,1042,1043,1047, 0, + 0,1080,1081,1082,1086,1110, 0, 0,1124,1125,1126,1127,1131,1133, 0,1147, + 1154,1155,1156,1161,1187,1188,1189,1193, 0,1219,1226,1227,1228,1229,1233, 0, + 0,1267,1268,1269,1273,1298, 0,1303, 943,1128, 944,1129, 954,1139, 958,1143, + 959,1144, 960,1145, 961,1146, 964,1149, 0, 0, 973,1158, 974,1159, 975,1160, + 983,1168, 978,1163, 988,1173, 990,1175, 991,1176, 993,1178, 994,1179, 0, 0, + 1004,1190,1005,1191,1006,1192,1014,1199,1007, 0, 0, 0,1016,1201,1020,1206, + 0,1022,1208,1025,1211,1023,1209, 0, 0, 0, 0,1032,1218,1037,1223,1035, + 1221, 0, 0, 0,1044,1230,1045,1231,1049,1235, 0, 0,1058,1244,1064,1250, + 1060,1246,1066,1252,1067,1253,1072,1258,1069,1255,1077,1264,1074,1261, 0, 0, + 1083,1270,1084,1271,1085,1272,1088,1275,1089,1276,1096,1283,1103,1290,1111,1299, + 1115,1118,1307,1120,1309,1121,1310, 0,1053,1239, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,1093,1280, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 949,1134,1010,1195,1050,1236,1090,1277,1341,1368,1340, + 1367,1342,1369,1339,1366, 0,1320,1347,1418,1419,1323,1350, 0, 0, 992,1177, + 1018,1204,1055,1241,1416,1417,1415,1424,1202, 0, 0, 0, 987,1172, 0, 0, + 1031,1217,1321,1348,1322,1349,1338,1365, 950,1135, 951,1136, 979,1164, 980,1165, + 1011,1196,1012,1197,1051,1237,1052,1238,1061,1247,1062,1248,1091,1278,1092,1279, + 1071,1257,1076,1263, 0, 0, 997,1182, 0, 0, 0, 0, 0, 0, 945,1130, + 982,1167,1337,1364,1335,1362,1046,1232,1422,1423,1113,1301, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 8, 9, 0, 10,1425, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,1314,1427, 5, + 1434,1438,1443, 0,1450, 0,1455,1461,1514, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,1446,1458,1468,1476,1480,1486,1517, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,1489,1503,1494,1500,1508, 0, 0, 0, 0,1520,1521, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,1526,1528, 0,1525, 0, 0, 0,1522, + 0, 0, 0, 0,1536,1532,1539, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,1534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,1556, 0, 0, 0, 0, 0, 0,1548,1550, 0,1547, 0, 0, 0,1567, + 0, 0, 0, 0,1558,1554,1561, 0, 0, 0, 0, 0, 0, 0,1568,1569, + 0, 0, 0, 0, 0, 0, 0, 0, 0,1529,1551, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,1523,1545,1524,1546, 0, 0,1527,1549, + 0, 0,1570,1571,1530,1552,1531,1553, 0, 0,1533,1555,1535,1557,1537,1559, + 0, 0,1572,1573,1544,1566,1538,1560,1540,1562,1541,1563,1542,1564, 0, 0, + 1543,1565, 0, 0, 0, 0, 0, 0, 0, 0,1606,1607,1609,1608,1610, 0, + 0, 0, 0, 0, 0, 0, 0, 0,1613, 0,1611, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1612, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,1620, 0, 0, 0, 0, 0, 0, 0,1623, 0, 0,1624, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1614,1615,1616,1617,1618,1619,1621,1622, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,1628,1629, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,1625,1626, 0,1627, 0, 0, 0,1634, 0, 0,1635, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,1630,1631,1632, 0, 0,1633, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1639, 0, 0,1638,1640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,1636,1637, 0, 0, 0, 0, 0, 0,1641, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,1642,1644,1643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1645, 0, 0, 0, 0, 0, 0, 0,1646, 0, 0, 0, 0, 0, 0,1648, + 1649, 0,1647,1650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,1651,1653,1652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,1654, 0,1655,1657,1656, 0, 0, 0, 0,1659, 0, 0, 0, 0, + 0, 0, 0, 0, 0,1660, 0, 0, 0, 0,1661, 0, 0, 0, 0,1662, + 0, 0, 0, 0,1663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,1658, 0, 0, 0, 0, 0, 0, 0, 0, 0,1664, 0,1665,1673, 0, + 1674, 0, 0, 0, 0, 0, 0, 0, 0,1666, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1668, 0, 0, 0, 0, + 0, 0, 0, 0, 0,1669, 0, 0, 0, 0,1670, 0, 0, 0, 0,1671, + 0, 0, 0, 0,1672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,1667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1675, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1676, 0, + 1677, 0,1678, 0,1679, 0,1680, 0, 0, 0,1681, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,1682, 0,1683, 0, 0,1684,1685, 0,1686, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 953,1138, 955,1140, 956,1141, 957,1142, + 1324,1351, 963,1148, 965,1150, 968,1153, 966,1151, 967,1152,1378,1380,1379,1381, + 984,1169, 985,1170,1420,1421, 986,1171, 989,1174, 995,1180, 998,1183, 996,1181, + 999,1184,1000,1185,1015,1200,1329,1356,1017,1203,1019,1205,1021,1207,1024,1210, + 1687,1688,1027,1213,1026,1212,1028,1214,1029,1215,1030,1216,1034,1220,1036,1222, + 1039,1225,1038,1224,1334,1361,1336,1363,1382,1384,1383,1385,1056,1242,1057,1243, + 1059,1245,1063,1249,1689,1690,1065,1251,1068,1254,1070,1256,1386,1387,1388,1389, + 1691,1692,1073,1259,1075,1262,1079,1266,1078,1265,1095,1282,1098,1285,1097,1284, + 1390,1391,1392,1393,1099,1286,1100,1287,1101,1288,1102,1289,1105,1292,1104,1291, + 1106,1294,1107,1295,1108,1296,1114,1302,1119,1308,1122,1311,1123,1312,1186,1260, + 1293,1305, 0,1394, 0, 0, 0, 0, 952,1137, 947,1132,1317,1344,1316,1343, + 1319,1346,1318,1345,1693,1695,1371,1375,1370,1374,1373,1377,1372,1376,1694,1696, + 981,1166, 977,1162, 972,1157,1326,1353,1325,1352,1328,1355,1327,1354,1697,1698, + 1009,1194,1013,1198,1054,1240,1048,1234,1331,1358,1330,1357,1333,1360,1332,1359, + 1699,1700,1396,1401,1395,1400,1398,1403,1397,1402,1399,1404,1094,1281,1087,1274, + 1406,1411,1405,1410,1408,1413,1407,1412,1409,1414,1109,1297,1117,1306,1116,1304, + 1112,1300, 0, 0, 0, 0, 0, 0,1471,1472,1701,1705,1702,1706,1703,1707, + 1430,1431,1715,1719,1716,1720,1717,1721,1477,1478,1729,1731,1730,1732, 0, 0, + 1435,1436,1733,1735,1734,1736, 0, 0,1481,1482,1737,1741,1738,1742,1739,1743, + 1439,1440,1751,1755,1752,1756,1753,1757,1490,1491,1765,1768,1766,1769,1767,1770, + 1447,1448,1771,1774,1772,1775,1773,1776,1495,1496,1777,1779,1778,1780, 0, 0, + 1451,1452,1781,1783,1782,1784, 0, 0,1504,1505,1785,1788,1786,1789,1787,1790, + 0,1459, 0,1791, 0,1792, 0,1793,1509,1510,1794,1798,1795,1799,1796,1800, + 1462,1463,1808,1812,1809,1813,1810,1814,1467, 21,1475, 22,1479, 23,1485, 24, + 1493, 27,1499, 28,1507, 29, 0, 0,1704,1708,1709,1710,1711,1712,1713,1714, + 1718,1722,1723,1724,1725,1726,1727,1728,1740,1744,1745,1746,1747,1748,1749,1750, + 1754,1758,1759,1760,1761,1762,1763,1764,1797,1801,1802,1803,1804,1805,1806,1807, + 1811,1815,1816,1817,1818,1819,1820,1821,1470,1469,1822,1474,1465, 0,1473,1825, + 1429,1428,1426, 12,1432, 0, 26, 0, 0,1315,1823,1484,1466, 0,1483,1829, + 1433, 13,1437, 14,1441,1826,1827,1828,1488,1487,1513, 19, 0, 0,1492,1515, + 1445,1444,1442, 15, 0,1831,1832,1833,1502,1501,1516, 25,1497,1498,1506,1518, + 1457,1456,1454, 17,1453,1313, 11, 3, 0, 0,1824,1512,1519, 0,1511,1830, + 1449, 16,1460, 18,1464, 4, 0, 0, 30, 31, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, + 0, 0, 2, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,1834,1835, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,1836, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,1837,1839,1838, 0, 0, 0, 0,1840, 0, 0, 0, + 0,1841, 0, 0,1842, 0, 0, 0, 0, 0, 0, 0,1843, 0,1844, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,1845, 0, 0,1846, 0, 0,1847, + 0,1848, 0, 0, 0, 0, 0, 0, 937, 0,1850, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,1849, 936, 938,1851,1852, 0, 0,1853,1854, 0, 0, + 1855,1856, 0, 0, 0, 0, 0, 0,1857,1858, 0, 0,1861,1862, 0, 0, + 1863,1864, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,1867,1868,1869,1870,1859,1860,1865,1866, 0, 0, 0, 0, + 0, 0,1871,1872,1873,1874, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 32, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,1875, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,1877, 0,1878, 0,1879, 0,1880, 0,1881, 0,1882, 0, + 1883, 0,1884, 0,1885, 0,1886, 0,1887, 0,1888, 0, 0,1889, 0,1890, + 0,1891, 0, 0, 0, 0, 0, 0,1892,1893, 0,1894,1895, 0,1896,1897, + 0,1898,1899, 0,1900,1901, 0, 0, 0, 0, 0, 0,1876, 0, 0, 0, + 0, 0, 0, 0, 0, 0,1902, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,1904, 0,1905, 0,1906, 0,1907, 0,1908, 0,1909, 0, + 1910, 0,1911, 0,1912, 0,1913, 0,1914, 0,1915, 0, 0,1916, 0,1917, + 0,1918, 0, 0, 0, 0, 0, 0,1919,1920, 0,1921,1922, 0,1923,1924, + 0,1925,1926, 0,1927,1928, 0, 0, 0, 0, 0, 0,1903, 0, 0,1929, + 1930,1931,1932, 0, 0, 0,1933, 0, 710, 385, 724, 715, 455, 103, 186, 825, + 825, 242, 751, 205, 241, 336, 524, 601, 663, 676, 688, 738, 411, 434, 474, 500, + 649, 746, 799, 108, 180, 416, 482, 662, 810, 275, 462, 658, 692, 344, 618, 679, + 293, 388, 440, 492, 740, 116, 146, 168, 368, 414, 481, 527, 606, 660, 665, 722, + 781, 803, 809, 538, 553, 588, 642, 758, 811, 701, 233, 299, 573, 612, 487, 540, + 714, 779, 232, 267, 412, 445, 457, 585, 594, 766, 167, 613, 149, 148, 560, 589, + 648, 768, 708, 345, 411, 704, 105, 259, 313, 496, 518, 174, 542, 120, 307, 101, + 430, 372, 584, 183, 228, 529, 650, 697, 424, 732, 428, 349, 632, 355, 517, 110, + 135, 147, 403, 580, 624, 700, 750, 170, 193, 245, 297, 374, 463, 543, 763, 801, + 812, 815, 162, 384, 420, 730, 287, 330, 337, 366, 459, 476, 509, 558, 591, 610, + 726, 652, 734, 759, 154, 163, 198, 473, 683, 697, 292, 311, 353, 423, 572, 494, + 113, 217, 259, 280, 314, 499, 506, 603, 608, 752, 778, 782, 788, 117, 557, 748, + 774, 320, 109, 126, 260, 265, 373, 411, 479, 523, 655, 737, 823, 380, 765, 161, + 395, 398, 438, 451, 502, 516, 537, 583, 791, 136, 340, 769, 122, 273, 446, 727, + 305, 322, 400, 496, 771, 155, 190, 269, 377, 391, 406, 432, 501, 519, 599, 684, + 687, 749, 776, 175, 452, 191, 480, 510, 659, 772, 805, 813, 397, 444, 619, 566, + 568, 575, 491, 471, 707, 111, 636, 156, 153, 288, 346, 578, 256, 435, 383, 729, + 680, 767, 694, 295, 128, 210, 0, 0, 227, 0, 379, 0, 0, 150, 493, 525, + 544, 551, 552, 556, 783, 576, 604, 0, 661, 0, 703, 0, 0, 735, 743, 0, + 0, 0, 793, 794, 795, 808, 741, 773, 118, 127, 130, 166, 169, 177, 207, 213, + 215, 226, 229, 268, 270, 317, 327, 329, 335, 369, 375, 381, 404, 441, 448, 458, + 477, 484, 503, 539, 545, 547, 546, 548, 549, 550, 554, 555, 561, 564, 569, 591, + 593, 595, 598, 607, 620, 625, 625, 651, 690, 695, 705, 706, 716, 717, 733, 735, + 777, 786, 790, 315, 869, 623, 0, 0, 102, 145, 134, 115, 129, 138, 165, 171, + 207, 202, 206, 212, 227, 231, 240, 243, 250, 254, 294, 296, 303, 308, 319, 325, + 321, 329, 326, 335, 341, 357, 360, 362, 370, 379, 388, 389, 393, 421, 424, 438, + 456, 454, 458, 465, 477, 535, 485, 490, 493, 507, 512, 514, 521, 522, 525, 526, + 528, 533, 532, 541, 565, 569, 574, 586, 591, 597, 607, 637, 647, 674, 691, 693, + 695, 698, 703, 699, 705, 704, 702, 706, 709, 717, 728, 736, 747, 754, 770, 777, + 783, 784, 786, 787, 790, 802, 825, 848, 847, 857, 55, 65, 66, 883, 892, 916, + 822, 824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,1586, 0,1605, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,1602,1603,1934,1935,1574,1575,1576,1577,1579,1580,1581,1583,1584, 0, + 1585,1587,1588,1589,1591, 0,1592, 0,1593,1594, 0,1595,1596, 0,1598,1599, + 1600,1601,1604,1582,1578,1590,1597, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,1936, 0,1937, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,1938, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,1939,1940, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,1941,1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,1944,1943, 0,1945, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,1946,1947, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1948, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,1949,1950,1951,1952,1953,1954,1955, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,1956,1957,1958,1960,1959,1961, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 106, 104, 107, 826, 114, 118, 119, 121, + 123, 124, 127, 125, 34, 830, 130, 131, 132, 137, 827, 35, 133, 139, 829, 142, + 143, 112, 144, 145, 924, 151, 152, 37, 157, 158, 159, 160, 38, 165, 166, 169, + 171, 172, 173, 174, 176, 177, 178, 179, 181, 182, 182, 182, 833, 468, 184, 185, + 834, 187, 188, 189, 196, 192, 194, 195, 197, 199, 200, 201, 203, 204, 204, 206, + 208, 209, 211, 218, 213, 219, 214, 216, 153, 234, 221, 222, 223, 220, 225, 224, + 230, 835, 235, 236, 237, 238, 239, 244, 836, 837, 247, 248, 249, 246, 251, 39, + 40, 253, 255, 255, 838, 257, 258, 259, 261, 839, 262, 263, 301, 264, 41, 266, + 270, 272, 271, 841, 274, 842, 277, 276, 278, 281, 282, 42, 283, 284, 285, 286, + 43, 843, 44, 289, 290, 291, 293, 934, 298, 845, 845, 621, 300, 300, 45, 852, + 894, 302, 304, 46, 306, 309, 310, 312, 316, 48, 47, 317, 846, 318, 323, 324, + 325, 324, 328, 329, 333, 331, 332, 334, 335, 336, 338, 339, 342, 343, 347, 351, + 849, 350, 348, 352, 354, 359, 850, 361, 358, 356, 49, 363, 365, 367, 364, 50, + 369, 371, 851, 376, 386, 378, 53, 381, 52, 51, 140, 141, 387, 382, 614, 78, + 388, 389, 390, 394, 392, 856, 54, 399, 396, 402, 404, 858, 405, 401, 407, 55, + 408, 409, 410, 413, 859, 415, 56, 417, 860, 418, 57, 419, 422, 424, 425, 861, + 840, 862, 426, 863, 429, 431, 427, 433, 437, 441, 438, 439, 442, 443, 864, 436, + 449, 450, 58, 454, 453, 865, 447, 460, 866, 867, 461, 466, 465, 464, 59, 467, + 470, 469, 472, 828, 475, 868, 478, 870, 483, 485, 486, 871, 488, 489, 872, 873, + 495, 497, 60, 498, 61, 61, 504, 505, 507, 508, 511, 62, 513, 874, 515, 875, + 518, 844, 520, 876, 877, 878, 63, 64, 528, 880, 879, 881, 882, 530, 531, 531, + 533, 66, 534, 67, 68, 884, 536, 538, 541, 69, 885, 549, 886, 887, 556, 559, + 70, 561, 562, 563, 888, 889, 889, 567, 71, 890, 570, 571, 72, 891, 577, 73, + 581, 579, 582, 893, 587, 74, 590, 592, 596, 75, 895, 896, 76, 897, 600, 898, + 602, 605, 607, 899, 900, 609, 901, 611, 853, 77, 615, 616, 79, 617, 252, 902, + 903, 854, 855, 621, 622, 731, 80, 627, 626, 628, 164, 629, 630, 631, 633, 904, + 632, 634, 639, 640, 635, 641, 646, 651, 638, 643, 644, 645, 905, 907, 906, 81, + 653, 654, 656, 911, 657, 908, 82, 83, 909, 910, 84, 664, 665, 666, 667, 669, + 668, 671, 670, 674, 672, 673, 675, 85, 677, 678, 86, 681, 682, 912, 685, 686, + 87, 689, 36, 913, 914, 88, 89, 696, 702, 709, 711, 915, 712, 713, 718, 719, + 917, 831, 721, 720, 723, 832, 725, 728, 918, 919, 739, 742, 744, 920, 745, 753, + 756, 757, 755, 760, 761, 921, 762, 90, 764, 922, 91, 775, 279, 780, 923, 925, + 92, 93, 785, 926, 94, 927, 787, 787, 789, 928, 792, 95, 796, 797, 798, 800, + 96, 929, 802, 804, 806, 97, 98, 807, 930, 99, 931, 932, 933, 814, 100, 816, + 817, 818, 819, 820, 821, 935, 0, 0, +}; +static const int16_t +_hb_ucd_i16[196] = +{ + 0, 0, 0, 0, 1, -1, 0, 0, 2, 0, -2, 0, 0, 0, 0, 2, + 0, -2, 0, 0, 0, 0, 0, 16, 0, 0, 0, -16, 0, 0, 1, -1, + 0, 0, 0, 1, -1, 0, 0, 0, 0, 1, -1, 0, 3, 3, 3, -3, + -3, -3, 0, 0, 0, 2016, 0, 0, 0, 0, 0, 2527, 1923, 1914, 1918, 0, + 2250, 0, 0, 0, 0, 0, 0, 138, 0, 7, 0, 0, -7, 0, 0, 0, + 1, -1, 1, -1, -1, 1, -1, 0, 1824, 0, 0, 0, 0, 0, 2104, 0, + 2108, 2106, 0, 2106, 1316, 0, 0, 0, 0, 1, -1, 1, -1, -138, 0, 0, + 1, -1, 8, 8, 8, 0, 7, 7, 0, 0, -8, -8, -8, -7, -7, 0, + 1, -1, 0, 2,-1316, 1, -1, 0, -1, 1, -1, 1, -1, 3, 1, -1, + -3, 1, -1, 1, -1, 0, 0,-1914,-1918, 0, 0,-1923,-1824, 0, 0, 0, + 0,-2016, 0, 0, 1, -1, 0, 1, 0, 0,-2104, 0, 0, 0, 0,-2106, + -2108,-2106, 0, 0, 1, -1,-2250, 0, 0, 0,-2527, 0, 0, -2, 0, 1, + -1, 0, 1, -1, }; static inline uint_fast8_t _hb_ucd_gc (unsigned u) { - return u<1114112u?_hb_ucd_u8[4920+(((_hb_ucd_u8[1104+(((_hb_ucd_u16[((_hb_ucd_u8[272+(((_hb_ucd_u8[u>>1>>3>>3>>5])<<5)+((u>>1>>3>>3)&31u))])<<3)+((u>>1>>3)&7u)])<<3)+((u>>1)&7u))])<<1)+((u)&1u))]:2; + return u<1114112u?_hb_ucd_u8[5056+(((_hb_ucd_u8[1168+(((_hb_ucd_u16[((_hb_ucd_u8[544+(((_hb_ucd_u8[u>>1>>3>>3>>4])<<4)+((u>>1>>3>>3)&15u))])<<3)+((u>>1>>3)&7u)])<<3)+((u>>1)&7u))])<<1)+((u)&1u))]:2; } static inline uint_fast8_t _hb_ucd_ccc (unsigned u) { - return u<125259u?_hb_ucd_u8[6796+(((_hb_ucd_u8[6276+(((_hb_ucd_u8[5844+(((_hb_ucd_u8[5508+(((_hb_ucd_u8[5262+(u>>2>>2>>2>>3)])<<3)+((u>>2>>2>>2)&7u))])<<2)+((u>>2>>2)&3u))])<<2)+((u>>2)&3u))])<<2)+((u)&3u))]:0; + return u<125259u?_hb_ucd_u8[6970+(((_hb_ucd_u8[6426+(((_hb_ucd_u8[5982+(((_hb_ucd_u8[5646+(((_hb_ucd_u8[5400+(u>>2>>2>>2>>3)])<<3)+((u>>2>>2>>2)&7u))])<<2)+((u>>2>>2)&3u))])<<2)+((u>>2)&3u))])<<2)+((u)&3u))]:0; } static inline unsigned _hb_ucd_b4 (const uint8_t* a, unsigned i) @@ -6759,17 +6877,17 @@ _hb_ucd_b4 (const uint8_t* a, unsigned i) static inline int_fast16_t _hb_ucd_bmg (unsigned u) { - return u<65380u?_hb_ucd_i16[((_hb_ucd_u8[7672+(((_hb_ucd_u8[7448+(((_hb_ucd_u8[7352+(((_hb_ucd_b4(7288+_hb_ucd_u8,u>>1>>2>>3>>3))<<3)+((u>>1>>2>>3)&7u))])<<3)+((u>>1>>2)&7u))])<<2)+((u>>1)&3u))])<<1)+((u)&1u)]:0; + return u<65380u?_hb_ucd_i16[((_hb_ucd_u8[7714+(((_hb_ucd_u8[7594+(((_hb_ucd_b4(7466+_hb_ucd_u8,u>>2>>3>>3))<<3)+((u>>2>>3)&7u))])<<3)+((u>>2)&7u))])<<2)+((u)&3u)]:0; } static inline uint_fast8_t _hb_ucd_sc (unsigned u) { - return u<918016u?_hb_ucd_u8[11242+(((_hb_ucd_u8[10314+(((_hb_ucd_u8[8938+(((_hb_ucd_u8[8362+(((_hb_ucd_u8[7912+(u>>2>>2>>3>>4)])<<4)+((u>>2>>2>>3)&15u))])<<3)+((u>>2>>2)&7u))])<<2)+((u>>2)&3u))])<<2)+((u)&3u))]:2; + return u<918016u?_hb_ucd_u8[11480+(((_hb_ucd_u8[10532+(((_hb_ucd_u8[9124+(((_hb_ucd_u8[8500+(((_hb_ucd_u8[8050+(u>>2>>2>>3>>4)])<<4)+((u>>2>>2>>3)&15u))])<<3)+((u>>2>>2)&7u))])<<2)+((u>>2)&3u))])<<2)+((u)&3u))]:2; } static inline uint_fast16_t _hb_ucd_dm (unsigned u) { - return u<195102u?_hb_ucd_u16[1536+(((_hb_ucd_u8[12544+(((_hb_ucd_u8[12162+(u>>4>>5)])<<5)+((u>>4)&31u))])<<4)+((u)&15u))]:0; + return u<195102u?_hb_ucd_u16[1576+(((_hb_ucd_u8[12802+(((_hb_ucd_u8[12420+(u>>4>>5)])<<5)+((u>>4)&31u))])<<4)+((u)&15u))]:0; } #endif diff --git a/thirdparty/harfbuzz/src/hb-ucd.cc b/thirdparty/harfbuzz/src/hb-ucd.cc index ad72a26c04..baea224a25 100644 --- a/thirdparty/harfbuzz/src/hb-ucd.cc +++ b/thirdparty/harfbuzz/src/hb-ucd.cc @@ -203,9 +203,7 @@ hb_ucd_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED, } -#if HB_USE_ATEXIT static void free_static_ucd_funcs (); -#endif static struct hb_ucd_unicode_funcs_lazy_loader_t : hb_unicode_funcs_lazy_loader_t<hb_ucd_unicode_funcs_lazy_loader_t> { @@ -222,21 +220,17 @@ static struct hb_ucd_unicode_funcs_lazy_loader_t : hb_unicode_funcs_lazy_loader_ hb_unicode_funcs_make_immutable (funcs); -#if HB_USE_ATEXIT - atexit (free_static_ucd_funcs); -#endif + hb_atexit (free_static_ucd_funcs); return funcs; } } static_ucd_funcs; -#if HB_USE_ATEXIT -static +static inline void free_static_ucd_funcs () { static_ucd_funcs.free_instance (); } -#endif hb_unicode_funcs_t * hb_ucd_get_unicode_funcs () diff --git a/thirdparty/harfbuzz/src/hb-unicode-emoji-table.hh b/thirdparty/harfbuzz/src/hb-unicode-emoji-table.hh index eb7776eecb..c216379201 100644 --- a/thirdparty/harfbuzz/src/hb-unicode-emoji-table.hh +++ b/thirdparty/harfbuzz/src/hb-unicode-emoji-table.hh @@ -6,14 +6,14 @@ * * on file with this header: * - * # emoji-data.txt - * # Date: 2020-01-28, 20:52:38 GMT - * # © 2020 Unicode®, Inc. + * # emoji-data-14.0.0.txt + * # Date: 2021-08-26, 17:22:22 GMT + * # © 2021 Unicode®, Inc. * # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. * # For terms of use, see http://www.unicode.org/terms_of_use.html * # * # Emoji Data for UTS #51 - * # Version: 13.0 + * # Used with Emoji Version 14.0 and subsequent minor revisions (if any) * # * # For documentation and usage, see http://www.unicode.org/reports/tr51 */ @@ -24,36 +24,42 @@ #include "hb-unicode.hh" static const uint8_t -_hb_emoji_u8[448] = +_hb_emoji_u8[544] = { - 0, 0, 0, 0, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16, 17, 17, 17, 50, 20, 21, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,118,152, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,118, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 3, - 0, 0, 0, 0, 0, 0, 4, 5, 6, 7, 8, 7, 9, 10, 11, 0, - 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, - 7, 7, 7, 14, 15, 16, 17, 18, 19, 20, 7, 7, 7, 7, 7, 21, - 7, 7, 7, 7, 22, 23, 7, 7, 7, 24, 7, 14, 0, 25, 0, 26, - 27, 28, 29, 14, 30, 31, 7, 7, 7, 7, 7, 14, 0, 0, 0, 0, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 22, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 1, 0, 2, 0, 0, - 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,254, 7, 3, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, - 159,255,243,255,255,255,255,255,255,255,255,255,255,255,255,255, - 31, 0,255,255,255,255,255,255, 31,255, 3, 0, 0, 0, 8, 0, - 0, 0, 24, 0,120, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 16, 0, 96, 0, 0, 8, 0, 0, 0, 0, - 255,255,255,255,255,255,255,127, 0, 96, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,240, 1, 64, 0, 0,254, 3, 0,224,255,255, - 255,255,255,255, 31, 0, 0, 0,254,127, 0, 0, 0, 0,252,115, - 0,254,255,255,255,255,255,255,255,255,255,255,255,255,255, 3, - 255,255,255,255,255,255,255, 31,192,255,255,255,255,255,255,255, - 255,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,127, - 0, 0,224,255,255,255,255,127, 0,112, 0, 0, 0, 0, 0, 0, - 0,127, 0,124, 0, 0, 0, 0, 0,127, 0, 0, 0,192,255,255, - 0,240,255,255,255,255,255,243,159,255,255,255,255,255,255,255, + 2, 3, 0, 0, 4, 0, 5, 0, 0, 0, 0, 0, 6, 0, 7, 8, + 0, 0, 0, 9, 0, 0, 10, 11, 12, 13, 14, 13, 15, 16, 17, 0, + 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 19, 20, 0, 0, + 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, + 13, 13, 13, 13, 23, 24, 25, 26, 27, 28, 13, 13, 13, 13, 13, 29, + 13, 13, 13, 13, 30, 31, 13, 13, 13, 32, 13, 13, 0, 33, 0, 34, + 35, 36, 37, 13, 38, 39, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 30, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 16, 0, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4, 0, 0, 2, 0, 0,240, 3, 0, 6, 0, 0, + 0, 0, 0, 12, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, + 0,128, 0, 0, 0,254, 15, 7, 4, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 12, 64, 0, 1, 0, 0, 0, 0, 0, 0,120, + 191,255,247,255,255,255,255,255,255,255,255,255,255,255,255,255, + 63, 0,255,255,255,255,255,255, 63,255, 87, 32, 2, 1, 24, 0, + 144, 80,184, 0,248, 0, 0, 0, 0, 0,224, 0, 2, 0, 1,128, + 0, 0, 0, 0, 0, 0, 48, 0,224, 0, 0, 24, 0, 0, 0, 0, + 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 32, + 0, 0,128, 2, 0, 0, 0, 0, 0,224, 0, 0, 0,128, 0, 0, + 0, 0, 0, 0, 0,240, 3,192, 0, 64,254, 7, 0,224,255,255, + 255,255,255,255, 63, 0, 0, 0,254,255, 0, 4, 0,128,252,247, + 0,254,255,255,255,255,255,255,255,255,255,255,255,255,255, 7, + 255,255,255,255,255,255,255, 63,192,255,255,255,255,255,255,255, + 255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,255, + 0, 0,224,255,255,255,255,255, 0,240, 0, 0, 0, 0, 0, 0, + 0,255, 0,252, 0, 0, 0, 0, 0,255, 0, 0, 0,192,255,255, + 0,240,255,255,255,255,255,247,191,255,255,255,255,255,255,255, }; static inline unsigned @@ -69,7 +75,7 @@ _hb_emoji_b1 (const uint8_t* a, unsigned i) static inline uint_fast8_t _hb_emoji_is_Extended_Pictographic (unsigned u) { - return u<131069u?_hb_emoji_b1(192+_hb_emoji_u8,((_hb_emoji_u8[64+(((_hb_emoji_b4(_hb_emoji_u8,u>>6>>4))<<4)+((u>>6)&15u))])<<6)+((u)&63u)):0; + return u<131070u?_hb_emoji_b1(224+_hb_emoji_u8,((_hb_emoji_u8[64+(((_hb_emoji_b4(_hb_emoji_u8,u>>6>>4))<<4)+((u>>6)&15u))])<<6)+((u)&63u)):0; } diff --git a/thirdparty/harfbuzz/src/hb-unicode.cc b/thirdparty/harfbuzz/src/hb-unicode.cc index 7470bb1b6e..83ead6398b 100644 --- a/thirdparty/harfbuzz/src/hb-unicode.cc +++ b/thirdparty/harfbuzz/src/hb-unicode.cc @@ -268,7 +268,7 @@ hb_unicode_funcs_destroy (hb_unicode_funcs_t *ufuncs) hb_unicode_funcs_destroy (ufuncs->parent); - free (ufuncs); + hb_free (ufuncs); } /** diff --git a/thirdparty/harfbuzz/src/hb-unicode.hh b/thirdparty/harfbuzz/src/hb-unicode.hh index 34d66d7aa3..0a79944107 100644 --- a/thirdparty/harfbuzz/src/hb-unicode.hh +++ b/thirdparty/harfbuzz/src/hb-unicode.hh @@ -289,8 +289,8 @@ DECLARE_NULL_INSTANCE (hb_unicode_funcs_t); #define HB_MODIFIED_COMBINING_CLASS_CCC15 18 /* tsere */ #define HB_MODIFIED_COMBINING_CLASS_CCC16 19 /* segol */ #define HB_MODIFIED_COMBINING_CLASS_CCC17 20 /* patah */ -#define HB_MODIFIED_COMBINING_CLASS_CCC18 21 /* qamats */ -#define HB_MODIFIED_COMBINING_CLASS_CCC19 14 /* holam */ +#define HB_MODIFIED_COMBINING_CLASS_CCC18 21 /* qamats & qamats qatan */ +#define HB_MODIFIED_COMBINING_CLASS_CCC19 14 /* holam & holam haser for vav*/ #define HB_MODIFIED_COMBINING_CLASS_CCC20 24 /* qubuts */ #define HB_MODIFIED_COMBINING_CLASS_CCC21 12 /* dagesh */ #define HB_MODIFIED_COMBINING_CLASS_CCC22 25 /* meteg */ @@ -359,6 +359,13 @@ DECLARE_NULL_INSTANCE (hb_unicode_funcs_t); FLAG (HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK) | \ FLAG (HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK))) +#define HB_UNICODE_GENERAL_CATEGORY_IS_LETTER(gen_cat) \ + (FLAG_UNSAFE (gen_cat) & \ + (FLAG (HB_UNICODE_GENERAL_CATEGORY_LOWERCASE_LETTER) | \ + FLAG (HB_UNICODE_GENERAL_CATEGORY_MODIFIER_LETTER) | \ + FLAG (HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER) | \ + FLAG (HB_UNICODE_GENERAL_CATEGORY_TITLECASE_LETTER) | \ + FLAG (HB_UNICODE_GENERAL_CATEGORY_UPPERCASE_LETTER))) /* * Ranges, used for bsearch tables. diff --git a/thirdparty/harfbuzz/src/hb-uniscribe.cc b/thirdparty/harfbuzz/src/hb-uniscribe.cc index 48a5dc50ad..3dc4c0937d 100644 --- a/thirdparty/harfbuzz/src/hb-uniscribe.cc +++ b/thirdparty/harfbuzz/src/hb-uniscribe.cc @@ -44,6 +44,7 @@ #include "hb-uniscribe.h" +#include "hb-ms-feature-ranges.hh" #include "hb-open-file.hh" #include "hb-ot-name-table.hh" #include "hb-ot-layout.h" @@ -238,30 +239,26 @@ struct hb_uniscribe_shaper_funcs_t } }; -#if HB_USE_ATEXIT -static void free_static_uniscribe_shaper_funcs (); -#endif +static inline void free_static_uniscribe_shaper_funcs (); static struct hb_uniscribe_shaper_funcs_lazy_loader_t : hb_lazy_loader_t<hb_uniscribe_shaper_funcs_t, hb_uniscribe_shaper_funcs_lazy_loader_t> { static hb_uniscribe_shaper_funcs_t *create () { - hb_uniscribe_shaper_funcs_t *funcs = (hb_uniscribe_shaper_funcs_t *) calloc (1, sizeof (hb_uniscribe_shaper_funcs_t)); + hb_uniscribe_shaper_funcs_t *funcs = (hb_uniscribe_shaper_funcs_t *) hb_calloc (1, sizeof (hb_uniscribe_shaper_funcs_t)); if (unlikely (!funcs)) return nullptr; funcs->init (); -#if HB_USE_ATEXIT - atexit (free_static_uniscribe_shaper_funcs); -#endif + hb_atexit (free_static_uniscribe_shaper_funcs); return funcs; } static void destroy (hb_uniscribe_shaper_funcs_t *p) { - free ((void *) p); + hb_free ((void *) p); } static hb_uniscribe_shaper_funcs_t *get_null () { @@ -269,13 +266,11 @@ static struct hb_uniscribe_shaper_funcs_lazy_loader_t : hb_lazy_loader_t<hb_unis } } static_uniscribe_shaper_funcs; -#if HB_USE_ATEXIT -static +static inline void free_static_uniscribe_shaper_funcs () { static_uniscribe_shaper_funcs.free_instance (); } -#endif static hb_uniscribe_shaper_funcs_t * hb_uniscribe_shaper_get_funcs () @@ -284,44 +279,6 @@ hb_uniscribe_shaper_get_funcs () } -struct active_feature_t { - OPENTYPE_FEATURE_RECORD rec; - unsigned int order; - - HB_INTERNAL static int cmp (const void *pa, const void *pb) { - const active_feature_t *a = (const active_feature_t *) pa; - const active_feature_t *b = (const active_feature_t *) pb; - return a->rec.tagFeature < b->rec.tagFeature ? -1 : a->rec.tagFeature > b->rec.tagFeature ? 1 : - a->order < b->order ? -1 : a->order > b->order ? 1 : - a->rec.lParameter < b->rec.lParameter ? -1 : a->rec.lParameter > b->rec.lParameter ? 1 : - 0; - } - bool operator== (const active_feature_t *f) - { return cmp (this, f) == 0; } -}; - -struct feature_event_t { - unsigned int index; - bool start; - active_feature_t feature; - - HB_INTERNAL static int cmp (const void *pa, const void *pb) - { - const feature_event_t *a = (const feature_event_t *) pa; - const feature_event_t *b = (const feature_event_t *) pb; - return a->index < b->index ? -1 : a->index > b->index ? 1 : - a->start < b->start ? -1 : a->start > b->start ? 1 : - active_feature_t::cmp (&a->feature, &b->feature); - } -}; - -struct range_record_t { - TEXTRANGE_PROPERTIES props; - unsigned int index_first; /* == start */ - unsigned int index_last; /* == end - 1 */ -}; - - /* * shaper face data */ @@ -391,7 +348,7 @@ _hb_rename_font (hb_blob_t *blob, wchar_t *new_name) unsigned int name_table_offset = (length + 3) & ~3; new_length = name_table_offset + padded_name_table_length; - void *new_sfnt_data = calloc (1, new_length); + void *new_sfnt_data = hb_calloc (1, new_length); if (!new_sfnt_data) { hb_blob_destroy (blob); @@ -441,7 +398,7 @@ _hb_rename_font (hb_blob_t *blob, wchar_t *new_name) } else if (face_index == 0) /* Fail if first face doesn't have 'name' table. */ { - free (new_sfnt_data); + hb_free (new_sfnt_data); hb_blob_destroy (blob); return nullptr; } @@ -453,20 +410,20 @@ _hb_rename_font (hb_blob_t *blob, wchar_t *new_name) hb_blob_destroy (blob); return hb_blob_create ((const char *) new_sfnt_data, new_length, - HB_MEMORY_MODE_WRITABLE, new_sfnt_data, free); + HB_MEMORY_MODE_WRITABLE, new_sfnt_data, hb_free); } hb_uniscribe_face_data_t * _hb_uniscribe_shaper_face_data_create (hb_face_t *face) { - hb_uniscribe_face_data_t *data = (hb_uniscribe_face_data_t *) calloc (1, sizeof (hb_uniscribe_face_data_t)); + hb_uniscribe_face_data_t *data = (hb_uniscribe_face_data_t *) hb_calloc (1, sizeof (hb_uniscribe_face_data_t)); if (unlikely (!data)) return nullptr; data->funcs = hb_uniscribe_shaper_get_funcs (); if (unlikely (!data->funcs)) { - free (data); + hb_free (data); return nullptr; } @@ -477,7 +434,7 @@ _hb_uniscribe_shaper_face_data_create (hb_face_t *face) blob = _hb_rename_font (blob, data->face_name); if (unlikely (!blob)) { - free (data); + hb_free (data); return nullptr; } @@ -488,7 +445,7 @@ _hb_uniscribe_shaper_face_data_create (hb_face_t *face) if (unlikely (!data->fh)) { DEBUG_MSG (UNISCRIBE, face, "Face AddFontMemResourceEx() failed"); - free (data); + hb_free (data); return nullptr; } @@ -499,7 +456,7 @@ void _hb_uniscribe_shaper_face_data_destroy (hb_uniscribe_face_data_t *data) { RemoveFontMemResourceEx (data->fh); - free (data); + hb_free (data); } @@ -533,7 +490,7 @@ populate_log_font (LOGFONTW *lf, hb_uniscribe_font_data_t * _hb_uniscribe_shaper_font_data_create (hb_font_t *font) { - hb_uniscribe_font_data_t *data = (hb_uniscribe_font_data_t *) calloc (1, sizeof (hb_uniscribe_font_data_t)); + hb_uniscribe_font_data_t *data = (hb_uniscribe_font_data_t *) hb_calloc (1, sizeof (hb_uniscribe_font_data_t)); if (unlikely (!data)) return nullptr; @@ -580,7 +537,7 @@ _hb_uniscribe_shaper_font_data_destroy (hb_uniscribe_font_data_t *data) DeleteObject (data->hfont); if (data->script_cache) ScriptFreeCache (&data->script_cache); - free (data); + hb_free (data); } /** @@ -635,109 +592,6 @@ _hb_uniscribe_shape (hb_shape_plan_t *shape_plan, const hb_uniscribe_font_data_t *font_data = font->data.uniscribe; hb_uniscribe_shaper_funcs_t *funcs = face_data->funcs; - /* - * Set up features. - */ - hb_vector_t<OPENTYPE_FEATURE_RECORD> feature_records; - hb_vector_t<range_record_t> range_records; - if (num_features) - { - /* Sort features by start/end events. */ - hb_vector_t<feature_event_t> feature_events; - for (unsigned int i = 0; i < num_features; i++) - { - active_feature_t feature; - feature.rec.tagFeature = hb_uint32_swap (features[i].tag); - feature.rec.lParameter = features[i].value; - feature.order = i; - - feature_event_t *event; - - event = feature_events.push (); - event->index = features[i].start; - event->start = true; - event->feature = feature; - - event = feature_events.push (); - event->index = features[i].end; - event->start = false; - event->feature = feature; - } - feature_events.qsort (); - /* Add a strategic final event. */ - { - active_feature_t feature; - feature.rec.tagFeature = 0; - feature.rec.lParameter = 0; - feature.order = num_features + 1; - - feature_event_t *event = feature_events.push (); - event->index = 0; /* This value does magic. */ - event->start = false; - event->feature = feature; - } - - /* Scan events and save features for each range. */ - hb_vector_t<active_feature_t> active_features; - unsigned int last_index = 0; - for (unsigned int i = 0; i < feature_events.length; i++) - { - feature_event_t *event = &feature_events[i]; - - if (event->index != last_index) - { - /* Save a snapshot of active features and the range. */ - range_record_t *range = range_records.push (); - - unsigned int offset = feature_records.length; - - active_features.qsort (); - for (unsigned int j = 0; j < active_features.length; j++) - { - if (!j || active_features[j].rec.tagFeature != feature_records[feature_records.length - 1].tagFeature) - { - feature_records.push (active_features[j].rec); - } - else - { - /* Overrides value for existing feature. */ - feature_records[feature_records.length - 1].lParameter = active_features[j].rec.lParameter; - } - } - - /* Will convert to pointer after all is ready, since feature_records.array - * may move as we grow it. */ - range->props.potfRecords = reinterpret_cast<OPENTYPE_FEATURE_RECORD *> (offset); - range->props.cotfRecords = feature_records.length - offset; - range->index_first = last_index; - range->index_last = event->index - 1; - - last_index = event->index; - } - - if (event->start) - { - active_features.push (event->feature); - } - else - { - active_feature_t *feature = active_features.find (&event->feature); - if (feature) - active_features.remove (feature - active_features.arrayZ); - } - } - - if (!range_records.length) /* No active feature found. */ - num_features = 0; - - /* Fixup the pointers. */ - for (unsigned int i = 0; i < range_records.length; i++) - { - range_record_t *range = &range_records[i]; - range->props.potfRecords = (OPENTYPE_FEATURE_RECORD *) feature_records + reinterpret_cast<uintptr_t> (range->props.potfRecords); - } - } - #define FAIL(...) \ HB_STMT_START { \ DEBUG_MSG (UNISCRIBE, nullptr, __VA_ARGS__); \ @@ -856,8 +710,23 @@ retry: nullptr, nullptr, &lang_count, &lang_tag); OPENTYPE_TAG language_tag = hb_uint32_swap (lang_count ? lang_tag : HB_TAG_NONE); - hb_vector_t<TEXTRANGE_PROPERTIES*> range_properties; - hb_vector_t<int> range_char_counts; + + /* + * Set up features. + */ + static_assert ((sizeof (TEXTRANGE_PROPERTIES) == sizeof (hb_ms_features_t)), ""); + static_assert ((sizeof (OPENTYPE_FEATURE_RECORD) == sizeof (hb_ms_feature_t)), ""); + hb_vector_t<hb_ms_feature_t> feature_records; + hb_vector_t<hb_ms_range_record_t> range_records; + bool has_features = false; + if (num_features) + has_features = hb_ms_setup_features (features, + num_features, + feature_records, + range_records); + + hb_vector_t<hb_ms_features_t*> range_properties; + hb_vector_t<uint32_t> range_char_counts; unsigned int glyphs_offset = 0; unsigned int glyphs_len; @@ -867,42 +736,14 @@ retry: unsigned int chars_offset = items[i].iCharPos; unsigned int item_chars_len = items[i + 1].iCharPos - chars_offset; - if (num_features) - { - range_properties.shrink (0); - range_char_counts.shrink (0); - - range_record_t *last_range = &range_records[0]; - - for (unsigned int k = chars_offset; k < chars_offset + item_chars_len; k++) - { - range_record_t *range = last_range; - while (log_clusters[k] < range->index_first) - range--; - while (log_clusters[k] > range->index_last) - range++; - if (!range_properties.length || - &range->props != range_properties[range_properties.length - 1]) - { - TEXTRANGE_PROPERTIES **props = range_properties.push (); - int *c = range_char_counts.push (); - if (unlikely (!props || !c)) - { - range_properties.shrink (0); - range_char_counts.shrink (0); - break; - } - *props = &range->props; - *c = 1; - } - else - { - range_char_counts[range_char_counts.length - 1]++; - } - - last_range = range; - } - } + if (has_features) + hb_ms_make_feature_ranges (feature_records, + range_records, + item_chars_len, + chars_offset, + log_clusters, + range_properties, + range_char_counts); /* Asking for glyphs in logical order circumvents at least * one bug in Uniscribe. */ @@ -914,8 +755,8 @@ retry: &items[i].a, script_tags[i], language_tag, - range_char_counts.arrayZ, - range_properties.arrayZ, + (int *) range_char_counts.arrayZ, + (TEXTRANGE_PROPERTIES**) range_properties.arrayZ, range_properties.length, pchars + chars_offset, item_chars_len, @@ -955,8 +796,8 @@ retry: &items[i].a, script_tags[i], language_tag, - range_char_counts.arrayZ, - range_properties.arrayZ, + (int *) range_char_counts.arrayZ, + (TEXTRANGE_PROPERTIES**) range_properties.arrayZ, range_properties.length, pchars + chars_offset, log_clusters + chars_offset, diff --git a/thirdparty/harfbuzz/src/hb-vector.hh b/thirdparty/harfbuzz/src/hb-vector.hh index 13517a9c29..110d457caf 100644 --- a/thirdparty/harfbuzz/src/hb-vector.hh +++ b/thirdparty/harfbuzz/src/hb-vector.hh @@ -69,7 +69,7 @@ struct hb_vector_t void fini () { - free (arrayZ); + hb_free (arrayZ); init (); } void fini_deep () @@ -177,6 +177,11 @@ struct hb_vector_t Type *push (T&& v) { Type *p = push (); + if (p == &Crap (Type)) + // If push failed to allocate then don't copy v, since this may cause + // the created copy to leak memory since we won't have stored a + // reference to it. + return p; *p = hb_forward<T> (v); return p; } @@ -204,7 +209,7 @@ struct hb_vector_t (new_allocated < (unsigned) allocated) || hb_unsigned_mul_overflows (new_allocated, sizeof (Type)); if (likely (!overflows)) - new_array = (Type *) realloc (arrayZ, new_allocated * sizeof (Type)); + new_array = (Type *) hb_realloc (arrayZ, new_allocated * sizeof (Type)); if (unlikely (!new_array)) { @@ -310,7 +315,7 @@ struct hb_sorted_vector_t : hb_vector_t<Type> { return as_array ().bsearch (x, not_found); } template <typename T> bool bfind (const T &x, unsigned int *i = nullptr, - hb_bfind_not_found_t not_found = HB_BFIND_NOT_FOUND_DONT_STORE, + hb_not_found_t not_found = HB_NOT_FOUND_DONT_STORE, unsigned int to_store = (unsigned int) -1) const { return as_array ().bfind (x, i, not_found, to_store); } }; diff --git a/thirdparty/harfbuzz/src/hb-version.h b/thirdparty/harfbuzz/src/hb-version.h index 6db58c3f7c..70325f88eb 100644 --- a/thirdparty/harfbuzz/src/hb-version.h +++ b/thirdparty/harfbuzz/src/hb-version.h @@ -41,13 +41,13 @@ HB_BEGIN_DECLS * * The major component of the library version available at compile-time. */ -#define HB_VERSION_MAJOR 2 +#define HB_VERSION_MAJOR 3 /** * HB_VERSION_MINOR: * * The minor component of the library version available at compile-time. */ -#define HB_VERSION_MINOR 8 +#define HB_VERSION_MINOR 0 /** * HB_VERSION_MICRO: * @@ -60,7 +60,7 @@ HB_BEGIN_DECLS * * A string literal containing the library version available at compile-time. */ -#define HB_VERSION_STRING "2.8.0" +#define HB_VERSION_STRING "3.0.0" /** * HB_VERSION_ATLEAST: diff --git a/thirdparty/harfbuzz/src/hb.hh b/thirdparty/harfbuzz/src/hb.hh index 18516581c7..829b5a1ab7 100644 --- a/thirdparty/harfbuzz/src/hb.hh +++ b/thirdparty/harfbuzz/src/hb.hh @@ -117,6 +117,9 @@ #pragma GCC diagnostic ignored "-Wshadow" // TODO fix #pragma GCC diagnostic ignored "-Wunsafe-loop-optimizations" // TODO fix #pragma GCC diagnostic ignored "-Wunused-parameter" // TODO fix +#if defined(__GNUC__) && !defined(__clang__) +#pragma GCC diagnostic ignored "-Wunused-result" // TODO fix +#endif #endif /* Ignored intentionally. */ @@ -179,6 +182,9 @@ #include <cassert> #include <cfloat> #include <climits> +#ifdef _MSC_VER +# define _USE_MATH_DEFINES +#endif #include <cmath> #include <cstdarg> #include <cstddef> @@ -220,10 +226,15 @@ extern "C" void* hb_malloc_impl(size_t size); extern "C" void* hb_calloc_impl(size_t nmemb, size_t size); extern "C" void* hb_realloc_impl(void *ptr, size_t size); extern "C" void hb_free_impl(void *ptr); -#define malloc hb_malloc_impl -#define calloc hb_calloc_impl -#define realloc hb_realloc_impl -#define free hb_free_impl +#define hb_malloc hb_malloc_impl +#define hb_calloc hb_calloc_impl +#define hb_realloc hb_realloc_impl +#define hb_free hb_free_impl +#else +#define hb_malloc malloc +#define hb_calloc calloc +#define hb_realloc realloc +#define hb_free free #endif @@ -335,7 +346,6 @@ extern "C" void hb_free_impl(void *ptr); #else # define HB_NODISCARD #endif -#define hb_success_t HB_NODISCARD bool /* https://github.com/harfbuzz/harfbuzz/issues/1852 */ #if defined(__clang__) && !(defined(_AIX) && (defined(__IBMCPP__) || defined(__ibmxl__))) @@ -376,7 +386,7 @@ extern "C" void hb_free_impl(void *ptr); # define HB_NO_SETLOCALE # define HB_NO_ERRNO # endif -# elif WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) +# elif !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) # ifndef HB_NO_GETENV # define HB_NO_GETENV # endif @@ -398,6 +408,9 @@ static int HB_UNUSED _hb_errno = 0; # define errno _hb_errno #endif +#define HB_STMT_START do +#define HB_STMT_END while (0) + #if defined(HAVE_ATEXIT) && !defined(HB_USE_ATEXIT) /* atexit() is only safe to be called from shared libraries on certain * platforms. Whitelist. @@ -426,16 +439,23 @@ static int HB_UNUSED _hb_errno = 0; */ # define HB_USE_ATEXIT 1 # endif -#endif +#endif /* defined(HAVE_ATEXIT) && !defined(HB_USE_ATEXIT) */ #ifdef HB_NO_ATEXIT # undef HB_USE_ATEXIT #endif #ifndef HB_USE_ATEXIT # define HB_USE_ATEXIT 0 #endif - -#define HB_STMT_START do -#define HB_STMT_END while (0) +#if !HB_USE_ATEXIT +# define hb_atexit(_) HB_STMT_START { if (0) (_) (); } HB_STMT_END +#else /* HB_USE_ATEXIT */ +# ifdef HAVE_ATEXIT +# define hb_atexit atexit +# else + template <void (*function) (void)> struct hb_atexit_t { ~hb_atexit_t () { function (); } }; +# define hb_atexit(f) static hb_atexit_t<f> _hb_atexit_##__LINE__; +# endif +#endif /* Lets assert int types. Saves trouble down the road. */ static_assert ((sizeof (hb_codepoint_t) == 4), ""); |